变量之间相互不独立如何进行回归分析2021.3.18
2021-03-19 本文已影响0人
R语言_茶味先生
1. 变量之间不独立
也就是说用变量A,B,C来预测D变量,进行线性回归时发现A和B之间可能有关系,B和C直接可能有关系,C和A之间可能还有关系。我们应该如何进行线性回归。这里举的例子还只是有三个自变量,我们可以轻松的算出三种不同的模型,但是要是有更多自变量我们该如何处理呢,我们该如何从众多的模型中选择出最佳的模型呢?接下来就是见证奇迹的时刻😎
1.1 变量之间不独立进行线性回归
我们以mtcars数据集为例,想要知道mpg(每加仑行驶里程数)和hp(马力),汽车重量(wt)之间的关系,汽车的重量和马力之间存在交互,汽车的重量会影响马力。
fit<-lm(mpg~hp+wt+hp:wt,data=mtcars)
summary(fit)
可以看出hp和wt之间的关系的p值小于0.01,呈显著相关。
图1 总结拟合结果
1.2 AIC函数衡量模型拟合效果(事实信息准则)
AIC函数比较各个模型的拟合效果AIC得出的值越小,说明模型可以用较少的参数获得很好的拟合度。以state.x77数据集为例
fit1<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
fit2<-lm(Murder~Illiteracy+Income,data=states)
fit3<-lm(Murder~Population+Illiteracy,data=states)
AIC(fit1,fit2,fit3)
通过比较AIC值可以发现有时候并不是参数越多,拟合的效果就越好。
图2 各个模型的拟合效果
1.3 更多变量回归分析
更多变量的回归分析,当变量数达到10甚至100个的时候,可以采用逐步回归法和全子集回归法。
- 逐步回归法:模型会一次添加或者删除一个变量,直到达到某个节点为止,也就是继续添加或者删除变量,模型的拟合结果不再继续变化。增加变量称为向前逐步回归,删除变量称为向后逐步回归。
- 全子集回归法: 计算出所有可能的模型,然后计算出效果最佳的模型。(更加推荐)
1.3.1 逐步回归法对应的函数以及用法
我们可以使用MASS包中的stepAIC()函数进行逐步回归分析。
library(MASS)
states <- as.data.frame(state.x77[,c("Murder", "Population","Illiteracy", "Income","Frost")])
fit <- lm(Murder ~ Population + Illiteracy + Income + Frost,data=states)
stepAIC(fit, direction="backward")
图3 向后逐步回归法
这种方法的弊端很明显,不会把所有的组合都考虑在内。
1.3.2 全子集回归法对应的函数以及用法
我们可以使用leaps包中的regsubsets函数进行全子集回归分析。
library(leaps)
states <- as.data.frame(state.x77[,c("Murder", "Population","Illiteracy", "Income", "Frost")])
leaps <-regsubsets(Murder ~ Population + Illiteracy + Income +Frost, data=states, nbest=4)
summary(leaps)#
通过结果我们可以看出从一个变量到四个变量的各种组合。
图4 全子集回归分析的结果
这种组合结果很像矩阵形式,所以我们猜测可以用绘制出热图形式的图来表达意思
plot(leaps, scale="adjr2")#横轴表示变量的组成,纵轴表示模型拟合的效果值。
图5 全子集回归分析的热图