Logistische Regression: Anova-Chi-Quadrat-Test vs. Signifikanz der Koeffizienten (anova () vs. summary () in R)

35

Ich habe ein logistisches GLM-Modell mit 8 Variablen. Ich habe einen Chi-Quadrat-Test in R durchgeführt, anova(glm.model,test='Chisq')und 2 der Variablen haben sich als vorhersagend erwiesen, wenn sie oben im Test bestellt wurden, und nicht so sehr, wenn sie unten bestellt wurden. Das summary(glm.model)deutet darauf hin, dass ihre Koeffizienten unbedeutend sind (hoher p-Wert). In diesem Fall scheinen die Variablen nicht signifikant zu sein.

Ich wollte fragen, welches ein besserer Test für die Signifikanz von Variablen ist - die Koeffizientensignifikanz in der Modellzusammenfassung oder der Chi-Quadrat-Test von anova(). Also - wann ist einer besser als der andere?

Ich denke, es ist eine weit gefasste Frage, aber alle Hinweise auf das, was zu berücksichtigen ist, werden gewürdigt.

StreetHawk
quelle
4
Dies ist analog zur Unterscheidung zwischen Quadratsummen Typ I und Typ III zum Testen von Koeffizienten in linearen Modellen. Es könnte Ihnen helfen, meine Antwort hier zu lesen: wie man sequentielle ANOVA und MANOVA vom Typ I interpretiert .
gung - Reinstate Monica

Antworten:

61

Zusätzlich zur Antwort von @ gung werde ich versuchen, ein Beispiel dafür zu liefern, was die anovaFunktion tatsächlich testet. Ich hoffe, dass Sie auf diese Weise entscheiden können, welche Tests für die Hypothesen geeignet sind, die Sie testen möchten.

Angenommen, Sie haben ein Ergebnis und 3 Prädiktorvariablen: , und . Nun, wenn Ihr logistisches Regressionsmodell wäre . Wenn Sie ausführen , vergleicht die Funktion die folgenden Modelle nacheinander:yx1x2x3my.mod <- glm(y~x1+x2+x3, family="binomial")anova(my.mod, test="Chisq")

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

Daher wird das kleinere Modell nacheinander mit dem nächst komplexeren Modell verglichen, indem in jedem Schritt eine Variable hinzugefügt wird. Jeder dieser Vergleiche erfolgt über einen Likelihood-Ratio-Test (LR-Test; siehe Beispiel unten). Meines Wissens sind diese Hypothesen selten von Interesse, aber dies muss von Ihnen entschieden werden.

Hier ist ein Beispiel in 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 ***

Die Werte in der Ausgabe von sind Wald-Tests, die die folgenden Hypothesen prüfen (beachten Sie, dass sie austauschbar sind und die Reihenfolge der Tests keine Rolle spielt ):psummary(my.mod)

  • Für Koeffizient von x1: glm(y~x2+x3, family="binomial")vs. glm(y~x1+x2+x3, family="binomial")
  • Für Koeffizient von x2: glm(y~x1+x3, family="binomial")vs.glm(y~x1+x2+x3, family="binomial")
  • Für Koeffizient von x3: glm(y~x1+x2, family="binomial")vs.glm(y~x1+x2+x3, family="binomial")

Also jeder Koeffizient gegen das Vollmodell enthält alle Koeffizienten. Wald-Tests sind eine Annäherung an den Likelihood-Ratio-Test. Wir könnten auch die Likelihood-Ratio-Tests (LR-Test) durchführen. Hier ist, wie:

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 *

Die Werte aus den Likelihood-Ratio-Tests sind denjenigen sehr ähnlich, die durch die Wald-Tests von oben erhalten wurden.psummary(my.mod)

Hinweis: Der dritte Modellvergleich für rankof entspricht anova(my.mod, test="Chisq")dem Vergleich für rankdas folgende Beispiel ( anova(mod1.2, my.mod, test="Chisq")). Der Wert ist jedes Mal der gleiche, . Es ist jedes Mal der Vergleich zwischen dem Modell ohne und dem Modell, das es enthält.p7.088105rank

COOLSerdash
quelle
1
+1, das ist eine gute, umfassende Erklärung. 1 kleiner Punkt: Ich glaube, wenn test="Chisq"Sie keinen Likelihood-Ratio-Test durchführen, müssen Sie dies festlegen test="LRT", siehe ? Anova.glm .
gung - Reinstate Monica
6
@gung Danke für das Kompliment. test="LRT"und test="Chisq"sind auch (es steht auf der von dir verlinkten seite).
COOLSerdash
2
Kein Problem, aber ich denke, das ist ein guter Punkt. test="LRT"ist besser, da sofort klar ist, dass es sich um einen Likelihood-Ratio-Test handelt. Ich habe es geändert. Vielen Dank.
COOLSerdash
4
+1 Ich bin beeindruckt von Ihrem raschen Fortschritt in nur einem Monat und Ihrer Fähigkeit, eine gut ausgearbeitete, klare Erklärung abzugeben. Danke für deine Bemühungen!
whuber
1
Gute Antwort. Darf ich fragen, wie die p-Werte ( 7.088e-05, 0.01419, 00.03684) interpretiert werden sollen?
TheSimpliFire