1 什么是多重共线性?
2 多重共线性的诊断方法?
from statsmodels.stats.outliers_influence import variance_inflation_factor
import statsmodels.formula.api as smf
import pandas as pd
#读数据
df = pd.read_csv('文件路径')
#建模
result = smf.ols('y~x1+x2+x3+x4',data=df).fit()
#计算扩大引子
VIFlist = [] #保存扩大引子
for i in range(1, 5, 1): #这里循环次数是自变量的个数
vif = variance_inflation_factor(result.model.exog, i) # 参数为设计矩阵和变量数
VIFlist.append(vif)
#以Series格式打印出结果
print('扩大因子法结果:\n',pd.Series(VIFlist))
import statsmodels.formula.api as smf
import pandas as pd
import numpy as np
#构建数据
data = np.array(
[[1,78803,1219,910927,93308,644],
[1,83818,1319,994130,95085,695],
[1,89367,1453,998921,100164,719],
[1,99066,1609,994000,105073,744],
[1,109276,1802,1036737,105155,784],
[1,120480,2053,1063238,105606,878],
[1,136576,2358,1034276,97260,870],
[1,161415,2694,1155219,111764,1102],
[1,185999,3160,1142569,115583,1212],
[1,219029,3697,1147337,125656,1394],
[1,270844,4358,1295543,135670,1610],
[1,321501,5100,1341674,146193,1712],
[1,348499,6281,1425186,152451,1902],
[1,411265,7802,1695000,167609,2103],
[1,484753,9356,1996184,186226,2641],
[1,539117,10933,1995402,189337,2957],
[1,590422,12670,2602850,210597,3236],
[1,644791,14598,2870004,230460,3611],
[1,686450,16285,2922796,253484,4000],
[1,740599,18575,3520129,281405,4440],
],dtype=np.double)
# 标准化后的变量
data_norm = data/np.sum(data**2,axis=0)**(1/2)
data_norm = np.round(np.dot(data_norm.T,data_norm),4)
# 计算特征值和特征向量
eigvalues, eigvec = np.linalg.eig(data_norm) # eigvalues特征根,eigvec特征向量
var_portion = eigvec**2/eigvalues.reshape(-1,1)
var_portion = var_portion/np.sum(var_portion,axis=0).reshape(-1,1)
collinearity = np.c_[eigvalues, var_portion]
df = pd.DataFrame(collinearity, columns=['eigenvalue', 'constant','x1','x2','x3','x4','x5'])
df.insert(1, 'condition_index',(df['eigenvalue'].max()/df['eigenvalue'])**(1/2))
df = df.round(4).sort_values(by='eigenvalue',ascending=False)
当增加或剔除一个自变量,其他自变量的回归系数的估计值或显著性发生较大变化时,认为存在多重共线性
当定性分析认为一些重要的自变量没通过显著性检验时,存在多重共线性
当与因变量之间的简单相关系数绝对值很大的自变量在回归方程中没通过显著性检验时,存在多重共线性
当有些自变量的回归系数的数值大小与预期相差很大,甚至正负号与定性分析结果相反时,存在多重共线性
在自变量的相关矩阵中,当自变量间的相关系数较大时存在多重共线性
当一些重要的自变量回归系数的标准误差较大时,存在多重共线性
3 如何消除多重共线性?
删除不重要的解释变量(所有子集回归、前进法、后退法、逐步回归法)
增大样本量
回归系数的有偏估计(岭回归、主成分等)