Wenn Sie eine Variable haben, die Nullen und Einsen in der Zielvariablen perfekt trennt, gibt R die folgende Warnmeldung "perfekte oder quasi perfekte Trennung" aus:
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
Wir haben immer noch das Modell, aber die Koeffizientenschätzungen sind überhöht.
Wie gehen Sie in der Praxis damit um?
r
regression
logistic
separation
user333
quelle
quelle
Antworten:
Eine Lösung besteht darin, eine Form der bestraften Regression zu verwenden. Tatsächlich ist dies der ursprüngliche Grund, warum einige der bestraften Regressionsformen entwickelt wurden (obwohl sich herausstellte, dass sie andere interessante Eigenschaften aufweisen.
Installieren und laden Sie das Paket glmnet in R und schon können Sie loslegen. Einer der weniger benutzerfreundlichen Aspekte von glmnet ist, dass Sie nur Matrizen füttern können, nicht Formeln, wie wir es gewohnt sind. Sie können sich jedoch model.matrix und ähnliches ansehen, um diese Matrix aus einem data.frame und einer Formel zu erstellen ...
Wenn Sie nun erwarten, dass diese perfekte Trennung nicht nur ein Nebenprodukt Ihrer Probe ist, sondern auch für die Bevölkerung zutrifft, möchten Sie dies nicht behandeln: Verwenden Sie diese Trennvariable einfach als alleinigen Prädiktor für Ihr Ergebnis, nicht ein Modell jeglicher Art zu beschäftigen.
quelle
Sie haben mehrere Möglichkeiten:
Entfernen Sie einen Teil der Vorspannung.
(a) Durch Bestrafung der Wahrscheinlichkeit gemäß @ Nicks Vorschlag. Package Logistf in R oder die
FIRTH
Option in SASPROC LOGISTIC
implementieren die in Firth (1993), "Bias Reduction of Maximum Likelihood Estimations", Biometrika , 80 , 1, vorgeschlagene Methode ; Dadurch wird die Verzerrung erster Ordnung aus den Schätzungen der maximalen Wahrscheinlichkeit entfernt. ( Hier empfiehlt @Gavin dasbrglm
Paket, mit dem ich nicht vertraut bin, aber ich erfahre , dass es einen ähnlichen Ansatz für nicht-kanonische Link-Funktionen implementiert, z. B. probit.)(b) Durch Verwendung von median-unverzerrten Schätzungen in der exakten bedingten logistischen Regression. Package elrm oder Logistix in R, oder die
EXACT
Aussage in SASPROC LOGISTIC
.Schließen Sie Fälle aus, in denen die Prädiktorkategorie oder der Prädiktorwert, der die Trennung verursacht, auftritt. Diese können durchaus außerhalb Ihres Anwendungsbereichs liegen. oder verdient weitere, gezielte Untersuchung. (Das R-Paket safeBinaryRegression ist praktisch, um sie zu finden.)
Modell neu gießen. In der Regel hätten Sie dies vorher getan, wenn Sie darüber nachgedacht hätten, da es für Ihre Stichprobengröße zu komplex ist.
(a) Entfernen Sie den Prädiktor aus dem Modell. Dicey, aus den von @Simon angegebenen Gründen: "Sie entfernen den Prädiktor, der die Antwort am besten erklärt".
(b) Durch Reduzieren der Prädiktorkategorien / Binning der Prädiktorwerte. Nur wenn das Sinn macht.
(c) Erneutes Ausdrücken des Prädiktors als zwei (oder mehr) gekreuzte Faktoren ohne Wechselwirkung. Nur wenn das Sinn macht.
Verwenden Sie eine Bayes'sche Analyse gemäß @ Manoels Vorschlag . Obwohl es unwahrscheinlich erscheint, dass Sie dies nur wegen der Trennung tun möchten, sollten Sie die anderen Vorzüge in Betracht ziehen. Das von ihm empfohlene Papier ist Gelman et al . Appl. Stat. , 2 , 4 : der fragliche Standardwert ist ein unabhängiger Cauchy-Prior für jeden Koeffizienten mit einem Mittelwert von Null und einer Skala von ; Wird verwendet, nachdem alle kontinuierlichen Prädiktoren auf einen Mittelwert von Null und eine Standardabweichung von normiert wurden . Wenn Sie stark informative Prioritäten aufklären können, umso besser. 152 12
Nichts tun. (Berechnen Sie die Konfidenzintervalle jedoch anhand der Profilwahrscheinlichkeiten, da die Wald-Schätzungen des Standardfehlers stark falsch sind.) Eine häufig übersehene Option. Wenn der Zweck des Modells nur darin besteht, zu beschreiben, was Sie über die Beziehungen zwischen Prädiktoren und Reaktion gelernt haben, ist es keine Schande, ein Konfidenzintervall für ein Quotenverhältnis von beispielsweise 2,3 nach oben anzugeben. (In der Tat kann es faul erscheinen, Konfidenzintervalle auf der Grundlage unvoreingenommener Schätzungen zu zitieren, die die Quotenquoten ausschließen, die am besten von den Daten unterstützt werden.) Probleme treten auf, wenn Sie versuchen, mithilfe von Punktschätzungen Vorhersagen zu treffen.
Verwenden Sie ein verstecktes logistisches Regressionsmodell, wie es in Rousseeuw & Christmann (2003), "Robustheit gegen Trennung und Ausreißer bei logistischer Regression", Computational Statistics & Data Analysis , 43 , 3, beschrieben und im R-Paket hlr implementiert ist . (@ user603 schlägt dies vor. ) Ich habe das Papier nicht gelesen, aber sie sagen in der Zusammenfassung, dass "ein etwas allgemeineres Modell vorgeschlagen wird, unter dem die beobachtete Antwort stark verwandt, aber nicht gleich der nicht beobachtbaren wahren Antwort ist", was darauf hindeutet Für mich ist es möglicherweise keine gute Idee, die Methode zu verwenden, es sei denn, das klingt plausibel.
"Ändern Sie einige zufällig ausgewählte Beobachtungen von 1 auf 0 oder 0 auf 1 unter Variablen, die eine vollständige Trennung aufweisen": @ RobertF's Kommentar . Dieser Vorschlag scheint darauf zurückzuführen zu sein, dass die Trennung an sich eher ein Problem als ein Symptom für einen Mangel an Informationen in den Daten darstellt. Dies könnte dazu führen, dass Sie andere Methoden der Schätzung der maximalen Wahrscheinlichkeit vorziehen oder Rückschlüsse auf solche ziehen, mit denen Sie etwas anfangen können vernünftige Präzision - Ansätze, die ihre eigenen Vorzüge haben und nicht nur "Fixes" für die Trennung sind. (Abgesehen davon, dass es sich um ein Ad-hoc -Verfahren handelt, ist es für die meisten unangenehm, dass Analysten, die dieselbe Frage zu denselben Daten stellen und dieselben Annahmen treffen, aufgrund des Ergebnisses eines Münzwurfs oder was auch immer unterschiedliche Antworten geben sollten.)
quelle
Dies ist eine Erweiterung der Antworten von Scortchi und Manoel, aber da Sie RI zu verwenden scheinen, dachte ich, ich würde etwas Code liefern. :)
Ich glaube, die einfachste und direkteste Lösung für Ihr Problem ist die Verwendung einer Bayes'schen Analyse mit nicht informativen Vorannahmen, wie sie von Gelman et al. (2008) vorgeschlagen wurden. Wie Scortchi erwähnt, empfiehlt Gelman, für jeden Koeffizienten einen Cauchy vor dem Medianwert von 0,0 und eine Skala von 2,5 zu setzen (normalisiert mit einem Mittelwert von 0,0 und einer SD von 0,5). Dadurch werden die Koeffizienten reguliert und nur leicht gegen Null gezogen. In diesem Fall ist es genau das, was Sie wollen. Aufgrund des sehr breiten Schwanzes erlaubt der Cauchy weiterhin große Koeffizienten (im Gegensatz zum kurzschwänzigen Normal) von Gelman:
Wie führe ich diese Analyse durch? Verwenden Sie die
bayesglm
Funktion im Paket arm , die diese Analyse implementiert!Funktioniert nicht so gut ... Jetzt die Bayesianische Version:
Super einfach, nein?
Verweise
Gelman et al. (2008), "Eine schwach informative Standardvorverteilung für logistische und andere Regressionsmodelle", Ann. Appl. Stat., 2, 4 http://projecteuclid.org/euclid.aoas/1231424214
quelle
bayesglm
verwendet wird? Wenn die ML-Schätzung der Bayes'schen Schätzung mit einer Pauschalpriorität entspricht, wie helfen hier nicht informative Prioritäten?prior.df
den Standardwert erhöhen1.0
und / oderprior.scale
den Standardwert verringern.2.5
Versuchen Sie es vielleicht mit:m=bayesglm(match ~. , family = binomial(link = 'logit'), data = df, prior.df=5)
Eine der gründlichsten Erklärungen für "quasi vollständige Trennung" ist Paul Allisons Artikel. Er schreibt über SAS-Software, aber die Probleme, die er anspricht, sind für jede Software verallgemeinerbar:
Allison diskutiert viele der bereits erwähnten Lösungen, einschließlich des Löschens von Problemvariablen, des Ausblendens von Kategorien, des Nichtstuns, der Nutzung der exakten logistischen Regression, der Bayes'schen Schätzung und der bestraften Maximalwahrscheinlichkeitsschätzung.
http://www2.sas.com/proceedings/forum2008/360-2008.pdf
quelle
warning
Mit Daten, die nach dem Vorbild von erzeugt wurden
Die Warnung wird gemacht:
was ganz offensichtlich die Abhängigkeit widerspiegelt, die in diese Daten eingebaut ist.
In R ist der Wald-Test mit
summary.glm
oder mitwaldtest
imlmtest
Paket enthalten. Der Likelihood-Ratio-Test wird mitanova
oder mitlrtest
in derlmtest
Packung durchgeführt. In beiden Fällen ist die Informationsmatrix unendlich und es ist kein Rückschluss möglich. Vielmehr R nicht produziert Ausgang, aber man kann ihm nicht vertrauen. Die Inferenz, die R in diesen Fällen typischerweise erzeugt, hat p-Werte, die sehr nahe bei eins liegen. Dies liegt daran, dass der Präzisionsverlust im OP um Größenordnungen kleiner ist als der Präzisionsverlust in der Varianz-Kovarianz-Matrix.Einige der hier beschriebenen Lösungen:
Verwenden Sie einen Ein-Schritt-Schätzer,
Es gibt viele Theorien, die die geringe Verzerrung, Effizienz und Generalisierbarkeit von Einschrittschätzern unterstützen. Es ist einfach, einen Ein-Schritt-Schätzer in R anzugeben, und die Ergebnisse sind in der Regel sehr günstig für Vorhersage und Inferenz. Und dieses Modell wird niemals auseinander gehen, weil der Iterator (Newton-Raphson) einfach keine Chance dazu hat!
Gibt:
Sie können also sehen, dass die Vorhersagen die Richtung des Trends widerspiegeln. Und die Schlussfolgerung lässt stark auf die Trends schließen, die wir für wahr halten.
einen Punktetest durchführen,
Die Score-Statistik (oder Rao-Statistik) unterscheidet sich von der Likelihood-Ratio-Statistik und der Wald-Statistik. Es ist keine Bewertung der Varianz unter der Alternativhypothese erforderlich. Wir passen das Modell unter die Null an:
In beiden Fällen haben Sie die Schlussfolgerung für ein OR von unendlich.
und verwenden Sie mediane unvoreingenommene Schätzungen für ein Konfidenzintervall.
Sie können einen medianen unverzerrten, nicht singulären 95% -KI für das unendliche Quotenverhältnis mithilfe der medianen unverzerrten Schätzung erstellen. Das Paket
epitools
in R kann dies tun. Und ich gebe hier ein Beispiel für die Implementierung dieses Schätzers: Konfidenzintervall für Bernoulli-Stichprobenquelle
test="Rao"
deranova
Funktion das Argument geben . (Nun, die letzten beiden sind Notizen, keine Streitigkeiten.)Seien Sie vorsichtig mit dieser Warnmeldung von R. Wenn Sie sich diesen Blog-Beitrag von Andrew Gelman ansehen, werden Sie feststellen, dass es sich nicht immer um ein Problem der perfekten Trennung handelt, sondern manchmal um einen Fehler
glm
. Es scheint, dass wenn die Startwerte zu weit von der Maximum-Likelihood-Schätzung entfernt sind, sie explodieren. Überprüfen Sie dies zunächst mit anderer Software wie Stata.Wenn Sie dieses Problem wirklich haben, können Sie versuchen, Bayes'sche Modellierung mit informativen Prioritäten zu verwenden.
Aber in der Praxis werde ich nur die Prädiktoren los, die die Probleme verursachen, weil ich nicht weiß, wie ich einen informativen Prior auswählen soll. Aber ich vermute, es gibt ein Papier von Gelman über die Verwendung von Informativem, wenn Sie dieses Problem des perfekten Trennungsproblems haben. Google es einfach. Vielleicht solltest du es versuchen.
quelle
glm2
Paket eine Überprüfung durch, dass die Wahrscheinlichkeit bei jedem Bewertungsschritt tatsächlich zunimmt, und halbiert die Schrittgröße, wenn dies nicht der Fall ist.safeBinaryRegression
das entwickelt wurde, um solche Probleme zu diagnostizieren und zu beheben. Dabei werden Optimierungsmethoden verwendet, um sicherzustellen, dass eine Trennung oder Quasiseparation vorliegt. Versuch es!Ich bin nicht sicher, ob ich den Aussagen in Ihrer Frage zustimme.
Ich denke, dass eine Warnmeldung bedeutet, dass für einige der beobachteten X- Werte in Ihren Daten die angepasste Wahrscheinlichkeit numerisch 0 oder 1 ist. Mit anderen Worten, bei der Auflösung wird 0 oder 1 angezeigt.
Sie können rennen
predict(yourmodel,yourdata,type='response')
und Sie werden dort 0en oder / und 1en als vorhergesagte Wahrscheinlichkeiten finden.Daher halte ich es für in Ordnung, nur die Ergebnisse zu verwenden.
quelle
Ich verstehe, dass dies ein alter Beitrag ist, aber ich werde trotzdem mit der Beantwortung fortfahren, da ich seit Tagen damit zu kämpfen habe und es anderen helfen kann.
Eine vollständige Trennung findet statt, wenn Ihre ausgewählten Variablen zur Anpassung an das Modell sehr genau zwischen Nullen und Einsen oder Ja und Nein unterscheiden können. Unser ganzer Ansatz der Datenwissenschaft basiert auf der Wahrscheinlichkeitsschätzung, scheitert jedoch in diesem Fall.
Korrekturschritte: -
Verwenden Sie bayesglm () anstelle von glm (), wenn die Varianz zwischen den Variablen gering ist
Manchmal kann die Verwendung von (maxit = ”some numerical value”) zusammen mit bayesglm () helfen
3.Die dritte und wichtigste Prüfung für Ihre ausgewählten Variablen für die Modellanpassung besteht darin, dass eine Variable vorhanden sein muss, für die die Multi-Kollinearität mit der Variablen Y (outout) sehr hoch ist. Verwerfen Sie diese Variable aus Ihrem Modell.
Wie in meinem Fall hatte ich Telekommunikations-Abwanderungsdaten, um die Abwanderungsdaten für die Validierungsdaten vorherzusagen. Ich hatte eine Variable in meinen Trainingsdaten, die sehr gut zwischen Ja und Nein unterscheiden konnte. Nach dem Ablegen konnte ich das richtige Modell bekommen. Außerdem können Sie Ihr Modell schrittweise anpassen, um es genauer zu machen.
quelle