La siguiente explicación no se limita a la regresión logística, sino que se aplica igualmente en la regresión lineal normal y otros GLM. Por lo general, R
excluye un nivel de lo categórico y los coeficientes denotan la diferencia de cada clase con esta clase de referencia (o a veces llamada clase de referencia) (esto se denomina codificación ficticia o contrastes de tratamiento R
, consulte aquí para obtener una excelente descripción de las diferentes opciones de contraste ) Para ver los contrastes actuales R
, escriba options("contrasts")
. Normalmente, R
ordena los niveles de la variable categórica alfabéticamente y toma el primero como clase de referencia. Esto no siempre es óptimo y se puede cambiar escribiendo (aquí, estableceríamos la clase de referencia en "c" en la nueva variable)new.variable <- relevel(old.variable, ref="c")
. Para cada coeficiente de cada nivel de la variable categórica, se realiza una prueba de Wald para probar si la diferencia por pares entre el coeficiente de la clase de referencia y la otra clase es diferente de cero o no. Esto es lo que son los valores y en la tabla de regresión. Si solo una clase categórica es significativa, esto no implica que toda la variable no tenga sentido y deba eliminarse del modelo. Puede comprobar el efecto global de la variable mediante la realización de una prueba de razón de verosimilitud : fit dos modelos, una con y otra sin la variable y el tipo en (ver ejemplo a continuación). Aquí hay un ejemplo:zpaganova(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
El nivel rank1
se ha omitido y cada coeficiente de rank
denota la diferencia entre el coeficiente de rank1
y el rank
nivel correspondiente . Entonces, la diferencia entre el coeficiente de rank1
y rank2
sería . El coeficiente de es simplemente la intersección. Entonces el verdadero coeficiente de sería . Las pruebas de Wald aquí prueban si la diferencia entre el coeficiente de la clase de referencia (aquí ) y los niveles correspondientes difieren de cero. En este caso, tenemos evidencia de que los coeficientes de todas las clases difieren del coeficiente de . También puede ajustar el modelo sin interceptar agregando- 0.675- 3.99 - 0.675 = - 4.67rank1
rank2
- 3.99 - 0.675 = - 4.67rank1
rank1
- 1
a la fórmula del modelo para ver todos los coeficientes directamente:
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
Tenga en cuenta que la intersección ya no existe y que el coeficiente de rank1
es exactamente la intersección del primer modelo. Aquí, la prueba de Wald verifica no la diferencia por pares entre los coeficientes, sino la hipótesis de que cada coeficiente individual es cero. Nuevamente, tenemos evidencia de que cada coeficiente de rank
difiere de cero. Finalmente, para verificar si la variable completa rank
mejora el ajuste del modelo, ajustamos un modelo con ( my.mod1
) y uno sin la variable rank
( my.mod2
) y realizamos una prueba de razón de probabilidad. Esto prueba la hipótesis de que todos los coeficientes de rank
son cero:
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
La prueba de razón de probabilidad es altamente significativa y concluiríamos que la variable rank
debe permanecer en el modelo.
Esta publicación también es muy interesante.
admit ~ 1
vsadmit ~ rank - 1
?