当拟合算法收敛时,是否可以在逻辑回归中获得拟合值 0 或 1?

机器算法验证 r 物流 分离
2022-03-23 02:27:38

我们对逻辑回归中的完美分离主题进行了全面介绍。当它发生在 R 中时,我们通常会看到两个警告:

警告消息:
1:glm.fit:算法未收敛
2:glm.fit:拟合概率为 0 或 1

算法是否有可能确实收敛并在数字上拟合了 0 或 1 的概率

1个回答

R 给你两个不同的警告,因为这确实是两个不同的问题。

非常松散地,适合逻辑回归模型(通常是 Newton-Raphson 的某个版本)的算法会四处寻找将使对数似然最大化的系数估计。它将在参数空间中的给定点估计模型,查看哪个方向是“上坡”,然后在该方向上移动一段距离。这样做的潜在问题是,当存在完美分离时,对数似然的最大值是斜率无限的地方。因为必须将搜索算法设计为在某个点停止,所以它不会收敛。

另一方面,无论它在哪里停止,无论它是否收敛,(理论上)都可以计算模型对数据的预测值。然而,由于计算机使用有限精度算术,当它们执行计算时,它们最终需要四舍五入或丢弃极低的十进制值。因此,如果算术上正确的值足够接近 0 或 1,那么当它被四舍五入时,它最终可能正好是 0 或 1。由于完全分离导致的斜率估计非常大(绝对值),值可以具有该属性并且在数据的正常范围内,或者它们可能在 X 上太远以至于即使是很小的斜率也会导致同样的现象。

# I'll use this function to convert log odds to probabilities
lo2p = function(lo){ exp(lo) / (1+exp(lo)) }    
set.seed(163)                             # this makes the example exactly reproducible
x  = c(-500, runif(100, min=-3, max=3), 500)  # the x-values; 2 are extreme
lo = 0 + 1*x
p  = lo2p(lo)
y  = rbinom(102, size=1, prob=p)

m  = glm(y~x, family=binomial)
# Warning message:
# glm.fit: fitted probabilities numerically 0 or 1 occurred 
summary(m)
# ... 
# Coefficients:
#             Estimate Std. Error z value Pr(>|z|)    
# (Intercept)   0.3532     0.3304   1.069    0.285    
# x             1.3686     0.2372   5.770 7.95e-09 ***
# ...
# 
#     Null deviance: 140.420  on 101  degrees of freedom
# Residual deviance:  63.017  on 100  degrees of freedom
# AIC: 67.017
# 
# Number of Fisher Scoring iterations: 9

在这里,我们看到我们得到了第二个警告,但算法收敛了。贝塔相当接近真实值,标准误差不大,Fisher 评分迭代次数适中。尽管如此,极值 x 值产生的预测对数几率是完全可计算的,但当转换为概率时,基本上变成 0 和 1。

predict(m, type="link")[c(1, 102)]      # these are the predicted log odds
#         1       102 
# -683.9379  684.6444 
predict(m, type="response")[c(1, 102)]  # these are the predicted probabilities
#            1          102 
# 2.220446e-16 1.000000e+00