数据没有很好分离时的不稳定逻辑回归

机器算法验证 r 回归 物流
2022-03-27 03:15:01

当数据在这里这里很好地分离时,有一些很好的答案可以讨论逻辑回归的收敛问题我想知道当数据没有很好地分离时会导致收敛问题

例如,我有以下数据,df

   y       x1         x2
1  0 66.06402 -1.0264739
2  1 58.40813  0.2887934
3  1 58.58011  0.2626232
4  0 59.05929 -0.5286438
5  0 55.81817 -1.3184894
6  0 58.00018 -0.8445602
7  1 69.53926 -1.1018149
8  0 55.73621 -0.9000901
9  1 79.80170  0.6690657
10 0 55.40042  0.6600415
11 0 57.42124 -0.7237973
12 1 78.22012 -0.8121816
13 0 53.54296  0.2265636
14 1 56.14096  0.4216436
15 1 66.90146  0.6189839
16 0 50.40008  0.4311339

拟合逻辑回归,即使数据不可分离R,我也会收到 警告消息glm.fit: fitted probabilities numerically 0 or 1 occurred

> attach(df)
> safeBinaryRegression::glm(y ~ x1 + x2, family=binomial)

Call:  safeBinaryRegression::glm(formula = y ~ x1 + x2, family = binomial)

Coefficients:
(Intercept)           x1           x2  
    -82.930        1.395       10.255  

Degrees of Freedom: 15 Total (i.e. Null);  13 Residual
NullDeviance:       21.93 
Residual Deviance: 5.927    AIC: 11.93
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred

还包括数据实际上不可分离的视觉确认

不可分离的数据

删除红点似乎解决了收敛问题,但是我对为什么会这样感到有些茫然。

> df2 <- df[-c(9),]
> detach(df)
> attach(df2)
> safeBinaryRegression::glm(y ~ x1 + x2, family=binomial)

Call:  safeBinaryRegression::glm(formula = y ~ x1 + x2, family = binomial)

Coefficients:
(Intercept)           x1           x2  
    -82.930        1.395       10.255  

Degrees of Freedom: 14 Total (i.e. Null);  12 Residual
Null Deviance:      20.19 
Residual Deviance: 5.927    AIC: 11.93
3个回答

关于“拟合概率为 0 或 1”的警告可能有助于诊断可分离性,但这些问题只是间接相关。

值之间有足够的重叠,几乎不用担心可分离性。特别是,对系数的估计是适度且显着的:其标准误差仅为灰色曲线显示拟合。与该曲线上的值相对应的是它们的对数赔率,或“链接”函数。我用颜色表示的那些;图例给出了常见的(base-10)日志。软件标记在内的拟合值这些点周围有白色光晕。xx2.351.1 (p=0.03)2.22×101501

图1

这里发生的一切是值的范围非常广泛,以至于对于某些点,拟合非常非常接近(对于非常负的)或非常非常接近(对于最正的)。在这种情况下,这不是问题。x0x1x

在下一个示例中可能会出现问题。的单个异常值会触发警告消息。x

图 2

我们如何评估这一点? 只需删除基准并重新拟合模型。 在这个例子中,它几乎没有区别:系数估计不变,p 值也不变。

最后,为了检查多元回归,首先形成系数估计和变量的线性组合:这是链接函数。完全按照上面的方法绘制针对这些值的响应并研究模式,查看 (a) 1 与 0 重叠的程度(用于评估可分离性)和 (b) 具有链接极值的点。xiβ^

这是您的数据的图表:

图 3

最右边的点对应于图中的红点:拟合值为,因为该点远离 0 过渡到 1 的区域。如果您将其从数据中删除,则不会发生任何变化。因此,它不会影响结果。此图表明您已获得合理的拟合。 1

您还可以看到在几个关键点(靠近的点)的值的微小变化可以创建完美的分离。但这真的是个问题吗?这仅意味着该软件无法再区分这种拟合和其他在附近具有任意急剧过渡的拟合。然而,所有这些都会在距离过渡线足够远的所有点产生类似的预测,并且该线的位置仍然可以很好地估计。x1x20xβ=0

完美分离会导致优化不收敛,不收敛会导致系数非常大,系数非常大会导致“拟合概率数值为0或1”。

另一方面,“拟合概率为 0 或 1”并不意味着拟合不会收敛。它只是意味着有限精度系统IEEE754,拟合数非常接近0或1,计算机无法区分它。

如果我们有一些“异常值”(如@whuber 的回答,第二个图所示),这很可能会发生,这是一个更简单的示例,通过向 mtcars 数据添加一个异常值。

请注意,这fit1很好,但fit2有警告。

> d1=mtcars[,c("am","mpg")]
> fit1=glm(am~mpg,d1, family="binomial")

> d2=rbind(d1,c(0,-100))
> fit2=glm(am~mpg,d2, family="binomial")
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

您无法想象多维分离。虽然 X1 和 X2 都不能单独完美地预测 Y 结果,但它们一起可以。以后使用 coplot 来避免这个问题

    coplot(y ~ x1 | x2, data=l, panel=panel.smooth)

在此处输入图像描述

相同的建议适用于在其他地方描述的用于处理此类问题的建议。