第19讲:简单线性回归模型

数据挖掘与R语言

2026年11月04日

上讲回顾

  • 散点图:查看两个数值型变量之间关系的首选图形
  • 判断关系看三件事:方向(正/负)、形状(直/曲)、强弱(松/紧)
  • 但散点图说不出:"多投 1 万元广告,销量多几万件?"

本讲内容

项目五的开篇:只用一条直线写出两个变量的数量关系。

  1. 从方程到回归 —— 已知 a、b 求 y,和它的"反问题"
  2. "回归"一词的来历 —— 高尔顿与向均值回归
  3. 案例:广告费与销量 —— 先画散点图,再判断逻辑
  4. 简单线性回归模型 —— 模型形式、最小二乘、lm()
  5. 读懂 summary() —— 系数、t 值、p 值、R²、F 值
  6. 小结与预告 —— 后续课程 + 翻转课堂作业

Part 1:从方程到回归

一个我们在初中就会的公式,反过来问就不容易了

1.1 初中就会的知识:知道 a 和 b

一次函数 \(y = a + bx\):已知 \(a\) 和 \(b\),任意给定 \(x\),就能轻易算出 \(y\)。

点严丝合缝地落在直线上——因为规律是我们已知的完全线性关系。

1.2 现实中的未知:只剩下散点

现实里反过来:我们看不到规律本身,只看到一次次观测。\(a\) 和 \(b\) 是多少?图上没有现成答案,要我们找出来。

重要

回归要解决的问题:已知观测值 \((x, y)\),反推 \(a\) 和 \(b\)——这就是回归分析。

Part 2:"回归"~一个维多利亚时代的发现

2.1 高尔顿的疑问:高个子父母的孩子有多高

Francis Galton(1822—1911),英国统计学家、达尔文的表弟。他收集了数百个家庭的父母与成年子女身高,结果让他惊讶:

  • 父母身高较高 → 子女通常也较高,但比父母矮一些
  • 父母身高较矮 → 子女通常也较矮,但比父母高一些
  • 子女的身高,总是向平均身高靠拢

注记

1886 年论文标题:"Regression towards Mediocrity in Hereditary Stature"(《遗传身高向均值的回归》)—— "回归"(Regression) 一词由此进入统计学,后来泛指"用一个变量预测另一个变量"。

2.2 为什么叫"回归"?看斜率

提示

父母每高 1 英寸,子女平均只高 0.65 英寸——偏离均值的程度在缩小,"回归"由此得名。今天的"回归分析"指用 x 解释 y 的统计方法。

Part 3:案例引入——广告费与销量

先看图,再谈逻辑,最后才建模

3.1 一份假设的月度数据(40 个月的广告费与销量)

▶️ 查看代码
#| echo: true
#| eval: false

set.seed(2026)
ad_noise <- round(rnorm(40, 0, 3.5), 1)   # 随机波动:±3.5 万件量级
ad_data <- data.frame(
    月份   = 1:40,
    广告费 = round(runif(40, 8, 60), 1)
  ) %>%
  mutate(销量 = round(6 + 0.8 * 广告费 -
                        0.004 * pmax(广告费 - 40, 0)^2 + ad_noise, 1)) %>%
  mutate(销量 = ifelse(广告费 == max(广告费), 销量 - 9, 销量),   # 供货中断
         销量 = ifelse(rank(广告费) == 6,      销量 + 10, 销量))  # 平台大促

ad_data %>% slice(1:6)
  月份 广告费 销量
1    1   14.4 29.3
2    2   57.5 47.0
3    3   48.6 45.1
4    4   58.0 50.8
5    5   13.9 14.8
6    6   58.8 33.8

注记

  • 问题:广告费越多,销量越高吗?**高多少?
  • 这是两个数值型变量的关系,第一反应应该是——画散点图**。

3.2 第一步:画散点图,三看法读关系

3.3 第二步:警惕假相关—— 相关 ≠ 因果

警告

统计只能说"二者是否相关",不能说"x 导致了y"。\(r\) 即使相关系数高达 0.779,二者可能只是同一个原因(旺季)造成的同升同降——虚假相关。建模前先问:业务逻辑讲得通吗?

3.4 逻辑关系讲得通,建模才有意义

广告费增加 → 客户更了解产品 → 产品知名度、影响力扩大 → 促进销售,收入上升。

提示

结论:广告费与销量讲得通,图形近似直线——这时用线性回归去量化它,才站得住脚。

注记

逻辑关系让我们放心去量化,但回归数字本身不能证明因果。

Part 4:简单线性回归模型与 lm()

把"关系"写成一条可以计算的直线

4.1 模型的形式

\[y = \underbrace{\beta_0}_{\text{截距}} + \underbrace{\beta_1}_{\text{斜率}} x + \underbrace{\varepsilon}_{\text{误差项}}\]

符号 名称 含义 本例
\(y\) 因变量 想解释/预测的量 销量(万件)
\(x\) 自变量 用来解释的量 广告费(万元)
\(\beta_0\) 截距 \(x=0\) 时 \(y\) 的水平 基础销量
\(\beta_1\) 斜率 \(x\) 增 1,\(y\) 平均变化 每万元广告的平均增量
\(\varepsilon\) 误差项 模型解释不了的波动 季节、促销、偶发

回归的目标:用观测数据估计 \(\hat{\beta}_0\)、\(\hat{\beta}_1\),写出 \(\hat{y} = \hat{\beta}_0 + \hat{\beta}_1 x\),就能预测销量。

4.2 最小二乘法:让残差平方和 RSS 最小

直线有无数条,R 为什么选那一条?

提示

残差 \(e_i = y_i - \hat{y}_i\);OLS 让 \(\sum e_i^2\) 最小。不用手算,lm() 自动完成。

4.3 R 的实现:lm() 一行搞定

▶️ 查看代码
# 用广告费解释销量:y 在 ~ 左边,x 在 ~ 右边
ad_model <- lm(销量 ~ 广告费, data = ad_data)

coef(ad_model)    # 直接取出两个估计值
(Intercept)      广告费 
      9.878       0.671 

提示

建议暂停视频,跟敲一遍:把上面三行敲进 RStudio——不要复制粘贴,~ 的位置、data = 的参数名都要过一遍手。coef() 吐出的两个数字,就是从数据里估出的规律。

注记

y ~ x 读作"y 由 x 解释"。lm() 背后就是 4.2 节的最小二乘;模型对象里装着系数、拟合值、残差,后续 summary()、predict() 都对着它操作。

Part 5:读懂 summary() 的结果

五组数字,一个故事

5.1 一行代码,全部输出

▶️ 查看代码
summary(ad_model)

Call:
lm(formula = 销量 ~ 广告费, data = ad_data)

Residuals:
    Min      1Q  Median      3Q     Max 
-15.522  -1.531   0.299   2.186   9.762 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   9.8779     1.6477     6.0  5.8e-07 ***
广告费        0.6708     0.0456    14.7  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.5 on 38 degrees of freedom
Multiple R-squared:  0.851, Adjusted R-squared:  0.847 
F-statistic:  217 on 1 and 38 DF,  p-value: <2e-16

提示

输出从上到下五段:Call(公式)、Residuals(残差分布)、Coefficients(系数表)、R² 与 F(整体质量)。今天重点读系数表和最后两行。

5.2 逐行解读:系数表

输出列 含义 本例
Estimate 系数估计值 截距 9.88、斜率 0.67
Std. Error 标准误(不确定性) 0.046
t value 离 0 有几个标准误 14.7
Pr(>|t|) 真无关时的概率 < 2e-16 → 极显著
*** 显著性星号 三颗 = p < 0.001

斜率的读法:广告费每多投 1 万元,销量平均多 0.67 万件。

重要

统计显著 ≠ 实际重要:p 值管"可信吗",效应大小看 Estimate。

5.3 逐行解读:R²(决定系数)~ 模型能够解释的部分

Residual standard error: 4.5 on 38 degrees of freedom
Multiple R-squared:  0.851

\[R^2 = 1 - \frac{\text{SS}_\text{Residual}}{\text{SS}_\text{Total}}\]

广告费解释了销量 85.1% 的波动,剩下约 15% 由季节、促销、偶发事件决定。

注记

R² = 0.851 算高还是算低? 没有统一标准。

5.4 逐行解读:F 检验~整个模型是否显著

F-statistic: 217 on 1 and 38 DF    p-value: < 2e-16

F 检验回答的是另一个问题:整个模型有没有预测价值?p < 0.05 → 模型整体显著,这条线不是"碰巧画出来的"。

注记

一元回归里 F 检验的 p 值与斜率 t 检验相同;多元回归时分工不同:F 看整体,t 看单个系数。

5.5 用一张图记住所有数字

5.6 回到业务问题:找到规律,预测就是代入

下个月广告费 45 万,销量大概多少? 找到规律以后,这类问题就退回成了初中数学——把新值代进回归方程即可:

\[\hat{y} = 9.88 + 0.67 \times 45 \approx 40.1\ \text{万件}\]

提示

代入法谁都会,初中生就能完成。但数据量一大就不行了:几十个月的历史值要逐一回算、换个方案再算一遍——手算费时,还容易出错。这种重复劳动,交给 R 的 predict() 函数,一次算完:

▶️ 查看代码
# 构造"新数据",列名必须和建模时的自变量名一致
new_ad <- data.frame(广告费 = c(30, 40, 45))

predict(ad_model, newdata = new_ad)    # 一次算出三个方案的预测销量
   1    2    3 
30.0 36.7 40.1 
  • 截距 9.9 万件 → 自然销量:不投广告也有的基本盘
  • 斜率 0.67 → 每一万元广告的平均贡献,可换算 ROI
  • 注意:这只是平均效应,不是承诺;最高 59 万元已接近边界,不要外推

Part 6:小结与项目五预告

本讲只解决了一个问题

6.1 本讲小结

  1. 回归是"反过来的"一次函数:从观测值估计截距与斜率
  2. "回归"得名于高尔顿(1886);今天泛指"用 x 解释 y"
  3. 先看图,再讲逻辑:三看方向形状强弱,警惕假相关
  4. 建模四步:散点图 → lm() → summary() → predict()
  5. 五组数字:Estimate 多大、t/p 可信吗、R² 解释多少、F 整体靠谱吗

6.2 项目五后面的课程

  • 第20讲:模型评估与诊断 —— 残差图、正态性:这条线靠谱吗?
  • 第21讲:多元线性回归 —— 引入价格、季节等多个 \(x\)
  • 第22讲:虚拟变量 —— 分类变量(是否促销)怎么进模型?
  • 第23讲:对数变换 —— 变量不是直线怎么办?

提示

  • 把"一条线 + 一份 summary"吃透,后面每讲都只是在这条线上加东西。

翻转课堂作业

本讲的练习,就在这两个作业里——课堂上演示评比

小组任务:两个"自己找变量"的回归

  • 第一小组:mtcars(32 辆车)—— 找一个数值型变量解释油耗 mpg
  • 第二小组:wage2(wooldridge,935 人)—— 找一个数值型变量解释 wage
▶️ 查看代码
str(mtcars)                     # 第一小组:先看清每个变量是什么
install.packages("wooldridge")  # 第二小组:机房没装过这个包就先装上
library(wooldridge)
data(wage2); str(wage2)         # educ / exper / age / IQ / hours

注记

高阶要求:不给提示变量,自己挑选;⚠️ 不要用分类变量。只问三件事:讲得通、跑得出、读得对。

课堂演示(每组约 10 分钟,推举 1 人上台)

  1. 变量选择的原因 —— 业务逻辑讲得通吗?如何排除假相关?
  2. 代码实现 —— 散点图 → lm() → summary(),完整走一遍
  3. 回归结果与模型显著性 —— 斜率含义、p 值、R²、F 检验逐项说明

台下点评(约 5 分钟,4 问由 4 名不同同学回答)

  1. 寻找的变量是否成立?
  2. 代码是否正确、可否优化?
  3. 结果解释是否正确、是否回答了问题?
  4. 最关键:能否换别的变量解释油耗 / 工资?至少说一种

重要

评分导向:考核的不是"算得对不对",而是能不能用统计语言把一个业务问题讲清楚。其他同学可补充。

谢谢!

第19讲:简单线性回归模型 —— 项目五开篇

"All models are wrong, but some are useful." —— George Box

朱 奇 | 锦城大学 · 财会学院