Наступне пояснення не обмежується логістичною регресією, але однаково застосовується як для звичайної лінійної регресії, так і для інших GLM. Зазвичай R
виключає один рівень категоричного, а коефіцієнти позначають різницю кожного класу до цього еталонного класу (або іноді називають базовим класом) (це називається фіктивним кодуванням або контрастами лікування R
, див. Тут для відмінного огляду різних варіантів контрастування ). Щоб побачити поточні контрасти R
, введіть options("contrasts")
. Зазвичай R
впорядковує рівні категоріальної змінної в алфавітному порядку і приймає перший як еталонний клас. Це не завжди є оптимальним, і його можна змінити, набравши текст (тут ми встановимо опорний клас на "c" у новій змінній)new.variable <- relevel(old.variable, ref="c")
. Для кожного коефіцієнта кожного рівня категоріальної змінної проводиться тест Вальда , щоб перевірити, чи відрізняється попарна різниця між коефіцієнтом опорного класу та іншим класом, відмінним від нуля чи ні. Це те, що і -значення в таблиці регресії. Якщо важливий лише один категоричний клас, це не означає, що вся змінна є безглуздою і її слід вилучити з моделі. Ви можете перевірити загальний ефект змінної, виконуючи тест відношення правдоподібності : підходять дві моделі, одна з яких і один без змінної і типу в (дивись приклад нижче). Ось приклад:zpanova(model1, model2, test="LRT")
R
mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Рівень rank1
опущений, і кожен коефіцієнт rank
позначає різницю між коефіцієнтом rank1
та відповідним rank
рівнем. Отже різниця між коефіцієнтом rank1
і і rank2
становила б . Коефіцієнт просто перехоплення. Тож справжній коефіцієнт буде . Тести Wald тут перевіряють, чи різниця між коефіцієнтом опорного класу (тут ) та відповідними рівнями відрізняється від нуля. У цьому випадку ми маємо докази того, що коефіцієнти всіх класів відрізняються від коефіцієнта . Ви також можете підігнати модель без перехоплення, додавши- 0,675rank1
rank2
- 3,99 - 0,675 = - 4,67rank1
rank1
- 1
до формули моделі, щоб переглянути всі коефіцієнти безпосередньо:
my.mod2 <- glm(admit ~ gre + gpa + rank - 1, data = mydata, family = "binomial")
summary(my.mod2) # no intercept model
Coefficients:
Estimate Std. Error z value Pr(>|z|)
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank1 -3.989979 1.139951 -3.500 0.000465 ***
rank2 -4.665422 1.109370 -4.205 2.61e-05 ***
rank3 -5.330183 1.149538 -4.637 3.54e-06 ***
rank4 -5.541443 1.138072 -4.869 1.12e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Зауважимо, що перехоплення зараз відсутнє, а коефіцієнт - rank1
це саме перехоплення першої моделі. Тут тест Уолда перевіряє не парну різницю між коефіцієнтами, а гіпотезу про те, що кожен окремий коефіцієнт дорівнює нулю. Знову ми маємо докази того, що кожен коефіцієнт rank
відрізняється від нуля. Нарешті, щоб перевірити, чи вся змінна rank
покращує придатність моделі, ми підходимо до однієї моделі з ( my.mod1
) та однієї без змінної rank
( my.mod2
) та проводимо тест на коефіцієнт ймовірності. Це перевіряє гіпотезу, що всі коефіцієнти rank
дорівнюють нулю:
my.mod1 <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # with rank
my.mod2 <- glm(admit ~ gre + gpa, data = mydata, family = "binomial") # without rank
anova(my.mod1, my.mod2, test="LRT")
Analysis of Deviance Table
Model 1: admit ~ gre + gpa + rank
Model 2: admit ~ gre + gpa
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 394 458.52
2 397 480.34 -3 -21.826 7.088e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Тест на коефіцієнт ймовірності є дуже вагомим, і ми б зробили висновок, що змінна rank
повинна залишатися в моделі.
Цей пост також дуже цікавий.
admit ~ 1
vsadmit ~ rank - 1
?