Следующее объяснение не ограничивается логистической регрессией, но в равной степени применимо к нормальной линейной регрессии и другим GLM. Обычно R
исключает один уровень категориального, а коэффициенты обозначают разницу каждого класса с этим эталонным классом (или иногда его называют базовым классом) (это называется фиктивным контрастом кодирования или обработки R
, см. Здесь отличный обзор различных вариантов контраста). ). Чтобы увидеть текущие контрасты R
, введите options("contrasts")
. Обычно R
упорядочивает уровни категориальной переменной в алфавитном порядке и принимает первый в качестве эталонного класса. Это не всегда оптимально и может быть изменено путем ввода (здесь мы бы установили ссылочный класс на «c» в новой переменной)new.variable <- relevel(old.variable, ref="c")
, Для каждого коэффициента каждого уровня категориальной переменной выполняется тест Вальда, чтобы проверить, отличается ли парная разница между коэффициентом эталонного класса и другим классом от нуля или нет. Это значения Z и п в таблице регрессии. Если значим только один категориальный класс, это не означает, что вся переменная не имеет смысла и должна быть удалена из модели. Вы можете проверить общий эффект переменной, выполняя тест отношения правдоподобия : подходят две модели, одна из которых и один без переменной и типа anova(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
- 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
?admit~rank
либоadmit~rank - 1
, они эквивалентны в отношении соответствия.gre
иgpa
зависеть от этого недостатка включение перехвата?rank
rank
Значит, незначительный коэффициент означает, что вы можете объединять категории? Нет. Во-первых, незначительный означает, что мы не можем отвергнуть гипотезу о том, что нет никакой разницы, но это не означает, что таких различий не существует. Отсутствие доказательств - это не то же самое, что доказательство отсутствия. Во-вторых, объединение категорий, особенно ссылочной категории, изменяет интерпретацию всех других коэффициентов. Имеет ли это смысл, зависит от того, что обозначают эти разные классы.
Означает ли это, что вся категориальная переменная является «плохим» (несущественным) предиктором? Нет, для этого вам необходимо выполнить одновременный тест для всех терминов CLASS.
источник