R for statisticsData science生统

变量之间相互不独立如何进行回归分析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 全子集回归分析的热图
上一篇下一篇

猜你喜欢

热点阅读