R - 线性回归
R 语言中的现代线性回归
Section titled “R 语言中的现代线性回归”线性回归是一种基础统计方法,用于建模因变量(响应变量)与一个或多个自变量(预测变量)之间的关系。它旨在找到穿过数据点的最佳拟合直线。
简单线性回归的通用方程是:y = β₀ + β₁x + ε,其中 y 是响应变量,x 是预测变量,β₀ 是截距,β₁ 是斜率,ε 是误差项。R 的核心函数 lm() 是进行此操作的标准方法,但我们将使用 tidyverse 和 broom 包来增强我们的工作流程,以实现现代方法。
回归分析的工作流程
Section titled “回归分析的工作流程”一个典型的回归分析项目遵循以下步骤:
- 1. 数据准备:收集数据并将其组织成数据框。
- 2. 探索性分析:可视化变量之间的关系(例如,使用散点图)。
- 3. 模型拟合:使用
lm()函数创建回归模型。 - 4. 模型解释:分析模型的摘要以理解系数和模型拟合度。
- 5. 模型诊断:检查模型的假设以确保其有效性。
- 6. 预测:使用训练好的模型预测新数据的结果。
示例:根据身高预测体重
Section titled “示例:根据身高预测体重”让我们建模一个人的身高(预测变量)和体重(响应变量)之间的关系。
# 加载必要的现代包# install.packages(c("tidyverse", "broom"))library(tidyverse)library(broom)
# 步骤 1:将数据准备成 tibble(一种现代数据框)height_weight_data <- tibble( height_cm = c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131), weight_kg = c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48))
# 步骤 2:使用 ggplot2 通过散点图探索数据ggplot(height_weight_data, aes(x = height_cm, y = weight_kg)) + geom_point() + labs( title = "Relationship between Height and Weight", x = "Height (cm)", y = "Weight (kg)" ) + theme_minimal()散点图应该显示出正向线性趋势,表明随着身高增加,体重也倾向于增加。
步骤 3 和 4:拟合和解释模型
Section titled “步骤 3 和 4:拟合和解释模型”我们使用 lm() 拟合模型。公式 weight_kg ~ height_cm 可读作“将体重建模为身高的函数”。
# 步骤 3:拟合线性模型model <- lm(weight_kg ~ height_cm, data = height_weight_data)
# 步骤 4:使用 summary() 解释模型summary(model)summary() 的输出信息丰富:
Call:lm(formula = weight_kg ~ height_cm, data = height_weight_data)
Residuals: Min 1Q Median 3Q Max-3.9775 -1.8944 -0.0412 1.6629 6.3002
Coefficients: Estimate Std. Error t value Pr(>|t|)(Intercept) -38.45509 8.04901 -4.778 0.00139 **height_cm 0.67461 0.05191 12.997 1.16e-06 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.253 on 8 degrees of freedomMultiple R-squared: 0.9548, Adjusted R-squared: 0.9491F-statistic: 168.9 on 1 and 8 DF, p-value: 1.164e-06摘要的关键点:
- 系数:截距(
-38.45)和height_cm(0.67)给出了我们的回归方程:weight_kg = -38.45 + 0.67 * height_cm。 - P 值 (
Pr(>|t|)):height_cm的 p 值非常小(1.16e-06),表明它是体重的一个统计学上显著的预测变量。 - 多重 R 平方:
0.9548意味着在我们的模型中,大约 95.5% 的体重变异可以由身高解释,这是一个非常好的拟合。
使用 broom 包进行现代解释
Section titled “使用 broom 包进行现代解释”broom 包可以将模型输出整理成数据框,这非常适合报告和进一步分析。
# 获取模型系数的整洁 tibbletidy(model)
# 获取模型级别统计量的 tibbleglance(model)步骤 5:可视化模型拟合
Section titled “步骤 5:可视化模型拟合”ggplot2 可以轻松地将回归线叠加到散点图上。
ggplot(height_weight_data, aes(x = height_cm, y = weight_kg)) + geom_point(color = "blue", size = 3) + geom_smooth(method = "lm", se = FALSE, color = "red") + # 添加回归线 labs( title = "Height & Weight Regression", x = "Height in cm", y = "Weight in Kg" ) + theme_bw()步骤 6:预测新值
Section titled “步骤 6:预测新值”使用 predict() 函数估计具有新身高的人的体重。最佳实践是提供与预测变量具有相同列名的新数据框。
# 为新的观测值创建一个数据框new_height <- tibble(height_cm = 170)
# 预测体重predicted_weight <- predict(model, newdata = new_height)print(predicted_weight)这将输出身高 170 厘米的人的预测体重。
176.22869最佳实践与后续步骤
Section titled “最佳实践与后续步骤”- 模型诊断:一个关键步骤是检查线性回归的假设(线性、独立性、残差正态性及等方差性)。您可以通过绘制模型对象来完成此操作:
par(mfrow = c(2, 2)); plot(model)。broom包中的augment()函数也非常适合创建用于诊断图的数据框。 - 多元回归:您可以使用公式中的
+号向模型中添加更多预测变量,例如lm(y ~ x1 + x2, data = df)。 - 团队协作:使用像 Git 这样的版本控制工具来跟踪 R 脚本的更改。使用像
renv这样的工具来管理项目特定的包依赖关系,确保您的分析可以被他人重现。