web-dev-qa-db-fra.com

Pourquoi ai-je le message "algorithme ne converge pas" et "prob ajusté numériquement ou 1" avec glm?

C'est donc une question très simple, je n'arrive pas à comprendre.

J'exécute un logit à l'aide de la fonction glm, mais continue de recevoir des messages d'avertissement relatifs à la variable indépendante. Ils sont stockés en tant que facteurs et je les ai changés en numériques, mais sans succès. Je les ai aussi codés à 0/1 mais cela n'a pas fonctionné non plus.

S'il vous plaît aider!

> mod2 <- glm(winorlose1 ~ bid1, family="binomial")
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

Je l'ai aussi essayé dans Zelig, mais erreur similaire:

> mod2 = zelig(factor(winorlose1) ~ bid1, data=dat, model="logit")
How to cite this model in Zelig:
Kosuke Imai, Gary King, and Oliva Lau. 2008. "logit: Logistic Regression for Dichotomous Dependent Variables" in Kosuke Imai, Gary King, and Olivia Lau, "Zelig: Everyone's Statistical Software," http://gking.harvard.edu/zelig
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

MODIFIER:

> str(dat)
'data.frame':   3493 obs. of  3 variables:
 $ winorlose1: int  2 2 2 2 2 2 2 2 2 2 ...
 $ bid1      : int  700 300 700 300 500 300 300 700 300 300 ...
 $ home      : int  1 0 1 0 0 0 0 1 0 0 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:63021] 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 ...
  .. ..- attr(*, "names")= chr [1:63021] "3494" "3495" "3496" "3497" ...
32
ATMathew

Si vous consultez ?glm (ou même effectuez une recherche Google pour votre deuxième message d'avertissement), vous pouvez tomber sur la documentation:

Pour en savoir plus sur les messages d’alerte concernant «des probabilités ajustées numériquement égales à 0 ou 1» pour les GLM binomiales, voir Venables & Ripley (2002, p. 197–8).

Maintenant, tout le monde n'a pas ce livre. Mais en supposant que ce soit casher pour moi de faire cela, voici le passage pertinent:

Il existe une circonstance assez commune dans laquelle les deux convergent des problèmes et le phénomène Hauck-Donner peuvent se produire. C'est quand le les probabilités ajustées sont extrêmement proches de zéro ou d'un. Considérons un problème de diagnostic médical avec des milliers de cas et environ 50 binaires variable explicative (pouvant provenir du codage de moins de variables catégoriques ); un de ces indicateurs est rarement vrai mais toujours indique que la maladie est présente. Puis les probabilités ajustées des cas avec cet indicateur devrait être un, qui ne peut être atteint en prenant βje =. Le résultat de glm sera avertissements et un coefficient estimé d'environ +/- 10. Il y a eu une discussion assez approfondie à ce sujet dans la littérature statistique, réclamant généralement la non-existence d'estimations de probabilité maximale; voir Sautner et Duffy (1989, p. 234).

L'un des auteurs de ce livre a commenté de manière un peu plus détaillée here . La leçon à tirer est donc d’examiner attentivement l’un des niveaux de votre prédicteur. (Et Google le message d'avertissement!)

36
joran

Si vous avez correctement spécifié la formule GLM et les entrées correspondantes (matrice de conception, fonction de liaison, etc.). L'algorithme glm peut ne pas converger en raison du nombre insuffisant d'itérations utilisées dans l'algorithme des moindres carrés repondéré de manière itérative (IRLS). Remplacez maxit = 25 (valeur par défaut) par maxit = 100 dans R. 

0
user10813428

Ceci est probablement dû à la séparation complète, c’est-à-dire qu’un groupe est entièrement composé de 0 ou de 1.

Il y a plusieurs options pour gérer cela:

(a) Utilisez la méthode de vraisemblance pénalisée de Firth telle qu'elle est mise en œuvre dans les paquets logistf ou brglm in R. Cette méthode utilise la méthode proposée par Firth (1993), "Réduction du biais du maximum de vraisemblance estimé", Biometrika, 80, 1 .; ce qui élimine le biais de premier ordre des estimations du maximum de vraisemblance. 

(b) En utilisant des estimations sans biais médianes dans la régression logistique conditionnelle exacte. Le paquet elrm ou logistiX in R peut le faire.

(c) Utilisez LASSO ou une régression logistique régularisée par réseau élastique, p. en utilisant le paquet glmnet dans R.

d) Go Bayésien, cf. le papier Gelman et al (2008), "Une distribution a priori peu informative pour les modèles logistiques et de régression", Ann. Appl. Stat., 2, 4 et fonction bayesglm dans le paquet de bras.

(e) Utilisez un modèle de régression logistique caché, comme décrit dans Rousseeuw & Christmann (2003), "Robustesse face aux séparations et aux exceptions dans la régression logistique", Statistiques de calcul et analyse des données, 43, 3. , et implémenté dans le package R hlr

Vous devez d'abord recoder votre facteur en tant que facteur, à l'aide de dat$bid1 = as.factor(dat$bid1))

Les solutions à ce problème sont également abordées ici:

https://stats.stackexchange.com/questions/11109/how-to-deal-with-perfect-separation-in-logistic-regression

https://stats.stackexchange.com/questions/45803/registic-regression-in-r-resulted-in-perfect-separation-hauck-ducker-phenomenon

https://stats.stackexchange.com/questions/239928/is-there-any-explanation-intuitive-de-pour-quel-vous-prouve-parle-logistique-au-nouvelle-pas-pour

https://stats.stackexchange.com/questions/5354/logistic-regression-model-does-not-converge?rq=1

0
Tom Wenseleers