Проверка допущения о пропорциональных шансах в R

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

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

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; он говорит о параллельных графах здесь, на 42-й минуте.

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


person Nameless    schedule 03.05.2016    source источник
comment
На самом деле эта проблема скорее вопрос статистики, чем вопрос программирования. За советом по статистике следует обращаться на страницу перекрестной проверки, а не на сайте Stack Overflow.   -  person MrFlick    schedule 04.05.2016


Ответы (1)


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

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()
person abcihep    schedule 29.08.2016