当班级分开时,为什么逻辑回归变得不稳定?分隔良好的类是什么意思?如果有人可以举例说明,我将不胜感激。
当班级分开时,为什么逻辑回归变得不稳定?分隔良好的类是什么意思?如果有人可以举例说明,我将不胜感激。
Answers:
当存在分离时,逻辑回归本身会变得不稳定是不正确的。分离意味着某些变量是非常好的预测变量,这很好,或者,分离可能是观测值太少/变量太多的产物。如果是这样,解决方案可能是获取更多数据。但是,分离本身只是一种症状,而本身并不是问题。
因此,确实有不同的情况需要处理。首先,分析的目的是什么?如果分析的最终结果是对案例进行某种分类,那么分离根本就没有问题,这实际上意味着有非常好的变量可以提供很好的分类。但是,如果目标是风险估计,则需要参数估计,并且通过分离,通常不存在mle(最大似然)估计。因此,也许必须更改估算方法。文献中有几个建议,我将再次讨论。
然后有(如上所述)两种不同的分离原因。总体中可能存在分离,或者分离可能是由于观察到的病例很少/变量太多而引起的。
随着分离而破裂的是最大似然估计程序。mle参数估计(或至少其中一些)变为无限。我在此答案的第一个版本中说过,可以很容易地解决问题,也许可以通过引导程序解决,但是那是行不通的,因为至少在通常情况下的引导程序中,每个引导程序重采样中都会有分隔。但是逻辑回归仍然是有效的模型,但是我们还需要其他估计程序。一些建议是:
如果使用R,则CRAN上有一个软件包SafeBinaryRegression
,可使用数学优化方法来检查是否存在分离或准分离,从而帮助诊断分离问题!在下文中,我将使用该程序包以及elrm
用于近似条件逻辑回归的程序包给出一个模拟示例。
首先,一个带有safeBinaryRegression
包装的简单示例。该程序包只是glm
使用线性编程方法重新定义函数,并通过分离测试对其进行重载。如果检测到分离,它将以错误条件退出,声明该mle不存在。否则,它只是运行在普通glm
的功能stats
。该示例来自其帮助页面:
library(safeBinaryRegression) # Some testing of that package,
# based on its examples
# complete separation:
x <- c(-2, -1, 1, 2)
y <- c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x, family=binomial, separation="test")
stats::glm(y~ x, family=binomial)
# Quasicomplete separation:
x <- c(-2, 0, 0, 2)
y <- c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x, family=binomial, separation="test")
stats::glm(y~ x, family=binomial)
运行它的输出:
> # complete separation:
> x <- c(-2, -1, 1, 2)
> y <- c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) :
The following terms are causing separation among the sample points: (Intercept), x
> glm(y ~ x, family=binomial, separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") :
Separation exists among the sample points.
This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)
Call: stats::glm(formula = y ~ x, family = binomial)
Coefficients:
(Intercept) x
-9.031e-08 2.314e+01
Degrees of Freedom: 3 Total (i.e. Null); 2 Residual
Null Deviance: 5.545
Residual Deviance: 3.567e-10 AIC: 4
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
> # Quasicomplete separation:
> x <- c(-2, 0, 0, 2)
> y <- c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) :
The following terms are causing separation among the sample points: x
> glm(y ~ x, family=binomial, separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") :
Separation exists among the sample points.
This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)
Call: stats::glm(formula = y ~ x, family = binomial)
Coefficients:
(Intercept) x
5.009e-17 9.783e+00
Degrees of Freedom: 3 Total (i.e. Null); 2 Residual
Null Deviance: 5.545
Residual Deviance: 2.773 AIC: 6.773
现在,我们从可以通过逻辑模型紧密近似的模型进行仿真,不同的是,在特定阈值之上,事件概率恰好为1.0。考虑一下生物测定问题,但是在临界值以上,毒物总是会杀死:
pl <- function(a, b, x) 1/(1+exp(-a-b*x))
a <- 0
b <- 1.5
x_cutoff <- uniroot(function(x) pl(0,1.5,x)-0.98,lower=1,upper=3.5)$root
### circa 2.6
pltrue <- function(a, b, x) ifelse(x < x_cutoff, pl(a, b, x), 1.0)
x <- -3:3
### Let us simulate many times from this model, and try to estimate it
### with safeBinaryRegression::glm That way we can estimate the probability
### of separation from this model
set.seed(31415926) ### May I have a large container of coffee
replications <- 1000
p <- pltrue(a, b, x)
err <- 0
good <- 0
for (i in 1:replications) {
y <- rbinom(length(x), 1, p)
res <- try(glm(y~x, family=binomial), silent=TRUE)
if (inherits(res,"try-error")) err <- err+1 else good <- good+1
}
P_separation <- err/replications
P_separation
运行此代码时,我们估计分离的可能性为0.759。自己运行代码,速度很快!
然后,我们将此代码扩展为尝试不同的估计程序,从elrm的最小均方误差和近似条件逻辑回归。在我的计算机上运行此模拟大约需要40分钟。
library(elrm) # from CRAN
set.seed(31415926) ### May I have a large container of coffee
replications <- 1000
GOOD <- numeric(length=replications) ### will be set to one when MLE exists!
COEFS <- matrix(as.numeric(NA), replications, 2)
COEFS.elrm <- matrix(as.numeric(NA), replications, 2) # But we'll only use second col for x
p <- pltrue(a, b, x)
err <- 0
good <- 0
for (i in 1:replications) {
y <- rbinom(length(x), 1, p)
res <- try(glm(y~x, family=binomial), silent=TRUE)
if (inherits(res,"try-error")) err <- err+1 else{ good <- good+1
GOOD[i] <- 1 }
# Using stats::glm
mod <- stats::glm(y~x, family=binomial)
COEFS[i, ] <- coef(mod)
# Using elrm:
DATASET <- data.frame(x=x, y=y, n=1)
mod.elrm <- elrm(y/n ~ x, interest= ~ x -1, r=4, iter=10000, burnIn=1000,
dataset=DATASET)
COEFS.elrm[i, 2 ] <- mod.erlm$coeffs
}
### Now we can compare coefficient estimates of x,
### when there are separation, and when not:
non <- which(GOOD==1)
cof.mle.non <- COEFS[non, 2, drop=TRUE]
cof.mle.sep <- COEFS[-non, 2, drop=TRUE]
cof.elrm.non <- COEFS.elrm[non, 2, drop=TRUE]
cof.elrm.sep <- COEFS.elrm[-non, 2, drop=TRUE]
现在我们要绘制结果,但在此之前,请注意所有条件估计值均相等!那真的很奇怪,需要解释一下。通用值为0.9523975。但是至少我们获得了有限的估计,其置信区间包含真实值(此处未显示)。因此,在没有分离的情况下,我只会显示最大似然估计的直方图:
hist(cof.mle.non, prob=TRUE)
[
值得注意的是,所有估算值均小于真实值1.5。这可能与我们需要从修改后的模型中模拟出来的事实有关。
@ sean501和@kjetilbhalvorsen在这里有很好的答案。您要求一个例子。考虑下图。您可能会遇到某种情况,在这种情况下,数据生成过程类似于面板A所示。如果是这样,您实际收集的数据很有可能看起来像面板B中的数据。现在,当您使用数据构建统计模型时,其想法是恢复真正的数据生成过程,或者至少提出一个合理接近的近似值。因此,问题是,将逻辑回归拟合到B中的数据是否会产生一个近似于A中蓝线的模型?如果您看面板C,您会发现灰线比true函数更好地近似了数据,因此,在寻求最佳拟合时,逻辑回归将“偏爱”返回灰线而不是蓝线。但是,它并不止于此。看面板D,黑色线比灰色线更好地近似了数据-实际上,这是可能发生的最佳拟合。这就是逻辑回归模型追求的路线。它对应于负无穷大和无穷大斜率的截距。当然,这与您希望恢复的事实相去甚远。完全分离还会导致计算变量的p值时出现问题,这些变量是逻辑回归输出的标准配置(此处的解释略有不同,但更为复杂)。此外,尝试将此处的拟合度与其他尝试(例如通过荟萃分析)相结合,只会使其他发现的准确性降低。
您所说的“分离”(而不是“分离”)涉及两种不同的情况,这些情况最终会导致相同的问题–但是,我不会像您一样将其称为“不稳定”问题。
令为二进制因变量,而为独立的独立变量。
让我们假设是《泰坦尼克号》上的乘客类别,并且表示他们是否在残骸中幸存下来,其中表示死亡,表示生存。
完全分离是预测所有值的情况。
如果在泰坦尼克号上的所有头等舱乘客都幸免于难,而所有二等舱乘客都没有幸免。
准完全分离是那里的情况预测任一的所有情况下,或所有的情况下,其中,但不能同时使用。
如果泰坦尼克号上的一些头等舱乘客幸免于难,而二等舱乘客都没有幸免。在那种情况下,乘客舱预测所有情况,而不是所有情况。
相反,如果仅泰坦尼克号上的一些二等舱乘客在飞机残骸中丧生,则乘客舱预测所有情况,但不能预测所有情况,其中包括头等舱和二等舱乘客。
您所说的“分类良好的舱位”是指二进制结果变量(例如,泰坦尼克号上的生存)可以完全或准完全映射到预测变量(例如,旅客舱位成员;不需要像在我的示例中)。
这在Rainey 2016和Zorn 2005中得到了很好的解释。
在完全分离,你的逻辑模型是要寻找一个逻辑曲线指派,例如,所有的概率到时,所有的概率到时。
这对应于上述情况,其中只有泰坦尼克号的所有头等舱乘客都可以幸存,其中表示头等舱乘客身份。
这是有问题的,因为逻辑曲线严格位于到之间,这意味着,为了对观察到的数据建模,最大化将把其某些项推向无穷大,以便使 “无限地”变大。预测。
在准完全分离下会出现相同的问题,因为在两种情况之一或,逻辑曲线仍将只需要为分配或值。1 D V S V = 0 S V = 1
在这两种情况下,模型的似然函数将无法找到最大似然估计:它将仅通过渐近逼近该值来找到该值的近似值。
您所说的“不稳定性”是这样的事实,即在完全分离或准完全分离的情况下,逻辑模型不可能达到有限的可能性。但是,我不会使用该术语:似然函数实际上在系数值向无穷大的分配中相当“稳定”(单调)。
注意:我的例子是虚构的。泰坦尼克号上的生存不仅仅是归结为乘客等级的成员。参见Hall(1986)。