50 votos

El modelo de regresión logística no converge

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 retrasada (es decir, 10 o más minutos). Pensé en utilizar la regresión logística, con el tiempo de vuelo como el predictor y si cada vuelo se retrasó significativamente (un montón de Bernoullis) como la respuesta. Utilicé 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 la siguiente salida.

> 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 converge? Pensé que era porque el BigDelay valores eran TRUE y FALSE en lugar de 0 y 1 pero tengo el mismo error después de convertir todo. ¿Alguna idea?

2 votos

El primer pensamiento: Separación perfecta es decir, el predictor es "demasiado bueno", los logaritmos llegan a +/- infinito y todo se viene abajo. Segunda reflexión: ¿El código hace lo que crees que hace? Los nombres de las variables no parecen coincidir con tu descripción. Podrías explicar con más precisión cuáles son los datos, ya que parece que puede estar tratando de predecir algo con ella misma.

1 votos

No estoy seguro de merecer el "aceptar". La respuesta de @Conjugate Prior explicaba lo que estaba mal en tu modelo. Me pareció que valía la pena explicar la advertencia que mencionó en términos del algoritmo.

5 votos

Si dispone de los tiempos de retardo reales, es probable que obtenga mejor información modelándolos, en lugar de reducirlos a una variable binaria.

41voto

David J. Sokol Puntos 1730

glm() utiliza un algoritmo iterativo de mínimos cuadrados reponderados. El algoritmo alcanza el número máximo de iteraciones permitidas antes de señalar la convergencia. El valor por defecto, documentado en ?glm.control es 25. Los parámetros de control se pasan como una lista en el glm llamar:

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

Como dice @Conjugate Prior, parece que estás prediciendo la respuesta con los datos utilizados para generarla. Tienes una separación completa como cualquier ArrDelay < 10 predecirá FALSE y cualquier ArrDelay >= 10 predecirá TRUE . El otro mensaje de advertencia le indica que las probabilidades ajustadas para algunas observaciones eran efectivamente 0 o 1 y eso es un buen indicador de que tiene algo mal en el modelo.

Las dos advertencias pueden ir de la mano. La función de probabilidad puede ser bastante plana cuando algunos $\hat{\beta}_i$ se hacen grandes, como en su ejemplo. Si permite más iteraciones, los coeficientes del modelo divergirán más si tiene un problema de separación.

0 votos

¿Podría explicar a qué se refiere exactamente cuando habla de convergencia de modelos?

1 votos

Por convergencia me refiero a que los parámetros que se estiman en el modelo no cambian (o sólo cambian menos que alguna pequeña tolerancia) entre iteraciones. En este caso, los parámetros se hacen cada vez más grandes y el ajuste se detiene debido al límite de iteraciones, pero las estimaciones de los parámetros cambiaron mucho entre la penúltima y la última iteración y, por tanto, no han convergido.

7voto

Avitus Puntos 316

Podría intentar comprobar si la reducción del sesgo de Firth funciona con su conjunto de datos. Se trata de un enfoque de probabilidad penalizada que puede ser útil para los conjuntos de datos que producen divergencias utilizando el método estándar glm paquete. A veces se puede utilizar en lugar de eliminar esa variable que produce una separación completa/casi completa.

Para la formulación de la reducción del sesgo (el $O(n^{-1})$ -(el término en la expansión asintótica del sesgo del estimador de máxima verosimilitud se elimina utilizando la expansión clásica de los cumulantes como ejemplo motivador) por favor compruebe http://biomet.oxfordjournals.org/content/80/1/27.abstract

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

6voto

James Sutherland Puntos 2033

El primer pensamiento: Separación perfecta es decir, el predictor es "demasiado bueno", los logaritmos llegan a +/- infinito y todo se viene abajo.

Segunda reflexión: ¿El código hace lo que crees que hace? Los nombres de las variables no parecen coincidir con tu descripción. Usted podría elaborar lo que los datos es más precisa, ya que parece que puede estar tratando de predecir algo con ella misma.

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