使用 glmnet 时如何报告 p 值显着性以声明预测变量的显着性?

机器算法验证 r 多重回归 套索 网络
2022-03-15 06:40:41

我有一大组预测变量(超过 43,000 个)用于预测可以取 2 个值(0 或 1)的因变量。观察次数超过 45,000 次。大多数预测因子是单词的一元、二元和三元,因此它们之间存在高度的共线性。我的数据集中也有很多稀疏性。我正在使用 glmnet 包中的逻辑回归,它适用于我拥有的那种数据集。我的问题是如何报告预测变量的 p 值显着性。我确实得到了 beta 系数,但是有没有办法声称 beta 系数在统计上是显着的?

这是我的代码:

library('glmnet')
data <- read.csv('datafile.csv', header=T)
mat = as.matrix(data)
X = mat[,1:ncol(mat)-1] 
y = mat[,ncol(mat)]
fit <- cv.glmnet(X,y, family="binomial")

另一个问题是:我使用的是默认的 alpha=1,套索惩罚会导致额外的问题,即如果两个预测变量共线,套索将随机选择其中一个并将零 beta 权重分配给另一个。我还尝试了岭惩罚(alpha=0),它将相似的系数分配给高度相关的变量,而不是选择其中一个。然而,带有套索惩罚的模型给我的偏差比带有脊惩罚的模型要低得多。有没有其他方法可以报告高度共线的两个预测变量?

3个回答

有一篇新论文,A Signiificance Test for the Lasso,其中包括 LASSO 的发明者作为作者报告了这个问题的结果。这是一个相对较新的研究领域,因此本文中的参考文献涵盖了目前已知的很多内容。

至于你的第二个问题,你试过了吗α(0,1)? 通常在这个中间范围内有一个值可以达到很好的折衷。这称为弹性网络正则化。由于您使用的是 cv.glmnet,您可能希望在一个网格上进行交叉验证(λ,α)价值观。

选择后推理是统计研究中一个非常活跃的话题。在我看来,A Significance Test for the Lasso中描述的方法的一个问题是需要严格的假设(从这里转载):

  1. 线性模型是正确的。
  2. 方差是恒定的。
  3. 误差呈正态分布。
  4. 参数向量是稀疏的。
  5. 设计矩阵具有非常弱的共线性。这通常以不连贯、特征值限制或不相容假设的形式表示。

我发现有用的方法——只要有足够的数据可用——是数据拆分。数据拆分的想法至少可以追溯到Moran (1974),并且只需将数据随机分成两组,对第一组进行建模选择,然后对第二组进行推断。

所以在这种情况下,你会将数据分成两部分,在前半部分进行变量选择,然后(假设你有n>p) 在后半部分使用标准回归技术来确定系数的统计显着性。当然,在这两个阶段仍然需要假设,但对于每个阶段来说,它们可能更容易单独满足。

您提到协变量是单、双和三元组,因此它们是高度共线的。所以在这种情况下,在第一阶段应用套索也会违反假设——特别是上面的#5。因此,要使这种方法真正有用且理论上合理,您需要进行某种预套索共线性筛选。

也许看看 CRAN 包hdi,它为高维模型提供推理,应该可以解决问题......这里重复完整的方法有点乏味(有几个,它仍然是一个相当活跃的领域研究),但在这篇论文中有很好的描述: http ://projecteuclid.org/euclid.ss/1449670857 (如果你公开发布一些测试数据,或者模拟一些数据,我也可以给你一个具体的例子)