R – 线性回归(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在数据分析与预测领域,R – 线性回归是不可或缺的基础工具之一。它通过建立自变量与因变量之间的线性关系,帮助我们理解数据背后的模式,并支持对未来趋势的预测。无论是研究经济学中的收入与消费的关系,还是分析市场营销中的广告投入对销售额的影响,线性回归都能提供直观且实用的解决方案。本文将从零开始,系统讲解线性回归的核心概念、在R语言中的实现步骤,以及如何通过实际案例掌握这一技术。


线性回归的基本概念

1. 什么是线性回归?

线性回归是一种通过线性方程描述变量之间关系的统计方法。其核心思想是:通过一条“最佳拟合直线”,将自变量(解释变量)与因变量(响应变量)之间的关系可视化。例如,我们可以用“汽车重量(自变量)”来预测“油耗(因变量)”,而这条直线就是两者关系的数学表达式。

形象比喻:线性回归就像一座“桥梁”,连接自变量与因变量,帮助我们理解变量间的因果关系或相关性。

2. 数学表达式与假设

线性回归的数学表达式为:
[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_n x_n + \epsilon ]
其中:

  • (y) 是因变量(如汽车油耗);
  • (x_1, x_2, \dots, x_n) 是自变量(如汽车重量、马力等);
  • (\beta_0) 是截距项;
  • (\beta_1, \beta_2, \dots, \beta_n) 是回归系数,表示自变量对因变量的影响强度;
  • (\epsilon) 是误差项,代表未被模型捕捉的随机因素。

关键假设

  • 线性:因变量与自变量之间存在线性关系;
  • 独立性:误差项之间相互独立;
  • 正态性:误差项服从正态分布;
  • 同方差性:误差项的方差在不同自变量取值下保持一致。

在R中实现线性回归的步骤

1. 数据准备

首先,我们需要加载数据。R内置了多个经典数据集,例如mtcars(汽车性能数据集)。以下代码演示如何加载数据并查看其结构:

data(mtcars)  

head(mtcars)  

str(mtcars)  

输出结果将显示包含32辆汽车的变量,如mpg(每加仑油耗英里数)、wt(车重)、hp(马力)等。

2. 拟合模型

使用lm()函数进行线性回归建模,语法为:

model <- lm(formula = y ~ x1 + x2, data = dataset)  

例如,假设我们想用“车重(wt)”和“马力(hp)”预测“油耗(mpg)”,代码如下:

model <- lm(mpg ~ wt + hp, data = mtcars)  

3. 查看模型结果

使用summary()函数查看回归结果:

summary(model)  

输出结果包含关键信息:

  • Coefficients:回归系数的估计值、标准误差、t值及p值;
  • R-squared:模型解释因变量变异的比例;
  • F-statistic:模型整体显著性的检验结果。

案例分析:汽车油耗预测

1. 数据描述

mtcars数据集为例,我们选择以下变量:

  • 因变量(y)mpg(油耗,数值型);
  • 自变量(x)wt(车重,数值型)、hp(马力,数值型)。

2. 模型构建与解释

model <- lm(mpg ~ wt + hp, data = mtcars)  

summary(model)  

部分输出结果如下:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 37.2229     1.8776  19.822  < 2e-16 ***
wt          -3.8778     0.6327  -6.131 1.12e-06 ***
hp          -0.0318     0.0091  -3.500  0.00145 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.593 on 29 degrees of freedom
Multiple R-squared:  0.8268,	Adjusted R-squared:  0.8148 
F-statistic: 65.64 on 2 and 29 DF,  p-value: 9.123e-12

关键解读

  • 截距项(Intercept):当车重和马力均为0时,油耗理论值为37.22(实际无意义,但数学上需要保留);
  • 车重(wt)的系数:-3.88,表示在固定马力的情况下,车重每增加1单位,油耗平均减少3.88;
  • 马力(hp)的系数:-0.03,表示在固定车重的情况下,马力每增加1单位,油耗平均减少0.03;
  • R-squared:0.8268,说明模型能解释82.68%的油耗变异,效果较好。

3. 模型预测

使用predict()函数对新数据进行预测:

new_data <- data.frame(wt = 3.2, hp = 150)  

predicted_mpg <- predict(model, newdata = new_data)  
print(predicted_mpg)  

输出结果:

       1 
23.96083 

模型评估与诊断

1. R-squared与调整R-squared

  • R-squared:衡量模型解释因变量变异的比例,数值越接近1越好。
  • 调整R-squared:考虑变量数量后的修正指标,避免因增加无关变量而虚高R-squared。

在案例中,调整后的R-squared为0.8148,说明模型在控制变量数量后仍保持较高解释力。

2. 残差分析

残差是观测值与预测值之差,通过残差图可诊断模型假设是否成立:

plot(model, which = 1)  # 残差与拟合值的关系图  
plot(model, which = 2)  # 正态Q-Q图  
  • 残差与拟合值图:若呈现随机分布,则线性假设成立;若存在漏斗形(异方差),则需考虑加权回归或对变量进行变换。
  • 正态Q-Q图:若点近似落在直线上,则残差近似正态分布。

3. 异常值诊断

  • Cook’s距离:衡量单个观测值对模型的影响程度。通常,Cook’s距离大于1的观测值需谨慎处理。
  • 杠杆值(Leverage):反映观测值在自变量空间中的“独特性”。
cooks.distance(model)  

hatvalues(model)  

进阶技巧与常见问题

1. 多重共线性

当自变量间存在高度相关性时(如“车重”和“马力”可能同时影响油耗),会导致回归系数的标准误差增大,降低模型稳定性。可通过**方差膨胀因子(VIF)**检测:

install.packages("car")  
library(car)  

vif(model)  

若VIF值超过10,建议移除相关变量或使用正则化方法(如岭回归)。

2. 交互项与多项式回归

  • 交互项:当自变量间的交互影响显著时,可在模型中添加交互项,例如:
    model <- lm(mpg ~ wt * hp, data = mtcars)  # wt与hp的交互项  
    
  • 多项式回归:若关系非线性,可添加平方项或立方项:
    model <- lm(mpg ~ poly(wt, 2), data = mtcars)  # 二次多项式  
    

3. 模型选择与简化

通过逐步回归(Stepwise Regression)自动筛选最优变量:

step_model <- step(lm(mpg ~ ., data = mtcars), direction = "forward")  

结论

R – 线性回归是数据分析中一项基础且强大的技术,它不仅能够揭示变量间的定量关系,还能为预测提供可靠依据。本文通过从理论到实践的系统讲解,帮助读者掌握线性回归的核心概念、R语言实现方法,以及模型评估与优化技巧。

对于编程初学者,建议从简单案例入手,逐步理解回归系数的含义与统计检验的逻辑;中级开发者则可深入探索交互项、多项式回归及模型诊断技术。通过不断实践与案例分析,您将能够熟练运用这一工具解决实际问题,为更复杂的统计建模打下坚实基础。

记住,模型只是工具,理解其背后的逻辑与假设才是关键!

最新发布