Das logistische Regressionsmodell konvergiert nicht


39

Ich habe einige Daten zu Fluglinienflügen (in einem Datenrahmen mit dem Namen flights) und möchte prüfen, ob die Flugzeit einen Einfluss auf die Wahrscheinlichkeit einer erheblich verspäteten Ankunft hat (dh 10 oder mehr Minuten). Ich nahm an, dass ich logistische Regression verwenden würde, mit der Flugzeit als Prädiktor und ob jeder Flug signifikant verzögert war oder nicht (ein Haufen Bernoullis) als Antwort. Ich habe folgenden Code benutzt ...

flights$BigDelay <- flights$ArrDelay >= 10
delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
summary(delay.model)

... bekam aber folgende Ausgabe.

> flights$BigDelay <- flights$ArrDelay >= 10
> delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
Warning messages:
1: In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart,  :
  algorithm did not converge
2: In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart,  :
  fitted probabilities numerically 0 or 1 occurred
> summary(delay.model)

Call:
glm(formula = BigDelay ~ ArrDelay, family = binomial(link = "logit"),
    data = flights)

Deviance Residuals:
       Min          1Q      Median          3Q         Max
-3.843e-04  -2.107e-08  -2.107e-08   2.107e-08   3.814e-04

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -312.14     170.26  -1.833   0.0668 .
ArrDelay       32.86      17.92   1.833   0.0668 .
---
Signif. codes:  0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.8375e+06  on 2291292  degrees of freedom
Residual deviance: 9.1675e-03  on 2291291  degrees of freedom
AIC: 4.0092

Number of Fisher Scoring iterations: 25

Was bedeutet es, dass der Algorithmus nicht konvergiert hat? Ich dachte, es liege daran, dass die BigDelayWerte TRUEund FALSEstatt 0und lauten 1, aber ich habe den gleichen Fehler erhalten, nachdem ich alles konvertiert habe. Irgendwelche Ideen?


Erster Gedanke: Perfekte Trennung , dh der Prädiktor ist "zu gut", die Logs werden auf +/- unendlich gesetzt und alles fällt um. Zweiter Gedanke: Macht der Code das, was Sie denken? Ihre Variablennamen scheinen nicht ganz mit Ihrer Beschreibung übereinzustimmen. Sie könnten erarbeiten , was die Daten genauer ist, da es so aussieht , man könnte etwas mit sich selbst vorherzusagen versuchen.
Conjugateprior

1
Ich bin mir nicht sicher, ob ich das "Annehmen" verdiene. In der Antwort von @Conjugate Prior wurde erklärt, was mit Ihrem Modell nicht stimmte. Ich dachte, es lohnt sich, die Warnung, die Sie in Bezug auf den Algorithmus erwähnt haben, zu erläutern.
Setzen Sie Monica - G. Simpson

3
Wenn Sie die tatsächlichen Verzögerungszeiten haben, erhalten Sie wahrscheinlich bessere Informationen, indem Sie sie modellieren, anstatt sie auf eine binäre Variable zu reduzieren.
whuber

verwandte Frage
user603

Sie können die Funktion glm1 () ausprobieren. Es überwunden das Problem konvergieren

Antworten:


33

glm()verwendet einen iterativen, neu gewichteten Algorithmus für kleinste Quadrate. Der Algorithmus hat die maximal zulässige Anzahl von Iterationen erreicht, bevor die Konvergenz signalisiert wurde. Die Standardeinstellung ?glm.controlist 25. Sie übergeben Steuerparameter als Liste im glmAufruf:

delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial,
                   control = list(maxit = 50))

Wie @Conjugate Prior sagt, scheinen Sie die Antwort mit den zur Generierung verwendeten Daten vorherzusagen. Sie haben vollständige Trennung, wie jeder ArrDelay < 10vorhersagen wird FALSEund jeder ArrDelay >= 10vorhersagen wird TRUE. Die andere Warnmeldung besagt, dass die angepassten Wahrscheinlichkeiten für einige Beobachtungen effektiv 0 oder 1 waren. Dies ist ein guter Indikator dafür, dass mit dem Modell etwas nicht stimmt.

β^i


Können Sie erklären, was Sie hier genau unter Modellkonvergenz verstehen?
Bach

1
Unter Konvergenz verstehe ich, dass sich die im Modell geschätzten Parameter zwischen den Iterationen nicht (oder nur unter einer geringen Toleranz) ändern. Hier werden die Parameter immer größer und die Anpassung stoppt aufgrund der Beschränkung der Iterationen, aber die Parameterschätzungen haben sich zwischen der vorletzten und der letzten Iteration stark geändert und sind daher nicht konvergiert.
Setzen Sie Monica - G. Simpson

6

Sie können versuchen, zu überprüfen, ob die Bias-Reduzierung von Firth mit Ihrem Dataset funktioniert. Es handelt sich um einen Bestrafungs-Likelihood-Ansatz, der für Datensätze nützlich sein kann, die mit dem Standardpaket Divergenzen erzeugen glm. Manchmal kann es verwendet werden, anstatt die Variable zu entfernen, die eine vollständige / fast vollständige Trennung ergibt.

O(n1)

Firths Bias-Reduktion ist im R-Paket implementiert logistf: http://cran.r-project.org/web/packages/logistf/logistf.pdf

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.