如何处理共线变量

机器算法验证 回归 相关性 自习 模型选择 多重共线性
2022-03-15 13:30:34

免责声明:这是一个家庭作业项目。

我正在尝试根据几个变量提出钻石价格的最佳模型,到目前为止我似乎有一个非常好的模型。但是我遇到了两个明显共线的变量:

>with(diamonds, cor(data.frame(Table, Depth, Carat.Weight)))
                   Table       Depth Carat.Weight
Table         1.00000000 -0.41035485   0.05237998
Depth        -0.41035485  1.00000000   0.01779489
Carat.Weight  0.05237998  0.01779489   1.00000000

表和深度相互依赖,但我仍然想将它们包含在我的预测模型中。我对钻石做了一些研究,发现 Table 和 Depth 是钻石顶部的长度和从顶部到底部尖端的距离。由于这些钻石的价格似乎与美丽有关,而美丽似乎与比例有关,我打算将它们的比例包括在内,例如来预测价格。这是处理共线变量的标准程序吗?如果不是,那是什么?TableDepth

编辑:这是深度图〜表: 在此处输入图像描述

4个回答

这些变量是相关的。

该相关矩阵隐含的线性关联程度远不足以使变量被认为是共线的。

在这种情况下,我很乐意将所有这三个变量用于典型的回归应用程序。

检测多重共线性的一种方法是检查相关矩阵的 Choleski 分解——如果存在多重共线性,那么会有一些对角线元素接近于零。这是您自己的相关矩阵:

> chol(co)
     [,1]       [,2]       [,3]
[1,]    1 -0.4103548 0.05237998
[2,]    0  0.9119259 0.04308384
[3,]    0  0.0000000 0.99769741

(对角线应始终为正,尽管某些实现可能会因累积截断误差的影响而略微为负)

如您所见,最小的对角线是 0.91,距离零还有很长的路要走。

相比之下,这里有一些几乎共线的数据:

> x<-data.frame(x1=rnorm(20),x2=rnorm(20),x3=rnorm(20))
> x$x4<-with(x,x1+x2+x3+rnorm(20,0,1e-4))
> chol(cor(x))
   x1         x2         x3           x4
x1  1 0.03243977 -0.3920567 3.295264e-01
x2  0 0.99947369  0.4056161 7.617940e-01
x3  0 0.00000000  0.8256919 5.577474e-01
x4  0 0.00000000  0.0000000 7.590116e-05   <------- close to 0.

认为这个钻石切割示意图可能会增加对问题的洞察力。无法将图像添加到评论中,因此将其作为答案....

在此处输入图像描述

PS。@PeterEllis 的评论:“顶部较长的钻石从顶部到底部较短”这一事实可能是有道理的:假设所有未切割的钻石大致是矩形的(比如说)。现在切割者必须用这个边界矩形选择他的切割。这引入了权衡。如果宽度和长度都增加,您将选择更大的钻石。可能但更稀有且更昂贵。有道理?

应避免在线性回归中使用比率。本质上,您的意思是,如果对这两个变量进行线性回归,它们将呈线性相关且没有截距;显然不是这样。见:http ://cscu.cornell.edu/news/statnews/stnews03.pdf

此外,他们正在测量一个潜在变量——钻石的大小(体积或面积)。您是否考虑过将数据转换为表面积/体积测量值而不是同时包含这两个变量?

您应该发布该深度和表格数据的残差图。无论如何,您两者之间的相关性可能是无效的。

从相关性很难得出表和宽度是否确实相关的结论。接近 +1/-1 的系数表示它们是共线的。它还取决于样本量。如果您有更多数据,请使用它来确认。

处理共线变量的标准程序是消除其中一个……因为知道一个会决定另一个。