如何在 r 中执行多元线性回归
本指南展示了如何在 R 中执行多元线性回归的示例,包括:
- 在拟合模型之前检查数据
- 型号调整
- 检查模型假设
- 解释模型输出
- 评估模型的拟合优度
- 使用模型进行预测
我们走吧!
设施
在本例中,我们将使用内置的 R 数据集mtcars ,其中包含 32 辆不同汽车的各种属性的信息:
#view first six lines of mtcars
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
在此示例中,我们将构建一个多元线性回归模型,使用mpg作为响应变量,使用disp 、 hp和drat作为预测变量。
#create new data frame that contains only the variables we would like to use to data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data frame head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
数据审核
在拟合模型之前,我们可以查看数据以更好地理解它,并直观地评估多元线性回归是否是拟合该数据的良好模型。
特别是,我们需要检查预测变量与响应变量是否具有线性关联,这表明多元线性回归模型可能是合适的。
为此,我们可以使用pairs()函数创建每个可能的变量对的散点图:
pairs(data, pch = 18, col = "steelblue")
从这对图中我们可以看到以下内容:
- mpg和可用性似乎具有很强的负线性相关性
- mpg和hp似乎具有很强的正线性相关性
- mpg和drat似乎具有适度的负线性相关性
请注意,我们还可以使用GGally库中的ggpairs()函数创建一个类似的图,其中包含每对变量的实际线性相关系数:
#install and load the GGally library install.packages("GGally") library(GGally) #generate the pairs plot ggpairs(data)
每个预测变量似乎与响应变量mpg具有显着的线性相关性,因此我们将继续将线性回归模型拟合到数据。
型号调整
在 R 中拟合多元线性回归模型的基本语法是:
lm(response_variable ~ predictor_variable1 + predictor_variable2 + ..., data = data)
使用我们的数据,我们可以使用以下代码来拟合模型:
model <- lm(mpg ~ disp + hp + drat, data = data)
检查模型假设
在继续验证模型结果之前,我们必须首先验证模型假设是否得到满足。也就是说,我们需要检查以下内容:
1. 模型残差的分布应近似正态。
我们可以通过创建一个简单的残差直方图来检查是否满足这个假设:
hist(residuals(model), col = "steelblue")
尽管分布稍微右偏,但还没有异常到引起重大关注的程度。
2. 所有观测值的残差方差必须一致。
这种优选条件称为同方差。违反这一假设称为异方差。
为了检查是否满足这个假设,我们可以创建一个调整/残值图:
#create fitted value vs residual plot plot(fitted(model), residuals(model)) #add horizontal line at 0 abline(h = 0, lty = 2)
理想情况下,我们希望残差在每个拟合值上均匀分布。从图中我们可以看到,拟合值越大,离差往往会变大一些,但这种趋势还没有极端到引起太多关注。
解释模型输出
一旦我们验证了模型假设得到充分满足,我们就可以使用summary()函数检查模型输出:
summary(model) #Call: #lm(formula = mpg ~ disp + hp + drat, data = data) # #Residuals: # Min 1Q Median 3Q Max #-5.1225 -1.8454 -0.4456 1.1342 6.4958 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 19.344293 6.370882 3.036 0.00513 ** #disp -0.019232 0.009371 -2.052 0.04960 * #hp -0.031229 0.013345 -2.340 0.02663 * #drat 2.714975 1.487366 1.825 0.07863 . #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 3.008 on 28 degrees of freedom #Multiple R-squared: 0.775, Adjusted R-squared: 0.7509 #F-statistic: 32.15 on 3 and 28 DF, p-value: 3.28e-09
从结果中我们可以看到以下内容:
- 模型的总体 F 统计量为32.15 ,相应的 p 值为3.28e-09 。这表明整体模型具有统计显着性。换句话说,回归模型作为一个整体是有用的。
- disp在 0.10 显着性水平上具有统计显着性。特别是,模型结果的系数表明,假设马力和油耗保持不变,可用性增加 1 个单位与平均mpg减少 -0.019 个单位相关。 。
- hp在 0.10 显着性水平上具有统计显着性。特别是,模型结果的系数表明,假设disp和drat保持不变,则马力每增加 1 个单位,平均mpg就会减少 -0.031 个单位。
- drat在 0.10 显着性水平上具有统计显着性。特别是,模型结果的系数表明,假设流量和马力保持不变,汽油消耗增加 1 个单位与平均 2,715 单位mpg的增加相关。
评估模型的拟合优度
为了评估回归模型对数据的拟合程度,我们可以查看一些不同的指标:
1. 多个R方
这衡量了预测变量和响应变量之间线性关系的强度。 R 平方倍数为 1 表示完美线性关系,而 R 平方倍数为 0 表示没有线性关系。
倍数 R 也是 R 平方的平方根,它是响应变量中可以由预测变量解释的方差的比例。在此示例中,R 平方倍数为0.775 。所以 R 平方为 0.775 2 = 0.601 。这表明mpg中60.1%的方差可以通过模型预测变量来解释。
相关: 什么是好的 R 平方值?
2. 残差标准误差
这测量了观测值和回归线之间的平均距离。在此示例中,观测值与回归线平均偏差3.008 个单位。
有关的: 了解回归的标准误差
使用模型进行预测
由模型结果可知,拟合的多元线性回归方程为:
英里/加仑 = -19.343 – 0.019*disp – 0.031*hp + 2.715*drat
我们可以使用这个方程来预测新观察的mpg是多少。例如,我们可以找到具有以下属性的汽车的预测mpg值:
- 显示= 220
- 通道= 150
- 德拉= 3
#define the coefficients from the model output intercept <- coef(summary(model))["(Intercept)", "Estimate"] disp <- coef(summary(model))["disp", "Estimate"] hp <- coef(summary(model))["hp", "Estimate"] drat <- coef(summary(model))["drat", "Estimate"] #use the model coefficients to predict the value for mpg intercept + disp*220 + hp*150 + drat*3 #[1] 18.57373
对于disp = 220、 hp = 150 且drat = 3 的汽车,模型预测汽车的油耗为18.57373 mpg 。
您可以在此处找到本教程中使用的完整 R 代码。
其他资源
以下教程解释了如何在 R 中拟合其他类型的回归模型: