如何处理:glm.fit:数值调整概率为0或1发生
您在 R 中可能遇到的警告消息是:
Warning message: glm.fit: fitted probabilities numerically 0 or 1 occurred
当您拟合逻辑回归模型并且数据库中一个或多个观测值的预测概率无法区分 0 或 1 时,会出现此警告。
请注意,这是一条警告消息,而不是错误。即使您收到此错误,您的逻辑回归模型仍然适合,但分析原始数据框以查看是否有任何异常值导致出现此警告消息可能会有所帮助。
本教程解释了如何在实践中处理此警告消息。
如何重现警告
假设我们将逻辑回归模型拟合到 R 中的以下数据框:
#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
我们的逻辑回归模型成功拟合了数据,但我们收到一条警告消息,将概率数字调整为 0 或 1 。
如果我们使用拟合的逻辑回归模型对原始数据库中观测值的响应值进行预测,我们可以看到几乎所有的预测概率都与 0 和 1 没有区别:
#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
如何处理警告
有三种方法可以处理此警告消息:
(1) 忽略它。
在某些情况下,您可以简单地忽略此警告消息,因为它并不一定表明逻辑回归模型存在问题。这仅仅意味着数据框中的一个或多个观测值的预测值与 0 或 1 无法区分。
(2)增加样本量。
在其他情况下,当处理小数据块时,如果没有足够的数据来提供可靠的模型拟合,则会出现此警告消息。要纠正此错误,只需增加输入模型的观测值的样本量即可。
(3)去除异常值。
在其他情况下,当原始数据库中存在异常值并且只有少量观测值的概率接近 0 或 1 时,就会出现此错误。通过删除这些异常值,警告消息通常会消失。
其他资源
以下教程解释了如何处理 R 中的其他警告和错误:
如何修复 R:ExtractVars 中的模板公式无效
如何在 R 中修复:参数既不是数字也不是逻辑:返回 na
如何修复:randomForest.default(m, y, …):外部函数调用中的 Na/NaN/Inf