Je suis en train de prédire un résultat binaire en utilisant 50 variables continues explicatives (la gamme de la plupart des variables est à ∞ ). Mon ensemble de données contient près de 24 000 lignes. Quand je cours en R, je reçois:glm
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
J'ai lu les autres réponses qui suggèrent une séparation parfaite, mais je suis convaincu que ce n'est pas le cas dans mes données (bien qu'une séparation quasi complète puisse exister, comment puis-je vérifier si c'est le cas?) . Si je supprime certaines variables, l'erreur "ne converge pas" risque de disparaître. Mais ce n'est pas toujours ce qui se passe.
J'ai essayé d'utiliser les mêmes variables dans une bayesglm
fonction et j'ai eu les mêmes erreurs.
Quelles mesures prendriez-vous pour savoir exactement ce qui se passe ici? Comment déterminez-vous les variables à l'origine des problèmes?
la source
bayesglm
article , ils soutiennent que la séparation est "un problème commun, même lorsque la taille de l'échantillon est grande et que le nombre de prédicteurs est faible"bayesglm
essaie d'éviter la séparation en ajoutant un avant, mais avec 24 000 lignes, le précédent est probablement submergé par la probabilité. Essayez de rétrécirprior.scale
, peut-être beaucoup. Pensez également à augmenter les degrés de liberté des précédents, ce qui aidera à éliminer les grandes valeurs associées à la séparation.Réponses:
Vous pouvez facilement tester si vos classes sont parfaitement séparées dans votre espace de conception. Cela revient à résoudre un problème de programmation linéaire. Une implémentation R de ce "test" (et non un test au sens statistique du terme) est implémentée dans le paquetage safeBinaryRegression .
S'il s'avère que la séparation est bien le problème, et si vous êtes uniquement intéressé par une utilisation simple et uniforme de glm (par exemple, glm n'est pas appelé par une fonction de niveau supérieur mais par vous), il existe alors une implémentation R d'un algorithme qui modifie légèrement le classique pour le rendre «robuste» contre la séparation. Il est implémenté dans le package hlr
la source