2016-05-03 3 views
1

Я работаю в R с переменной ответа, которая соответствует классу письма, полученному студентом в определенном курсе. Ответ является порядковым и, на мой взгляд, кажется логически пропорциональным. Я понимаю, что мне нужно проверить, что он пропорционален, прежде чем я могу использовать polr() вместо multinom().Тестирование предположения о пропорциональных вероятностях в R

Для одного из моих курсов данных, я «протестировал» пропорциональность, как это:

M1 <- logLik(polrModel) #'log Lik.' -1748.180691 (df=8) 
M2 <- logLik(multinomModel) #'log Lik.' -1734.775727 (df=20) 
G <- -2*(M1$1 - M2$2)) #I used a block bracket here in the real code 
# 26.8099283 
pchisq(G,12,lower.tail = FALSE) #DF is #of predictors 
#0.008228890393  #THIS P-VAL TELLS ME TO REJECT PROPORTIONAL 

Для второго способа тестирования пропорциональных шансов предположения, я также провел две модели vglm, одна с family=cumulative(parallel =TRUE) в другое с family=cumulative(parallel =FALSE). Затем я провел тест pchisq() с отличием отклонений моделей и различий в остаточных степенях свободы.

Является ли этот способ респектабельным? Если нет, я хотел бы помочь с фактическим кодированием для определения того, принимать или отклонять предположение о пропорциональных отклонениях!

В дополнение к вышеприведенным двум тестам, я нарисовал свои кумулятивные вероятности по каждому из предикторов, индивидуально. Я читал, что хочу, чтобы эти строки были параллельными. Я не понимаю, с polr() ваш выход представляет собой единый наклон для каждой независимой переменной (коэффициент), а затем определенный перехват, в зависимости от того, с какой кумулятивной вероятностью вы работаете (например: P (Y < = A), P (Y < = B) и т. Д.). Итак, если ваши коэффициенты наклона одинаковы для каждого из уравнений, как линии не могут быть параллельными?

Я взял основы моего знания в классе Криса Бильдера на YouTube; он говорит о параллельных графиках here at minute 42.

Любая помощь приветствуется! Спасибо!

+0

Эта проблема является скорее вопросом статистики, чем вопросом программирования. Вы должны искать статистические рекомендации в [stats.se], а не переполнение стека. – MrFlick

ответ

0

Ваш подход в основном правильный. У меня есть следующий код, вдохновленный Fox's «An R и S-PLUS-компаньон для Applied Regression». Глава 5: Установка обобщенных линейных моделей. Страницы 155-189. При использовании кода процитируйте главу книги. В этой главе также содержится раздел о графике.

rm(list = ls()) 
library(car) 
library(nnet) 
library(xlsx) 
library(MASS) 
options(warn=1) 
options(digits = 3) 
# 
Trial <- read.xlsx("Trial.xls", "Sheet 1") 
# Set up an out file structure 
sink("Testing_adequacy_of_Prop_odds.txt") 
# Trial$Outcome is assessed on a six point scale 0-5 
schtyp_M_M.f <- factor(Trial$Outcome, labels = c("M0", "M1", "M2", "M3", "M4", "M5")) 
# 
cat("Multinomial logistic regression \n") 
# Assign takes on a value of 1 (Treatment) or 0 (Control) 
mod.multinom <-multinom(schtyp_M_M.f~Assign, data = Trial) 
print(summary(mod.multinom, cor=F, Wald=T)) 
x1<-logLik(mod.multinom) 
cat("Degrees of freedom Multinomial logistic regression \n") 
print(df_of_multinom_model <- attributes(x1)$df) 
cat("Proportional odds logistic regression\n") 
mod.polr <- polr(schtyp_M_M.f ~ Assign, data=Trial) 
print(summary(mod.polr)) 
x2<-logLik(mod.polr) 
cat("Degrees of freedom Proportional Odds Logistic Regression \n") 
print(df_of_polr_model <- attributes(x2)$df) 

cat("Answering the question: Is proportional odds model assumption violated\n") 
cat("P value for difference in AIC between POLR and Multinomial Logit model\n") 
# abs since the values could be negative. That is negative difference of degrees of freedom would produce p=NaN 
print(1-pchisq(abs(mod.polr$deviance-mod.multinom$deviance), abs(df_of_multinom_model-df_of_polr_model))) 
sink()