El modelo de regresión logística no converge


40

Tengo algunos datos sobre vuelos de aerolíneas (en un marco de datos llamado flights) y me gustaría ver si el tiempo de vuelo tiene algún efecto sobre la probabilidad de una llegada significativamente demorada (es decir, 10 minutos o más). Pensé que usaría la regresión logística, con el tiempo de vuelo como predictor y si cada vuelo se retrasó significativamente (un montón de Bernoullis) como respuesta. Use el siguiente código...

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

... pero obtuve el siguiente resultado.

> 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

¿Qué significa que el algoritmo no convergió? Pensé que era porque los BigDelayvalores eran TRUEy en FALSElugar de 0y 1, pero obtuve el mismo error después de convertir todo. ¿Algunas ideas?


Primer pensamiento: separación perfecta , lo que significa que el predictor es "demasiado bueno", los logits van a +/- infinito y todo se cae. Segundo pensamiento: ¿el código hace lo que crees que hace? Sus nombres de variables no parecen coincidir con su descripción. Puede elaborar cuáles son los datos con mayor precisión, ya que parece que podría estar tratando de predecir algo consigo mismo.
conjugateprior

1
No estoy seguro de merecer el "aceptar". La respuesta de @Conjugate Prior explicó lo que estaba mal con su modelo. Pensé que valía la pena explicar la advertencia que mencionaste en términos del algoritmo.
Restablecer a Monica - G. Simpson

3
Si tiene los tiempos de retraso reales, es probable que obtenga mejor información al modelarlos, en lugar de reducirlos a una variable binaria.
whuber


puedes probar la función glm1 (). Se superó el problema converger

Respuestas:


33

glm()utiliza un algoritmo iterativo re-ponderado de mínimos cuadrados. El algoritmo alcanzó el número máximo de iteraciones permitidas antes de señalar la convergencia. El valor predeterminado, documentado en ?glm.control25. Es pasar los parámetros de control como una lista en la glmllamada:

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

Como dice @Conjugate Prior, parece que está prediciendo la respuesta con los datos utilizados para generarla. Tiene una separación completa, ya que cualquiera ArrDelay < 10predecirá FALSEy cualquiera ArrDelay >= 10predecirá TRUE. El otro mensaje de advertencia le dice que las probabilidades ajustadas para algunas observaciones fueron efectivamente 0 o 1 y ese es un buen indicador de que tiene algo mal con el modelo.

β^yo


¿Podría explicar exactamente qué quiere decir con convergencia de modelos aquí?
Bach

1
Por convergencia quiero decir que los parámetros que se estiman en el modelo no cambian (o solo cambian menos que una pequeña tolerancia) entre iteraciones. Aquí los parámetros se vuelven cada vez más grandes y el ajuste se detiene debido al límite de las iteraciones, pero las estimaciones de los parámetros cambiaron mucho entre la penúltima y las últimas iteraciones y, como tal, no han convergido.
Restablece a Monica - G. Simpson

6

Podría intentar verificar si la reducción de sesgo de Firth funciona con su conjunto de datos. Es un enfoque de probabilidad penalizado que puede ser útil para conjuntos de datos que producen divergencias utilizando el glmpaquete estándar . A veces se puede usar en lugar de eliminar esa variable que produce una separación completa / casi completa.

O(norte-1)

La reducción del sesgo de Firth se implementa en el paquete R logistf: http://cran.r-project.org/web/packages/logistf/logistf.pdf

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.