具有大量预测变量的逻辑回归性能

机器算法验证 分类 物流 特征选择 预测器
2022-03-18 14:03:20

我试图了解逻辑回归在高维问题中的行为(即,当您将逻辑回归拟合到具有大量预测变量的数据时)。

每次我用大量预测变量拟合逻辑回归时,我都会在 R 中收到以下警告:

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

我在某处读到这被称为 Hauck-Donner 现象,这是因为拟合概率太接近 0/1。

但是,我的假设是,随着您增加预测变量的数量,您的拟合概率的方差必须在逻辑回归中增加。这是因为您的对数赔率估计本质上是随机变量的总和,并且 100 个类似分布的随机变量的总和将(可能)具有比 10 个 rvs 的总和更大的方差。因此,当您将逻辑回归应用于非常高维度的问题时,您的拟合概率将更接近 0/1(因为更高的方差),因此您的系数估计必须因为这个问题而有偏差(不正确)?这个假设正确吗?

我使用以下代码创建了一个模拟来尝试回答这个问题:

genLogit <- function(n,dimens){
dimens <- floor(dimens/2)*2 #make sure dimens is even

xdata <- cbind(replicate(dimens/2,runif(n)),replicate(dimens/2,runif(n,-1,0)))
ydata <- apply(xdata,1,sum)

prob <- exp(ydata)/(1+exp(ydata))
runis <- runif(length(prob))

ydata <- ifelse(runis<prob,1,0)

model <- glm(ydata~.,data = data.frame(cbind(ydata,xdata)),family = binomial(link = 
return(summary(model))
}

代码所做的基本上是从以下模拟逻辑回归:

log(p1p)=U1+U1++U1+U1+U1++U1

在哪里U1=Unif(0,1)U1=Unif(1,0). 您可以改变模型中预测变量的数量以及生成的数据点的数量。然后该函数将对模拟数据进行逻辑回归拟合,您可以检查系数、残差、拟合等。

我知道我所有的预测变量都具有相同的方差(在处理真实数据时不一定正确),但是这种模拟仍然足以证明我的假设吗?

3个回答

我认为我们应该向MASS的第 198 页的 Venables 和 Ripley 说:

在一种相当普遍的情况下,收敛问题和 Hauck-Donner 现象都可能发生。这是当拟合概率非常接近零或一时。考虑一个包含数千个病例和大约 50 个二进制解释变量的医学诊断问题(这可能是由于编码较少的分类因素而产生的);这些指标之一很少是真的,但总是表明疾病存在。那么具有该指标的案例的拟合概率应该是1,这只能通过取β^i=. 结果 glm将是警告和大约 +/- 10 的估计系数。

除了潜在的数值困难之外,概率被数值估计为 0 或 1 并没有正式的问题。然而,t-test,基于二次近似,用于检验假设βi=0可能成为似然比检验的一个很差的近似值,并且t-test 可能看起来微不足道,但实际上该假设肯定是错误的。据我了解,这就是警告的内容。

对于许多预测器,可能很容易发生像 Venables 和 Ripley 所描述的情况。一个预测器大多不提供信息,但在某些情况下,它是一个案例的强预测器。

虽然 Hauck-Donner 效应与其密切相关,但我认为您的问题是(准)完全分离。这是指预测变量的某种组合(包括交互作用)将产生观察子集的现象,其中您仅观察到零或一(基本上,预测变量值的组合将区分这两个类别)。那么最大似然估计将不存在(它将是无限的,这使得它的标准误差也相当大)。这就是 V&R 在@NRH 的引文中所写的。如果您有许多预测变量,尤其是分类变量,那么对于特定的预测变量组合,这种情况更有可能发生。在这种情况下,Wald 测试就会出现 HD 效应。对 qcs 的规范处理是 Albert 和 Anderson 1984 年在 Biometrika 上发表的文章。

您可能想查看 R 中的 noverlap 包(不再在 CRAN 上),它包含处理准完全分离的实用程序,或者可以处理 qcs 的 brglm 包。

我不太确定如何解释您的问题,但我可以提供一个潜在的解决方案——尝试使用名为 glmnet 的 R 包。我已经将 glmnet 用于线性回归和逻辑回归。在一个特定问题中,我有大约 1,200 个案例(即 N = 1,200)和大约 110 个预测变量。这个包给了我很好的结果。

当然,值得指出的是 glmnet 主要用于惩罚逻辑回归,但由于该包允许您选择要应用的惩罚程度,我相信您可以将惩罚设置为零以获得正则逻辑回归的结果(即没有处罚)。无论如何,该软件包是专门针对高维问题(甚至 N << P)而制作的,这似乎是您问题的根本来源。我强烈推荐 glmnet。