执行变量选择时如何处理多重共线性?


28

我有一个包含9个连续自变量的数据集。我正在尝试从这些变量中进行选择,以使模型适合单个百分比(因变量)变量Score。不幸的是,我知道几个变量之间将存在严重的共线性。

我尝试使用stepAIC()R中的函数进行变量选择,但是奇怪的是,该方法似乎对方程中列出变量的顺序很敏感...

这是我的R代码(因为它是百分比数据,所以我对得分使用了logit转换):

library(MASS)
library(car)

data.tst = read.table("data.txt",header=T)
data.lm = lm(logit(Score) ~ Var1 + Var2 + Var3 + Var4 + Var5 + Var6 + Var7 +
             Var8 + Var9, data = data.tst)

step = stepAIC(data.lm, direction="both")
summary(step)

由于某种原因,我发现方程式开头列出的变量最终被stepAIC()函数选择,结果可以通过列出来操纵,例如,Var9首先(跟随波浪号)。

在这里拟合模型的一种更有效(且争议较小)的方法是什么?我使用线性回归并没有真正陷入僵局:我唯一想做的就是能够了解9个变量中的哪一个真正驱动了变量的Score变化。优选地,这将是考虑这9个变量的共线性的强大潜力的某种方法。


6
共线性将意味着,但是您进行分析,从本质上讲,不可能确定一个变量是否比高度共线性的变量“更多”地驱动变量。考虑到这一限制,您可以尝试套索作为选择少量预测最佳变量的方法,然后报告它选择的变量集以及与之高度共线性的那些变量。分组的套索是另一种选择。
做客

4
@来宾:在存在强共线性的情况下,套索效果不是特别好,尤其是在模型选择问题上。
主教2012年

2
@cardinal,套索还可以,但是如果多个变量相关,则倾向于只选择其中一个,这就是为什么我建议查看一组高度共线的变量的原因。决定使用比此“默认值”更复杂的内容时,需要对实用程序进行评估,并对这种模型的用途有更深入的了解。
2012年

2
您可能需要研究bicreg函数{package BMA}。请注意,您需要一个完整案例数据集才能使其正常工作。我发现它对于模型选择非常有用。
Dominic Comtois'4

1
@guest:好吧,这很大程度上取决于选择正则化参数的方式。实际上,在某些情况下,套索具有(可证明的)过度选择参数的趋势。OP询问“我唯一想做的就是能够了解9个变量中的哪一个真正驱动了变量的Score变化”,这是我可能过于关注的句子。在强共线性的情况下,套索将无济于事,至少在对OP言论的更严格解释中。
主教

Answers:


14

首先,T。Keith,多重回归及其他是解决此问题的一个很好的资源。本书中有很多关于路径建模和变量选择的材料,我想您会在那里找到有关问题的详尽解答。

解决多重共线性的一种方法是使预测变量居中,即从每个值中减去一个序列的均值。当数据高度共线时,也可以使用Ridge回归。最后,顺序回归可以帮助理解预测变量之间的因果关系,同时分析预测变量事件的时间顺序。

所有9个变量都显示共线性吗?为了进行诊断,可以使用Cohen 2003方差膨胀因子。VIF值> = 10表示高共线性和虚假的标准误差。我了解您对预测因素和结果之间的因果关系更感兴趣。如果不是这样,则多重共线性不是一个严重的预测问题,因为您可以通过针对每次添加预测变量而构建的模型检查样本数据中的MAE来确认。如果您的预测变量具有边际预测能力,那么即使存在模型多重共线性,您也会发现MAE会降低。


16

由于很难确定要删除的变量,因此最好不要删除变量。遵循这条线的两种方法是:(1)使用数据约简方法(例如,变量聚类或主成分),然后将摘要分数而不是单个变量放入模型中;(2)将所有变量放入模型中,但不进行测试调整了一个变量,以适应​​竞争变量的影响。对于(2),竞争变量的组块测试功能强大,因为共线性变量在整体多个自由度关联测试中共同发挥作用,而不是像单独测试变量时相互竞争。


yoi请简单解释一下and put summary scores into the model
-SIslam

1
biostat.mc.vanderbilt.edu/rms上的“我的课程笔记” 详细介绍
Frank Harrell

1

如果您想在存在高共线性的情况下进行变量选择,我建议您使用l0ara软件包,该软件包使用迭代自适应岭过程拟合L0惩罚型GLM。由于此方法最终基于脊正则化回归,因此可以很好地处理共线性,并且在我的模拟中,与LASSO,弹性网或自适应LASSO相比,它产生的假阳性更少,同时仍具有出色的预测性能。或者,您也可以尝试使用L0Learn软件包L0和L2惩罚的组合。L0惩罚则倾向于稀疏性(即小模型),而L2惩罚则规范共线性。通常也建议使用弹性网(使用L1和L2罚分的组合),但是在我的测试中,这种产生的方式会产生更多的误报,而且系数也会有很大的偏差。如果改用L0惩罚方法(又名最佳子集),则可以消除这种偏差-这是所谓的oracle估计器,它同时获得一致且无偏的参数系数。所有这些方法中的正则化参数都需要通过交叉验证进行优化,以提供最佳的样本外预测性能。如果您还希望获得参数的显着性水平和置信区间,则也可以通过非参数引导进行。

l0ara像弹性网一样的迭代自适应脊线算法(有时称为折断的自适应脊线)具有分组效应,这将导致它进入模型后立即选择成组的高度相关变量。这很有道理-例如,如果您的模型中有两个接近共线的变量,它将在两个变量上均分效果。

如果您要分析比例数据,最好使用logistic回归模型btw-该l0ara程序包允许您结合使用L0罚单来做到这一点;对于L0Learn软件包,将很快提供支持。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.