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, Rexclut 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, Rclasse 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 rank1a été omis et chaque coefficient de rankreprésente la différence entre le coefficient de rank1et le rankniveau correspondant . La différence entre le coefficient de rank1et rank2serait 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,675rank1rank2- 3,99 - 0,675 = - 4,67rank1rank1- 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 rank1est 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 rankdiffère de zéro. Enfin, pour vérifier si toute la variable rankamé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 ranksont 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 rankdevrait rester dans le modèle.
Ce post est également très intéressant.
admit ~ 1vsadmit ~ rank - 1?