Umgang mit r warnung: glm.fit: algorithmus konnte nicht konvergieren
Eine häufige Warnung, die Ihnen in R begegnen kann, ist:
glm.fit: algorithm did not converge
Diese Warnung tritt häufig auf, wenn Sie versuchen, ein logistisches Regressionsmodell in R anzupassen und eine perfekte Trennung sehen, d. h. eine Prädiktorvariable ist in der Lage, die Antwortvariable perfekt in 0 und in 1 zu trennen.
Das folgende Beispiel zeigt, wie mit dieser Warnung in der Praxis umgegangen wird.
So reproduzieren Sie die Warnung
Angenommen, wir versuchen, das folgende logistische Regressionsmodell in R anzupassen:
#create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
y=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))
#attempt to fit logistic regression model
glm(y~x, data=df, family=" binomial ")
Call: glm(formula = y ~ x, family = "binomial", data = df)
Coefficients:
(Intercept)x
-409.1 431.1
Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.19
Residual Deviance: 2.468e-09 AIC: 4
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
Beachten Sie, dass wir die Warnmeldung „ glm.fit: algorithm did not converge“ erhalten.
Wir erhalten diese Nachricht, weil die Prädiktorvariable x in der Lage ist, die Antwortvariable y perfekt in 0 und 1 zu trennen.
Beachten Sie, dass für jeden x-Wert kleiner als 1 y gleich 0 ist. Und für jeden x-Wert gleich oder größer als 1 ist y gleich 1.
Der folgende Code zeigt ein Szenario, in dem die Prädiktorvariable die Antwortvariable nicht perfekt in Nullen und Einsen trennen kann:
#create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
y=c(0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))
#fit logistic regression model
glm(y~x, data=df, family=" binomial ")
Call: glm(formula = y ~ x, family = "binomial", data = df)
Coefficients:
(Intercept) x
-2.112 2.886
Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.73
Residual Deviance: 16.31 AIC: 20.31
Wir erhalten keine Warnmeldungen, da die Prädiktorvariable die Antwortvariable nicht perfekt in 0 und 1 trennen kann.
So gehen Sie mit der Warnung um
Wenn wir auf ein perfektes Trennungsszenario stoßen, gibt es zwei Möglichkeiten, damit umzugehen:
Methode 1: Bestrafte Regression verwenden.
Eine Möglichkeit besteht darin, eine Form der bestraften logistischen Regression wie die lasso-logistische Regression oder die Regularisierung des elastischen Netzes zu verwenden.
Optionen zur Implementierung der bestraften logistischen Regression in R finden Sie im glmnet- Paket.
Methode 2: Verwenden Sie die Prädiktorvariable, um die Antwortvariable perfekt vorherzusagen.
Wenn Sie vermuten, dass diese perfekte Trennung in der Grundgesamtheit vorhanden sein könnte, können Sie einfach diese Prädiktorvariable verwenden, um den Wert der Antwortvariablen perfekt vorherzusagen.
Im obigen Szenario haben wir beispielsweise gesehen, dass die Antwortvariable y immer gleich 0 war, wenn die Prädiktorvariable x kleiner als 1 war.
Wenn wir vermuten, dass diese Beziehung in der Gesamtpopulation gilt, können wir immer vorhersagen, dass der Wert von 0 0 sein wird, wenn x kleiner als 1 ist, und müssen uns keine Gedanken über die Anpassung eines bestraften logistischen Regressionsmodells machen.
Zusätzliche Ressourcen
Die folgenden Tutorials bieten zusätzliche Informationen zur Verwendung der glm() -Funktion in R:
Der Unterschied zwischen glm und lm in R
So verwenden Sie die Vorhersagefunktion mit glm in R
Vorgehensweise: glm.fit: Numerisch angepasste Wahrscheinlichkeiten 0 oder 1 sind aufgetreten