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 BigDelay
valores eran TRUE
y en FALSE
lugar de 0
y 1
, pero obtuve el mismo error después de convertir todo. ¿Algunas ideas?
r
logistic
separation
Daniel Standage
fuente
fuente
Respuestas:
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.control
25. Es pasar los parámetros de control como una lista en laglm
llamada: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 < 10
predeciráFALSE
y cualquieraArrDelay >= 10
predecirá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.fuente
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
glm
paquete estándar . A veces se puede usar en lugar de eliminar esa variable que produce una separación completa / casi completa.La reducción del sesgo de Firth se implementa en el paquete R
logistf
: http://cran.r-project.org/web/packages/logistf/logistf.pdffuente