Die logistische Regression in R führte zu einer perfekten Trennung (Hauck-Donner-Phänomen). Was jetzt?


56

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 bayesglmFunktion 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?


5
Warum sind Sie zuversichtlich, dass keine Trennung stattfindet? In der bayesglmZeitung wird argumentiert, dass die Trennung "ein häufiges Problem ist, selbst wenn die Stichprobengröße groß und die Anzahl der Prädiktoren klein ist"
David J. Harris,

2
Ein anderer Gedanke: bayesglmversucht, 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 Schrumpfen prior.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.
David J. Harris

Danke für die Vorschläge David. Ich glaube nicht, dass eine Trennung stattfindet, da die abhängige Variable beim Sortieren der einzelnen erklärenden Variablen für hohe oder niedrige Werte der erklärenden Variablen nicht immer wahr oder falsch ist. Sofern dies nicht als Trennung angesehen wird: Die abhängige Variable gilt für alle x7> 32, aber x7 ist nur in 10 Fällen> 32. Gibt es eine Möglichkeit, die Trennung außerhalb einer logistischen Regression zu überprüfen? Oder sehen Sie, welche Variable die Trennung verursacht? Ich habe deine Bayesglm-Vorschläge ausprobiert (ich habe Prior.scale auf 1 und Prior.df auf Inf gesetzt) ​​und trotzdem die Hauck Donner-Fehler erhalten.
Dcook


"Wie finden Sie heraus, welche Variablen die Probleme verursachen?" Die Binärsuche ist immer ein guter Fallback. Sie haben nur 50 Variablen. Wenn diese also perfekt durch eine einzelne Variable getrennt sind, finden 6 Iterationen den Schuldigen. Wenn es sich um zwei Variablen handelt, werden es höchstens 49 + 6 = 55 Iterationen finden, im schlimmsten Fall.
smci

Antworten:


55

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


4
Sehr coole und nützliche Antwort! Ich muss in diese Pakete schauen. (+1)
Peter Flom - Wiedereinsetzung von Monica

1
FWIW hier ist eine Beschreibung eines anderen robusten Algorithmus: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@Alex: danke für den link. Wenn glm wegen schlechten Starts nicht konvergiert, kann ich sehen, wie diese Methode dabei helfen wird. Wenn das Problem jedoch durch eine perfekte Trennung verursacht wird, ist mir nicht klar, wie die MM-Idee das angehen würde. Ich habe mich gefragt, ob Sie dies kommentieren können (ich kann dies eventuell als separate Frage posten).
user603

Hervorragend (+1)! Ich werde auch in diese Pakete schauen müssen.
Bogenschütze

1
Danke für die Antwort @ user603! Ich habe safeBinaryRegression verwendet und bei mehreren Variablen trat tatsächlich eine Trennung auf. Dann habe ich versucht, mit MEL im hlr-Paket ein Modell zu erstellen, das dieser Trennung standhält. Die Koeffizienten sind jedoch riesig (wie dies bei einer Trennung in normalem glm der Fall wäre) und hier sind die df- und Abweichungszahlen: Freiheitsgrade: 19112 Gesamt (dh Null); 19063 Residual Null Deviance: 24990 Residual Deviance: 626000 AIC: 626000 Glaubst du, ich habe etwas falsch gemacht?
Dcook
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.