Тестирование пропорционального предположения вероятности в 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.
Любая помощь приветствуется! Спасибо!
1 ответ
Ваш подход по сути правильный. У меня есть следующий код, вдохновленный "Компаньоном R и S-PLUS к Прикладной регрессии" Фокса. Глава 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()