56 votos

Regresión logística: prueba de chi-cuadrado anova vs. significación de los coeficientes (anova() vs summary() en R)

Tengo un modelo GLM logístico con 8 variables. He realizado una prueba de chi-cuadrado en R anova(glm.model,test='Chisq') y 2 de las variables resultan ser predictivas cuando se ordenan en la parte superior de la prueba y no tanto cuando se ordenan en la parte inferior. La página web summary(glm.model) sugiere que sus coeficientes son insignificantes (valor p alto). En este caso parece que las variables no son significativas.

Quería preguntar cuál es la mejor prueba de significación de las variables: la significación del coeficiente en el resumen del modelo o la prueba de chi-cuadrado de anova() . Además, ¿cuándo es mejor una cosa que la otra?

Supongo que es una pregunta amplia, pero se agradecerá cualquier indicación sobre lo que hay que tener en cuenta.

4 votos

Esto es análogo a la distinción entre sumas de cuadrados de tipo I y de tipo III para probar coeficientes en modelos lineales. Puede que te ayude leer mi respuesta aquí: cómo interpretar ANOVA y MANOVA secuenciales de tipo I .

93voto

mehturt Puntos 13

Además de la respuesta de @gung, intentaré dar un ejemplo de lo que es el anova que la función de prueba en realidad. Espero que esto le permita decidir qué pruebas son apropiadas para las hipótesis que le interesa probar.

Supongamos que tiene un resultado $y$ y 3 variables predictoras: $x_{1}$ , $x_{2}$ y $x_{3}$ . Ahora bien, si su modelo de regresión logística fuera my.mod <- glm(y~x1+x2+x3, family="binomial") . Cuando se ejecuta anova(my.mod, test="Chisq") la función compara los siguientes modelos en orden secuencial. Este tipo también se denomina ANOVA de tipo I o suma de cuadrados de tipo I (véase este puesto para comparar los distintos tipos):

  1. glm(y~1, family="binomial") contra. glm(y~x1, family="binomial")
  2. glm(y~x1, family="binomial") contra. glm(y~x1+x2, family="binomial")
  3. glm(y~x1+x2, family="binomial") contra. glm(y~x1+x2+x3, family="binomial")

Así que secuencialmente compara el modelo más pequeño con el siguiente más complejo añadiendo una variable en cada paso. Cada una de esas comparaciones se realiza mediante un prueba de razón de verosimilitud (Prueba LR; véase el ejemplo más abajo). Por lo que sé, estas hipótesis rara vez son de interés, pero esto debe decidirlo usted.

Este es un ejemplo en 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 

# The sequential analysis
anova(my.mod, test="Chisq")

Terms added sequentially (first to last)    

     Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
NULL                   399     499.98              
gre   1  13.9204       398     486.06 0.0001907 ***
gpa   1   5.7122       397     480.34 0.0168478 *  
rank  3  21.8265       394     458.52 7.088e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# We can make the comparisons by hand (adding a variable in each step)

  # model only the intercept
mod1 <- glm(admit ~ 1,                data = mydata, family = "binomial") 
  # model with intercept + gre
mod2 <- glm(admit ~ gre,              data = mydata, family = "binomial") 
  # model with intercept + gre + gpa
mod3 <- glm(admit ~ gre + gpa,        data = mydata, family = "binomial") 
  # model containing all variables (full model)
mod4 <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") 

anova(mod1, mod2, test="LRT")

Model 1: admit ~ 1
Model 2: admit ~ gre
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1       399     499.98                          
2       398     486.06  1    13.92 0.0001907 ***

anova(mod2, mod3, test="LRT")

Model 1: admit ~ gre
Model 2: admit ~ gre + gpa
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       398     486.06                       
2       397     480.34  1   5.7122  0.01685 *

anova(mod3, mod4, test="LRT")

Model 1: admit ~ gre + gpa
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1       397     480.34                          
2       394     458.52  3   21.826 7.088e-05 ***

El $p$ -valores en la salida de summary(my.mod) son Pruebas de Wald que ponen a prueba las siguientes hipótesis (nótese que son intercambiables y el el orden de las pruebas no importa ):

  • Para el coeficiente de x1 : glm(y~x2+x3, family="binomial") contra. glm(y~x1+x2+x3, family="binomial")
  • Para el coeficiente de x2 : glm(y~x1+x3, family="binomial") contra. glm(y~x1+x2+x3, family="binomial")
  • Para el coeficiente de x3 : glm(y~x1+x2, family="binomial") contra. glm(y~x1+x2+x3, family="binomial")

Así que cada coeficiente contra el modelo completo que contiene todos los coeficientes. Las pruebas de Wald son una aproximación a la prueba de razón de verosimilitud. También podríamos hacer las pruebas de razón de verosimilitud (prueba LR). He aquí cómo:

mod1.2 <- glm(admit ~ gre + gpa,  data = mydata, family = "binomial")
mod2.2 <- glm(admit ~ gre + rank, data = mydata, family = "binomial")
mod3.2 <- glm(admit ~ gpa + rank, data = mydata, family = "binomial")

anova(mod1.2, my.mod, test="LRT") # joint LR test for rank

Model 1: admit ~ gre + gpa
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1       397     480.34                          
2       394     458.52  3   21.826 7.088e-05 ***

anova(mod2.2, my.mod, test="LRT") # LR test for gpa

Model 1: admit ~ gre + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     464.53                       
2       394     458.52  1   6.0143  0.01419 *

anova(mod3.2, my.mod, test="LRT") # LR test for gre

Model 1: admit ~ gpa + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     462.88                       
2       394     458.52  1   4.3578  0.03684 *

El $p$ -los valores de las pruebas de razón de verosimilitud son muy similares a los obtenidos por las pruebas de Wald por summary(my.mod) arriba.

Nota: La tercera comparación de modelos para rank de anova(my.mod, test="Chisq") es la misma que la comparación para rank en el siguiente ejemplo ( anova(mod1.2, my.mod, test="Chisq") ). Cada vez, el $p$ -valor es el mismo, $7.088\cdot 10^{-5}$ . Es cada vez la comparación entre el modelo sin rank frente al modelo que lo contiene.

2 votos

+1, esta es una explicación buena y completa. 1 pequeño punto: Creo que cuando test="Chisq" si no está realizando una prueba de razón de verosimilitud, debe configurar test="LRT" para ello, véase anova.glm .

7 votos

@gung Gracias por el cumplido. test="LRT" y test="Chisq" son sinónimos (lo dice en la página que has enlazado).

0 votos

Me parece justo, debería leer con más atención.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X