Skip to content

R - 多元回归

多元线性回归(Multiple Linear Regression)是简单线性回归的扩展,用于建模单个连续响应变量与两个或多个预测变量之间的关系。它允许我们评估多个预测变量对结果的共同影响。

多元回归的一般数学方程是:

y = β₀ + β₁x₁ + β₂x₂ + ... + βₚxₚ + ε
  • y 是响应变量。
  • β₀ 是截距。
  • β₁, β₂, … βₚ 是预测变量的系数。
  • x₁, x₂, … xₚ 是预测变量。
  • ε 是随机误差项。

在 R 中,我们使用 lm() 函数创建回归模型。该模型从输入数据中估计系数(β 值)。一旦模型建立,我们就可以用它来预测新数据的响应,并评估预测变量的显著性。

此函数根据预测变量与响应变量之间的关系创建线性模型。

lm(formula, data)
  • formula:一个 "formula" 类对象,指定模型。对于多元回归,它看起来像 response ~ predictor1 + predictor2 + ...。
  • data:一个数据框,包含模型中的变量。

我们将使用内置的 mtcars 数据集,根据汽车的排量(disp)、马力(hp)和重量(wt)来建模其油耗(mpg)。

使用 tidyverse 中的 dplyr 包使数据选择变得简洁易读。

# 如果您尚未安装 tidyverse:install.packages("tidyverse")
library(dplyr)
# 从 mtcars 数据集中选择相关列
input_data <- mtcars %>%
select(mpg, disp, hp, wt)
# 显示数据集的前几行
print(head(input_data))

准备好的数据如下所示:

mpg disp hp wt
Mazda RX4 21.0 160 110 2.620
Mazda RX4 Wag 21.0 160 110 2.875
Datsun 710 22.8 108 93 2.320
Hornet 4 Drive 21.4 258 110 3.215
Hornet Sportabout 18.7 360 175 3.440
Valiant 18.1 225 105 3.460

我们使用 lm() 构建模型,然后使用 summary() 获取详细分析,这是标准做法。

# 创建关系模型
model <- lm(mpg ~ disp + hp + wt, data = input_data)
# 获取模型的综合摘要
summary(model)

summary() 输出包含丰富的信息:

Call:
lm(formula = mpg ~ disp + hp + wt, data = input_data)
Residuals:
Min 1Q Median 3Q Max
-3.8924 -1.6421 -0.1785 1.0954 5.5494
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.105505 2.110815 17.579 < 2e-16 ***
disp -0.000937 0.010350 -0.091 0.92851
hp -0.031157 0.011355 -2.744 0.01049 *
wt -3.800891 1.066178 -3.565 0.00132 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.61 on 28 degrees of freedom
Multiple R-squared: 0.8268, Adjusted R-squared: 0.8083
F-statistic: 44.57 on 3 and 28 DF, p-value: 8.65e-11

摘要解读:

  • 系数(Estimate):这些是 β 值。例如,对于体重(wt)每增加 1 个单位,在其他变量保持不变的情况下,mpg 预计会减少 3.8。
  • Pr(>|t|) (p-值):这告诉我们预测变量是否具有统计显著性。较小的 p-值(例如,< 0.05)表明该预测变量与响应变量之间存在有意义的关系。在这里,hp 和 wt 是显著的,而在其他两个变量存在的情况下,disp 则不显著。
  • Adjusted R-squared(调整后的 R 方):这表明我们的模型解释了 mpg 中大约 80.8% 的方差,这是一个很强的拟合。

步骤 3:使用 broom 包整理模型输出

Section titled “步骤 3:使用 broom 包整理模型输出”

broom 包是一个现代工具,用于将模型对象转换为整洁的数据框(tidy data frames),使其更易于绘图和报告。

# 如果您尚未安装 broom:install.packages("broom")
library(broom)
# 获取模型系数的整洁数据框
tidy_model <- tidy(model)
print(tidy_model)
# A tibble: 4 × 5
term estimate std.error statistic p.value
<chr> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 37.1 2.11 17.6 1.78e-16
2 disp -0.000937 0.0104 -0.0905 9.29e- 1
3 hp -0.0312 0.0114 -2.74 1.05e- 2
4 wt -3.80 1.07 -3.57 1.32e- 3

预测的标准和最安全的方法是使用 predict() 函数,它将模型方程应用于新数据。

# 创建一个包含新汽车规格的数据框
new_cars <- data.frame(
disp = c(221, 250),
hp = c(102, 110),
wt = c(2.91, 3.20)
)
# 预测新汽车的 MPG
predicted_mpg <- predict(model, newdata = new_cars)
# 显示预测结果
print(predicted_mpg)

模型预测了新汽车数据的油耗:

1 2
22.71021 21.43889