多重共线性诊断与R语言实践

鄙人学习笔记
参考文献:《计量经济学模型及R语言应用》-王斌会



变量的多重共线性诊断

多元线性回归模型的一个基本假设,就是要求自变量矩阵X列满秩,即秩rank(X)=p,也就是要求X的列向量之间线性无关。如果X的列不满秩,则(X’X)-1将不存在,于是基于最小二乘回归系数估计,b = (X’X)-1X’y将不存在,所以很难得出稳定的结果。

考虑线性回归模型:

这里假定自变量矩阵X已中心标准化,且rank(X)=p, 这时X’X/(n-1)为相关矩阵R。
下面给出几个常用的复共线性诊断方法。

特征根分析法

条件数法

方差扩大因子法

一般标准:
①当0<VIF≤5时,没有复共线性;
②当5<VIF≤10时,有较弱的复共线性;
③当10<VIF≤100时,有中等或较强的复共线性;
④当VIF>100时,有严重的复共线性。

由于VIF=1/TOL (TOL称为容忍度),所以也可以用TOL来诊断复共线性。

直观判定法

举个例子(R语言)

数据:

输入:

Xdf <- testdf[, -1]
Xscale <- scale(Xdf, T, T)
#scale(data, center=T,scale=T)
#1.center和scale默认为TRUE 
#2.center为TRUE 表示数据中心化 
#3.scale为TRUE 表示数据标准化
Rtest <- (t(as.matrix(Xscale)) %*% as.matrix(Xscale))/14
# * 是表示两个矩阵中对应的元素的乘积
# %*% 表示通常意义下的矩阵乘积,要求第一个矩阵的列数与第二个矩阵行数相等。
#相关矩阵 =  t(scale(X))*scale(X)/(n-1)
#备注:X为解释变量矩阵,维度是n*p;n为样本量
(Rtest)
(R01 <- cor(Xscale))
#查看我们自制的相关矩阵和R给出的相关矩阵是否一样

#1.特征分析法
(lamda = eigen(Rtest)$value)
#本次实验的相关系数矩阵最小特征根为0.1626082 >0.1 则不存在复共线性
#2.条件数法
(CN = max(lamda)/min(lamda))
#本次实验中CN = 11.53401,0<= CN <= 30, 则不存在多重共线性
#3.方差扩大因子法(VIF)
R2 <- summary(lm(x2 ~ x1 + x3, data = testdf))$r.sq
(VIF1 <- 1/(1 - R2))
#本次实验中VIF = 3.383924,0<= VIF <-5,同样没有复共线性

输出:

发布了116 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105060664