Le modèle de régression logistique ne converge pas


40

J'ai quelques données sur les vols des compagnies aériennes (dans une trame de données appelée flights) et j'aimerais voir si le temps de vol a un effet sur la probabilité d'une arrivée considérablement retardée (c'est-à-dire 10 minutes ou plus). Je pensais utiliser une régression logistique, avec le temps de vol comme facteur de prévision et si chaque vol était retardé de manière significative (un groupe de Bernoullis) comme réponse. J'ai utilisé le code suivant ...

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

... mais j'ai eu la sortie suivante.

> 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'est-ce que cela signifie que l'algorithme n'a pas convergé? Je pensais que c'était parce que les BigDelayvaleurs étaient TRUEet FALSEau lieu de 0et 1, mais j'ai eu la même erreur après avoir tout converti. Des idées?


Première réflexion: Séparation parfaite , ce qui signifie que le prédicteur est «trop bon», les logits vont à +/- infini et tout s’écroule. Seconde réflexion: le code fait-il ce que vous pensez qu'il fait? Vos noms de variables ne semblent pas correspondre tout à fait à votre description. Vous pourriez préciser ce que les données sont plus précisément, car il semble que vous pourriez essayer de prédire quelque chose avec lui - même.
conjugateprior

1
Je ne suis pas sûr que je mérite l'acceptation. La réponse de @Conjugate Prior a expliqué ce qui n'allait pas avec votre modèle. J'ai pensé qu'il valait la peine d'expliquer l'avertissement que vous avez mentionné en termes d'algorithme.
Réintégrer Monica - G. Simpson

3
Si vous avez les délais réels, vous obtiendrez probablement de meilleures informations en les modélisant, plutôt que de les réduire à une variable binaire.
whuber


vous pouvez essayer la fonction glm1 (). Il surmonte le problème converger

Réponses:


33

glm()utilise un algorithme itératif des moindres carrés re-pondéré. L'algorithme atteint le nombre maximal d'itérations autorisées avant la convergence de signalisation. La valeur par défaut, documentée dans, ?glm.controlest 25. Vous transmettez les paramètres de contrôle sous forme de liste dans l' glmappel:

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

Comme @Conjugate Prior dit, vous semblez prédire la réponse avec les données utilisées pour la générer. Vous avez une séparation complète, comme ArrDelay < 10le prédisent FALSEtous ArrDelay >= 10les prédictions TRUE. L'autre message d'avertissement vous indique que les probabilités ajustées pour certaines observations sont bien égales à 0 ou 1, ce qui est un bon indicateur du fait que quelque chose ne va pas dans le modèle.

Les deux avertissements peuvent aller de pair. La fonction de vraisemblance peut être assez plate quand certains deviennent grands, comme dans votre exemple. Si vous autorisez plus d'itérations, les coefficients du modèle divergent davantage si vous rencontrez un problème de séparation.β^i


Pourriez-vous expliquer ce que vous entendez exactement par convergence de modèles ici?
Bach le

1
Par convergence, je veux dire que les paramètres estimés dans le modèle ne changent pas (ou changent moins qu'une légère tolérance) entre les itérations. Ici, les paramètres deviennent de plus en plus grands et les ajustements s'arrêtent à cause de la limite d'itérations, mais les estimations de paramètres ont beaucoup changé entre l'avant-dernière et les dernières itérations et n'ont donc pas convergé.
Réintégrer Monica - G. Simpson le

6

Vous pouvez essayer de vérifier si la réduction de biais de Firth fonctionne avec votre jeu de données. Il s'agit d'une approche de vraisemblance pénalisée qui peut être utile pour les jeux de données qui produisent des divergences à l'aide du glmpackage standard . Parfois, il peut être utilisé au lieu d'éliminer cette variable qui produit une séparation complète / presque complète.

Pour la formulation de la réduction du biais (le terme dans le développement asymptotique du biais de l'estimateur du maximum de vraisemblance est supprimée en utilisant le développement classique des cumulants comme exemple motivant), veuillez consulter http: // biomet. oxfordjournals.org/content/80/1/27.abstractO(n1)

La réduction de biais de Firth est implémentée dans le package R logistf: http://cran.r-project.org/web/packages/logistf/logistf.pdf

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.