Vorgehensweise: glm.fit: numerisch angepasste wahrscheinlichkeiten 0 oder 1 sind aufgetreten
Eine Warnmeldung, die in R auftreten kann, ist:
Warning message: glm.fit: fitted probabilities numerically 0 or 1 occurred
Diese Warnung tritt auf, wenn Sie ein logistisches Regressionsmodell anpassen und die vorhergesagten Wahrscheinlichkeiten einer oder mehrerer Beobachtungen in Ihrer Datenbank nicht von 0 oder 1 unterschieden werden können.
Bitte beachten Sie, dass es sich hierbei um eine Warnmeldung und nicht um einen Fehler handelt. Selbst wenn Sie diese Fehlermeldung erhalten, passt Ihr logistisches Regressionsmodell immer noch. Es kann jedoch hilfreich sein, den ursprünglichen Datenrahmen zu analysieren, um festzustellen, ob Ausreißer vorhanden sind, die diese Warnmeldung anzeigen.
In diesem Tutorial erfahren Sie, wie Sie in der Praxis mit dieser Warnmeldung umgehen.
So reproduzieren Sie die Warnung
Angenommen, wir passen ein logistisches Regressionsmodell an den folgenden Datenrahmen in R an:
#create data frame
df <- data. frame (y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
x2 = c(8, 7, 7, 6, 5, 6, 5, 2, 2, 3, 4, 3, 7, 4, 4))
#fit logistic regression model
model <- glm(y ~ x1 + x2, data=df, family=binomial)
#view model summary
summary(model)
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
Call:
glm(formula = y ~ x1 + x2, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.729e-05 -2.110e-08 2.110e-08 2.110e-08 1.515e-05
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.205 307338.933 0 1
x1 13,309 28512,818 0 1
x2 -2.793 37342.280 0 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.6951e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
Unser logistisches Regressionsmodell passt die Daten erfolgreich an, wir erhalten jedoch eine Warnmeldung, die die Wahrscheinlichkeiten numerisch auf 0 oder 1 anpasst .
Wenn wir das angepasste logistische Regressionsmodell verwenden, um Vorhersagen über den Antwortwert von Beobachtungen in der Originaldatenbank zu treffen, können wir sehen, dass fast alle vorhergesagten Wahrscheinlichkeiten nicht von 0 und 1 zu unterscheiden sind:
#use fitted model to predict response values
df$y_pred = predict(model, df, type=" response ")
#view updated data frame
df
y x1 x2 y_pred
1 0 3 8 2.220446e-16
2 0 3 7 2.220446e-16
3 0 4 7 2.220446e-16
4 0 4 6 2.220446e-16
5 0 3 5 2.220446e-16
6 0 2 6 2.220446e-16
7 0 5 5 1.494599e-10
8 1 8 2 1.000000e+00
9 1 9 2 1.000000e+00
10 1 9 3 1.000000e+00
11 1 9 4 1.000000e+00
12 1 8 3 1.000000e+00
13 1 9 7 1.000000e+00
14 1 9 4 1.000000e+00
15 1 9 4 1.000000e+00
So gehen Sie mit der Warnung um
Es gibt drei Möglichkeiten, mit dieser Warnmeldung umzugehen:
(1) Ignoriere es.
In manchen Fällen können Sie diese Warnmeldung einfach ignorieren, da sie nicht unbedingt darauf hinweist, dass ein Problem mit dem logistischen Regressionsmodell vorliegt. Dies bedeutet einfach, dass eine oder mehrere Beobachtungen im Datenrahmen vorhergesagte Werte aufweisen, die nicht von 0 oder 1 zu unterscheiden sind.
(2) Erhöhen Sie die Stichprobengröße.
In anderen Fällen wird diese Warnmeldung angezeigt, wenn mit kleinen Datenblöcken gearbeitet wird, für die einfach nicht genügend Daten vorhanden sind, um eine zuverlässige Modellanpassung zu ermöglichen. Um diesen Fehler zu korrigieren, erhöhen Sie einfach die Stichprobengröße der Beobachtungen, die Sie in das Modell einspeisen.
(3) Ausreißer entfernen.
In anderen Fällen tritt dieser Fehler auf, wenn in der Originaldatenbank Ausreißer vorhanden sind und nur eine kleine Anzahl von Beobachtungen Wahrscheinlichkeiten nahe 0 oder 1 aufweist. Durch das Entfernen dieser Ausreißer verschwindet die Warnmeldung häufig.
Zusätzliche Ressourcen
Die folgenden Tutorials erklären, wie mit anderen Warnungen und Fehlern in R umgegangen wird:
So beheben Sie in R: Ungültige Vorlagenformel in ExtractVars
So beheben Sie das Problem in R: Das Argument ist weder numerisch noch logisch: Geben Sie na zurück
So beheben Sie Folgendes: randomForest.default(m, y, …): Na/NaN/Inf im Aufruf einer Fremdfunktion