多重共线性学习[转载]
转自: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左乘上式,得到:

即:

其中φ=(φ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语言实例
考虑一个有六个回归自变量的线性回归问题,原始数据如下图:

这里一共有12组数据,除了第一组外,自变量X1,X2....,X6的其余11组数据均满足线性关系:
X1+X2+X3+X4=10;
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 .
所以我们可以得到结果:


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

这样其实就可以说明变量X1,X2,X3,X4之间存在着多重共线性,这个与题目中的变量是相同的,因此我们的问题也就迎刃而解了.
4.总——判断方法
1.计算X的秩是否是满秩。如果不是满秩的,说明其中有Xi可以用其他的X的线性组合表示;2.计算条件数kappa(X),k<100,说明共线性程度小;如果100<k<1000,则存在较多的多重共线性;若k>1000,存在严重的多重共线性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端