R语言入门之线性回归

时间:2022-07-22
本文章向大家介绍R语言入门之线性回归,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍先回顾一下线性回归模型的成立的四个条件(LINE):

(1)线性(linear):自变量X与因变量Y之间应具有线性关系;

(2)独立性(Independence):观察值Y的残差独立;

(3)正态性(Normality): 观察值Y的残差服从正态分布;

(4)等方差性(equal variance): 不同X时,观察值Y的残差相等。

R语言提供大量函数用于回归分析,在平时的学习和工作中,最常用的就是多元线性回归,下面我将简单介绍如何在R中进行多元回归分析。

1. 模型拟合

# 接下来我以多元线性回归模型为例 进行讲解
#这里使用mtcars数据集,以每加仑公里数(mpg)为因变量,谈到其与总马力(hp)、后轴比(drat)和车重(wt)的关系。
fit <- lm(mpg ~ hp + drat + wt, data=mtcars) #建立回归模型,保留截距项
# fit <- lm(mpg ~ 0 + hp + drat + wt, data=mtcars)此模型不保留截距项
summary(fit) # 展示结果

上述结果的第一行Residuals表示的是残差项结果,Coefficients就是不同变量的回归系数(包括标准误和P值等),另外输出的结果中还有决定系数以及F统计量等用于评估模型优劣的信息,关于这些统计量,我会在后续的内容中和大家详细介绍。

# 其它有用的函数
coefficients(fit) # 提取模型的相关系数

这里其实提取的就是summary()里Coefficients的第一列数据

confint(fit, level=0.95) # 提取模型的95%置信区间

提取Coefficients的95%置信区间。

fitted(fit) # 计算拟合值
residuals(fit) # 计算残差
anova(fit) # 对拟合模型进行方差分析
vcov(fit) # 计算模型参数的协方差矩阵

2. 回归诊断

#回归诊断是判断模型优劣的重要依据
influence(fit) # 回归诊断,将每条数据逐一剔除来判断模型优劣(结果较多,这里就不列出)
# 诊断性绘图 
#回归分析的诊断性绘图通常会返回四幅图,具体含义见下图即可
par(mfrow=c(2,2)) 
plot(fit)

关于如何解读诊断图的结果,请参照往期方差分析内容,从上图我们可以看出被标记出来的几款车型是异常值,可能会影响我们回归分析的结果,需要引起重视。

3. 模型对比

在R中你可以使用anova()函数来比较不同的拟合模型,在这里我们比较去掉自变量drat后的模型与原模型的优劣。

# 比较不同模型的优劣
fit1 <- lm(mpg ~ hp + drat + wt, data=mtcars) #模型1
fit2 <- lm(mpg ~ hp + wt, data=mtcars) #模型2,去掉drat(后轴比)
anova(fit1, fit2)

从结果来看,去掉变量drat后的效果较好。

4. 交叉验证

在R中你可以使用DAAG包里的cv.lm()函数来进行K折交叉验证,使用方法如下:

# K-fold cross-validation
library(DAAG) #加载R包
cv.lm(data=mtcars, fit, m=3) # 3折交叉验证

这里将每折的均方误差相加后除以样本个数,然后取平方根后得到交叉验证的标准误。

上图展示的便是交叉验证的结果,从图中可以看出fold2和fold3的拟合线较为一致,而fold1则与其它两个有一定差异,主要是因为fold2和fold3的观察数与fold1不同,这样的结果可能不太稳定。在实际应用中,我一般倾向于用10折交叉验证(样本量充足时),这样得出的结果会比较稳定。

5. 变量选择

一直以来,关于如何从大数据中挑选预测变量的方法一直存在着争议,我们一般会使用逐步回归筛选的方法来进行变量筛选。在R中,常用的函数就是“MASS”包里的stepAIC()函数,它是依照赤池信息准则(AIC)进行筛选的。

# 逐步回归
library(MASS) #加载R包
fit <- lm(mpg ~ hp + drat + wt, data=mtcars) #构建模型
step <- stepAIC(fit, direction="both") #逐步回归
step$anova # 展示结果

最后,利用AIC准则,我们将原回归模型中的变量drat剔除,使模型得以优化。

好了,关于线性回归得内容就讲到这儿,大家一定要牢记并熟练使用lm()这个函数,咱们下期再见!