O modelo de regressão logística não converge


40

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 BigDelayvalores eram TRUEe, em FALSEvez de 0e 1, mas recebi o mesmo erro depois de converter tudo. Alguma ideia?


Primeiro pensamento: separação perfeita , significando que o preditor é 'bom demais', os logits vão para +/- infinito e tudo cai. Segundo pensamento: o código faz o que você acha que faz? Seus nomes de variáveis ​​parecem não corresponder exatamente à sua descrição. Você pode elaborar o que é mais precisamente os dados, uma vez que parece que você pode estar tentando prever algo com ele mesmo.
conjugateprior

1
Não tenho certeza se mereço o "Accept". A resposta do @Conjugate Prior explicou o que havia de errado com o seu modelo. Eu pensei que vale a pena explicar o aviso que você mencionou em termos de algoritmo.
Reinstate Monica - G. Simpson

3
Se você tiver os tempos de atraso reais, provavelmente obterá melhores informações modelando-os, em vez de reduzi-los a uma variável binária.
whuber


você pode tentar a função glm1 (). Ele supera o problema de convergência #

Respostas:


33

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 na glmchamada:

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

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 < 10irá prever FALSEe qualquer um ArrDelay >= 10irá prever TRUE. 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


Você poderia explicar o que exatamente você quer dizer com convergência de modelos aqui?
Bach

1
Por convergência, quero dizer que os parâmetros estimados no modelo não mudam (ou apenas mudam menos do que uma pequena tolerância) entre as iterações. Aqui, os parâmetros ficam cada vez maiores e as paradas de ajuste, devido ao limite de iterações, mas as estimativas de parâmetros mudaram muito entre as penúltima e as últimas iterações e, como tal, não convergiram.
Reintegrar Monica - G. Simpson

6

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 glmpacote 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.pdf

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.