python 异常捕获 多重_python – 在statsmodels中捕获高多重共线性

您可以通过检查相关矩阵的特征值来检测高多重共线性.非常低的特征值表明数据是共线的,并且相应的特征向量显示哪些变量是共线的.

如果数据中没有共线性,则可以预期没有任何特征值接近零:

>>> 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 # collinearity

>>> corr = np.corrcoef(xs, rowvar=0)

>>> w, v = np.linalg.eig(corr)

>>> w

array([ 0.0083, 1.9569, 1.1687, 0.8681, 0.9981])

其中一个特征值(这里是第一个)接近于零.相应的特征向量是:

>>> v[:,0]

array([-0.4077, 0.0059, -0.5886, 0.0018, 0.6981])

忽略几乎为零的系数,上面基本上说x [0],x [2]和x [4]是共线的(如预期的那样).如果将xs值标准化并乘以此特征向量,则结果将以小方差悬停在零附近:

>>> std_xs = (xs - xs.mean(axis=0)) / xs.std(axis=0) # standardized values

>>> ys = std_xs.dot(v[:,0])

>>> ys.mean(), ys.var()

(0, 0.0083)

注意,ys.var()基本上是接近于零的特征值.

因此,为了捕获高多线性,请查看相关矩阵的特征值.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值