R语言之多重共线性的情形及其处理xt6.6

第6章 多重共线性的情形及其处理

6.6 对第5章思考与练习中第9题(xt5.9)财政收入的数据,分析数据的多重共线性,并根据多重共线性剔除变量,将所得结果与用逐步回归法所得的选元结果相比较。

rm(list=ls())

# ---- xt5.9 逐步回归法 ----
data5.9 <- read.csv('D:/rwork/应用回归/习题数据/表5-5.csv',head=TRUE)
data5.9 <- data5.9[,c(-1)] #读取所有变量x和y
names(data5.9) <- c('x1','x2','x3','x4','x5','x6','y') #重命名列名
cor(data5.9)
summary(step(lm5.9,direction='both'))
# 得到y^=874.60021-0.61119x1-0.35305x2+0.63671x5,但是回归系数的解释不合理。





# ---- xt6.6 研究国家财政收入 ----
## 1. 多重共线性的诊断 ----
# 1-1 方差扩大因子法 ----
data6.6 <- read.csv('D:/rwork/应用回归/习题数据/表5-5.csv',head=TRUE)
data6.6 <- data6.6[,c(-1)] #读取所有变量x和y
names(data6.6) <- c('x1','x2','x3','x4','x5','x6','y') #重命名列名
lm6.6 <- lm(y~.,data=data6.6)
summary(lm6.6)
library(car)
vif(lm6.6) #x1,x2,x3,x5的方差扩大因子VIF1=319.484,VIF2=2636.564,VIF3=479.288,VIF5=1860.726,
# 远大于10,这几个自变量之间存在很高的线性相关性,即回归方程存在严重的多重共线性。



# 1-2 特征跟判定法 ----
XX <- cor(data6.6[,-7]) #计算自变量之间的相关系数矩阵
kappa(XX,exact=TRUE) #exact=TRUE时,精确计算条件数,否则近似计算条件数。
# 根据条件数k=21642.62>1000,说明自变量之间存在严重的多重共线性。
eigen(XX) #计算矩阵的特征值和相应的特征向量
# 得到λmin=0.000237,其对应的特征向量θ=(0.065,-0.776,0.16,-0.06,0.603,0.0038)T,
# 即0.065x1*-0.776x2*+0.16x3*-0.06x4*+0.603x5*+0.0038x6*≈0。
# 由于X1*,X4*,X6*的系数近似为0,故x2*,X3*和X5*之间存在着多重共线性。




# 2. 消除多重共线性(删除不重要的解释变量) ----
# x2的方差扩大因子VIF2=2636.564为最大,远大于10,因此剔除x2
summary(lm6.6_drop2 <- lm(y~x1+x3+x4+x5+x6,data=data6.6))
vif(lm6.6_drop2)

# x5的方差扩大因子VIF5=632.896为最大,远大于10,因此剔除x5
summary(lm6.6_drop5 <- lm(y~x1+x3+x4+x6,data=data6.6))
vif(lm6.6_drop5)

# x1的方差扩大因子VIF1=160.513为最大,远大于10,因此剔除x1
summary(lm6.6_drop1 <- lm(y~x3+x4+x6,data=data6.6))
vif(lm6.6_drop1)
# 回归方程为y^=-0.002296e+1.359ex3+0.03144ex4+0.0037x6。
# 此时,所有自变量的VIF值都小于10,故回归方程的多重共线性已经被消除,
# 但自变量x6没有通过t检验(P值=0.901>0.05),说明不显著,剔除后再做回归分析。

summary(lm6.6_new <- lm(y~x3+x4,data=data6.6))
# 得到新的回归方程为y^=-2307+1.359x3+0.033x4。
# 回归方程的多重共线性虽然被消除,但是模型的自变量x4的t检验P值为0.076>0.05,
# 说明在95%的置信度下x4对y的线性影响不显著。

summary(lm6.6_new2 <- lm(y~x3,data=data6.6)) #模型只剩下x3
# 但是根据多重共线性剔除变量后,模型只剩下x3,损失了很多信息,
# 得到的模型国家财政收入只与x3建筑业增加值有关,显然不符合建模的初衷。



# 3. 所得结果与逐步回归结果比较。
# 逐步回归法得到y^=874.60021-0.61119x1-0.35305x2+0.63671x5,但是回归系数的解释不合理。
lm5.9 <- lm(y~x1+x2+x5,data=data6.6)
vif(lm5.9)
# 可见,尽管用逐步回归的方法选出的自变量为x1,x2,x5,但是回归方程还是存在多重共线性。



# 4. 标准化----
library(QuantPsyc)
lm.beta(lm6.6) # 标准化所有自变量
# -1.124954849 -1.305588414 -0.269893939 -0.007429887 3.705993697 -0.020078606

方差扩大因子VIF2=2636.56,自变量间的相关系数也很大,条件数为21642.62,说明方程存在严重的多重共线性。先剔除方差扩大因子最大的x2,重新做回归;再剔除此时方差扩大因子最大的x5,重新做回归;再剔除此时方差扩大因子最大的x1,而这三个变量恰好是后退法与逐步回归法所保留的变量,可见按照共线性剔除变量与常规的后退法及逐步回归法剔除变量的结果会有较大的差别。重新做回归,此时自变量之间的共线性已经消除,再剔除不显著的x6,仅保留x3,x4两个自变量,其中x4的P值为0.076,表示x4只有较弱的显著性。

参考课本:应用回归分析(R语言版),何晓群编著

    原文作者:princess yang
    原文地址: https://blog.csdn.net/princessyang/article/details/109580573
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞