L'explication suivante n'est pas limitée à la régression logistique mais s'applique également à la régression linéaire normale et aux autres GLM. Habituellement, R
exclut un niveau de la catégorie et les coefficients dénotent la différence de chaque classe par rapport à cette classe de référence (ou parfois appelée classe de référence) (c'est ce qu'on appelle le codage factice ou les contrastes de traitement R
, voir ici pour un excellent aperçu des différentes options de contraste ). Pour voir les contrastes actuels R
, tapez options("contrasts")
. Normalement, R
classe les niveaux de la variable catégorielle par ordre alphabétique et prend le premier comme classe de référence. Ce n'est pas toujours optimal et peut être changé en tapant (ici, nous définirions la classe de référence à "c" dans la nouvelle variable)new.variable <- relevel(old.variable, ref="c")
. Pour chaque coefficient de chaque niveau de la variable catégorielle, un test de Wald est effectué pour tester si la différence par paire entre le coefficient de la classe de référence et l'autre classe est différente de zéro ou non. C'est ce que sont les valeurs et dans la table de régression. Si une seule classe catégorielle est significative, cela n'implique pas que la variable entière n'a pas de sens et doit être supprimée du modèle. Vous pouvez vérifier l'effet global de la variable en effectuant un test de rapport de vraisemblance : ajustement deux modèles, l' une avec et l' autre sans la variable et le type de (voir exemple ci - dessous). Voici un exemple: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
Le niveau rank1
a été omis et chaque coefficient de rank
représente la différence entre le coefficient de rank1
et le rank
niveau correspondant . La différence entre le coefficient de rank1
et rank2
serait donc de . Le coefficient de est simplement l'ordonnée à l'origine. Le véritable coefficient de serait donc . Les tests de Wald testent ici si la différence entre le coefficient de la classe de référence (ici ) et les niveaux correspondants diffèrent de zéro. Dans ce cas, nous avons la preuve que les coefficients de toutes les classes diffèrent du coefficient de . Vous pouvez également adapter le modèle sans interception en ajoutant- 0,675rank1
rank2
- 3,99 - 0,675 = - 4,67rank1
rank1
- 1
à la formule du modèle pour voir tous les coefficients directement:
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
Notez que l'ordonnée à l'origine a disparu maintenant et que le coefficient de rank1
est exactement l'ordonnée à l'origine du premier modèle. Ici, le test de Wald vérifie non pas la différence par paire entre les coefficients mais l'hypothèse que chaque coefficient individuel est nul. Encore une fois, nous avons la preuve que chaque coefficient de rank
diffère de zéro. Enfin, pour vérifier si toute la variable rank
améliore l'ajustement du modèle, nous ajustons un modèle avec ( my.mod1
) et un sans la variable rank
( my.mod2
) et effectuons un test de rapport de vraisemblance. Cela teste l'hypothèse que tous les coefficients de rank
sont nuls:
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
Le test du rapport de vraisemblance est hautement significatif et nous conclurions que la variable rank
devrait rester dans le modèle.
Ce post est également très intéressant.
admit ~ 1
vsadmit ~ rank - 1
?