Ich versuche, ein binäres Ergebnis unter Verwendung von 50 kontinuierlichen erklärenden Variablen vorherzusagen (der Bereich der meisten Variablen ist bis ). Mein Datensatz enthält fast 24.000 Zeilen. Wenn ich in R renne, bekomme ich:glm
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
Ich habe die anderen Antworten gelesen, die darauf hindeuten, dass möglicherweise eine perfekte Trennung stattfindet, bin jedoch zuversichtlich, dass dies bei meinen Daten nicht der Fall ist (obwohl eine quasi vollständige Trennung vorliegen könnte; wie kann ich testen, ob dies der Fall ist). . Wenn ich einige Variablen entferne, wird der Fehler "Nicht konvergieren" möglicherweise nicht mehr angezeigt. Aber das passiert nicht immer.
Ich habe versucht, die gleichen Variablen in einer bayesglm
Funktion zu verwenden und habe die gleichen Fehler erhalten.
Welche Schritte würden Sie unternehmen, um herauszufinden, was genau hier vor sich geht? Wie können Sie herausfinden, welche Variablen die Probleme verursachen?
quelle
bayesglm
Zeitung wird argumentiert, dass die Trennung "ein häufiges Problem ist, selbst wenn die Stichprobengröße groß und die Anzahl der Prädiktoren klein ist"bayesglm
versucht, die Trennung durch Hinzufügen eines Prior zu vermeiden, aber bei 24.000 Zeilen wird der Prior wahrscheinlich von der Wahrscheinlichkeit überfordert. Versuchen Sie es mit einem Schrumpfenprior.scale
, möglicherweise um eine große Menge. Ziehen Sie auch in Betracht, die Freiheitsgrade des Prior zu erhöhen, um große Werte im Zusammenhang mit der Trennung auszuschließen.Antworten:
Mit einem so großen Designraum ( !) Ist es möglich, eine perfekte Trennung zu erzielen, ohne dass eine der Variablen einzeln getrennt werden muss. Ich würde sogar den Kommentar von David J. Harris unterstützen, indem ich sage, dass dies wahrscheinlich ist.R50
Sie können ganz einfach testen, ob Ihre Klassen in Ihrem Designbereich perfekt voneinander getrennt sind. Dies läuft darauf hinaus, ein lineares Programmierproblem zu lösen. Eine R-Implementierung dieses 'Tests' (kein Test im statistischen Sinne des Begriffs) ist im safeBinaryRegression- Paket implementiert .
Wenn sich herausstellt, dass die Trennung tatsächlich das Problem ist und Sie nur an einer einfachen Vanille-Verwendung von glm interessiert sind (z. B. glm wird nicht von einer übergeordneten Funktion, sondern von Ihnen aufgerufen), dann gibt es eine R-Implementierung eines Algorithmus, der modifiziert den klassischen leicht, um ihn 'robust' gegen Trennung zu machen. Es ist im hlr- Paket implementiert
quelle