通过检查相关矩阵的特征值,可以检测出高复用共线性。 较低的本征值表示数据在同一条直线上,对应的本征向量表示哪个变量在同一条直线上。
如果数据没有共线性,则特征值最好都不接近零: xs=NP.random.randn (100,5 ) # independent variables
corr=NP.corrcoef(xs,rowvar=0) # correlation matrix
w,v=NP.LinaLG.EIG(corr ) # eigen values eigen vectors
w
array ([ 1.256,1.1937,0.7273,0.9516,0.8714 ]
但是,如果x[4] - 2 * x[0] - 3 * x[2]=0,则noise=NP.random.randn(100 ) # white noise
xs [ :4 ]=2* xs [ :0 ]3* xs [ :2 ].5 * noise # col linearity
corr=NP.corrcoef(xs,rowvar=0) ) )。
w,v=NP.LinaLG.EIG(Corr ) ) ) ) ) ) ) ) w,v=NP.LinaLG.EIG(Corr ) ) ) ) ) ) ) ) )。
w
array ([ 0.0083,1.9569,1.1687,0.8681,0.9981 ]
一个特征值(这里是第一个特征值)接近零。 所对应的特征向量是v [ 33,360,0 ]
array ([-0.4077,0.0059,- 0.5886,0.0018,0.6981 ]
无视几乎为零的系数,以上基本上说了x[0]。 x[2]和x[4]是同一条直线(如预期)。 如果将xs值归一化并乘以此特征向量,则结果会在0附近徘徊,方差会变小。 STD_xs=(xs-xs.mean ) axis=0) )/xs.STD ) axis=0) ) #标准值
ys=STD _ xs.dot (v [ :0 ]
ys.mean (,ys.var ) )。
(0,0.0083 ) )。
请注意,ys.var ()基本上是接近零的模态。
因此,为了得到高的多线性度,只要考虑相关矩阵的特征值即可。