Tenho alguns dados sobre voos de companhias aéreas (em um quadro de dados chamado flights
) e gostaria de ver se o tempo de voo tem algum efeito na probabilidade de chegada significativamente atrasada (ou seja, 10 ou mais minutos). Imaginei que usaria regressão logística, com o tempo de vôo como preditor e se cada voo foi ou não significativamente atrasado (um monte de Bernoullis) como resposta. Eu usei o seguinte código ...
flights$BigDelay <- flights$ArrDelay >= 10
delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
summary(delay.model)
... mas obteve a seguinte saída.
> 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
O que significa que o algoritmo não converge? Eu pensei que era porque os BigDelay
valores eram TRUE
e, em FALSE
vez de 0
e 1
, mas recebi o mesmo erro depois de converter tudo. Alguma ideia?
r
logistic
separation
Daniel Standage
fonte
fonte
Respostas:
glm()
usa um algoritmo iterativo de mínimos quadrados re-ponderado. O algoritmo atingiu o número máximo de iterações permitidas antes de sinalizar convergência. O padrão documentado?glm.control
é 25. Você passa os parâmetros de controle como uma lista naglm
chamada:Como o @Conjugate Prior diz, você parece prever a resposta com os dados usados para gerá-la. Você tem separação completa, como qualquer um
ArrDelay < 10
irá preverFALSE
e qualquer umArrDelay >= 10
irá preverTRUE
. A outra mensagem de aviso informa que as probabilidades ajustadas para algumas observações foram efetivamente 0 ou 1 e esse é um bom indicador de que há algo errado com o modelo.Os dois avisos podem andar de mãos dadas. A função de probabilidade pode ser bastante plana quando alguns ficarem grandes, como no seu exemplo. Se você permitir mais iterações, os coeficientes do modelo divergirão ainda mais se você tiver um problema de separação.β^Eu
fonte
Você pode tentar verificar se a redução de viés do Firth funciona com seu conjunto de dados. É uma abordagem de probabilidade penalizada que pode ser útil para conjuntos de dados que produzem divergências usando o
glm
pacote padrão . Às vezes, pode ser usado em vez de eliminar a variável que produz separação completa / quase completa.Para a formulação da redução da polarização (o na expansão assintótica da polarização do estimador de máxima verossimilhança é removida usando a expansão clássica de cumulantes como exemplo motivador), verifique http: // biomet. oxfordjournals.org/content/80/1/27.abstractO ( n- 1)
A redução do viés da Firth é implementada no pacote R
logistf
: http://cran.r-project.org/web/packages/logistf/logistf.pdffonte