多重共线性学习[转载]

转自:https://www.jianshu.com/p/85df3a5e2eb4

http://www.cnblogs.com/aloiswei/p/5928748.html

1.多重共线性

如果存在某个常数C0,C1,C2,并且使得线性等式满足以下情况:

则X1,X2是精准共线性的。

对于P(>2)个自变量,如果存在常数C0,C1.......CP使得如下公式可以近似表示:

那么我们通常称这个P个变量存在多重共线性.

 2.判断是否存在多重共线性

 将x(1),x(2),···,x(p)是自变量X1,X2,···,Xp经过中心化和标准化得到的向量,记作X=(x(1),x(2),···,x(p))【这里X是行向量】,设λ为XTX的一个特征值,φ为对应的特征向量,其长度为1,即φTφ = 1.此时若λ ≈ 0,则:

用φT左乘上式,得到:

 所以有Xφ ≈ 0;

即:

 

其中φ=(φ1,φ2,···,φp)T表明,向量x(1),x(2),···,x(p)之前有近似的线性关系,也就是说,对于自变量X1,X2,......,Xp,存在C0,C1,……,Cp之间使得

c1X1 +c2X2 +···+cpXp =c0近似成立,这就可以说明自变量之间存在有多重共线性.

度量多重共线性的严重程度的一个重要指标是方矩的XTX的条件数,即如下所示:

其中λmax(XTX),λmin(XTX)表示的是XTX的最大,最小的特征值.

直观上,条件数刻画的XTX的特征值差异的大小,从实际应用的角度,一般若K<100,则认为多重共线性的程度很小,若是100<=K<=1000,则认为存在一般程度上的多重共线性,若是K>1000,则就认为存在严重的多重共线性.

3.一个R语言实例

考虑一个有六个回归自变量的线性回归问题,原始数据如下图:

规律是:除了第一组数组,其他的组中X1,X2,X3,X4和为10.

这里一共有12组数据,除了第一组外,自变量X1,X2....,X6的其余11组数据均满足线性关系:

X1+X2+X3+X4=10;

现在开始解题了,首先第一步,用数据框的方法输入数据,由自变量X1,X2,......X6中心化和标准化得到的矩阵XTX本质上就是由这些自变量生成的相关矩阵,再用Kappa()函数求出矩阵的条件数,用eigen()函数求出矩阵XTX的最小特征值和相应的特征向量,求解问题的R程序:
复制代码
collinear<-data.frame(
   Y=c(10.006, 9.737, 15.087, 8.422, 8.625, 16.289,
        5.958, 9.313, 12.960, 5.541, 8.756, 10.937),
   X1=rep(c(8, 0, 2, 0), c(3, 3, 3, 3)),
   X2=rep(c(1, 0, 7, 0), c(3, 3, 3, 3)),
   X3=rep(c(1, 9, 0), c(3, 3, 6)),
   X4=rep(c(1, 0, 1, 10), c(1, 2, 6, 3)),
   X5=c(0.541, 0.130, 2.116, -2.397, -0.046, 0.365,
        1.996, 0.228, 1.38, -0.798, 0.257, 0.440),
   X6=c(-0.099, 0.070, 0.115, 0.252, 0.017, 1.504,
        -0.865, -0.055, 0.502, -0.399, 0.101, 0.432)
)
XX<-cor(collinear[2:7])
kappa(XX,exact=TRUE) #exact=TRUE表示精确计算条件数;
[1] 2195.908    #大于1000,有严重的多重共线性
# eigen(XX)
复制代码

 

得到的条件数K=2195.908>1000,这个时候我们可以认为有严重的多重共线性,进一步,我们要试图找出那些变量是多重共线性的,计算矩阵的特征值和相应的特征向量:

输入eigen(XX)

这个时候我们可以得到:

λmin = 0.001106,

φ =(0.4476,0.4211,0.5417,0.5734,0.006052,0.002167)T .

所以我们可以得到结果:

 因为X(5),X(6)前边的系数近似等于0,因此我们可以得到:

所以存在着C0,C1,C2,C3,C4使得:

这样其实就可以说明变量X1,X2,X3,X4之间存在着多重共线性,这个与题目中的变量是相同的,因此我们的问题也就迎刃而解了.

4.总——判断方法

1.计算X的秩是否是满秩。如果不是满秩的,说明其中有Xi可以用其他的X的线性组合表示;
2.计算条件数kappa(X),k<100,说明共线性程度小;如果100<k<1000,则存在较多的多重共线性;若k>1000,存在严重的多重共线性。
posted @   lypbendlf  阅读(532)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示