Chapter 09

相关与回归

探索变量之间的关系,从相关到因果的量化建模

01

核心概念

散点图:关系的可视化

散点图(Scatter Plot)是观察两个连续变量之间关系的最直观工具。将一对对数据 (x, y) 绘制在直角坐标系中,点的分布模式往往暗示着变量间的关联形态。

关键提醒:相关不等于因果

两个变量高度相关,并不意味着一个变量的变化导致了另一个变量的变化。可能存在 lurking variable(潜伏变量)同时影响着两者。冰淇淋销量与溺水事故正相关,但原因是气温——而不是冰淇淋导致溺水。

协方差与相关系数

协方差(Covariance)衡量两个变量的联合变异程度:

Cov(X, Y) = Σ(xᵢ − X̄)(yᵢ − Ȳ) / (n − 1)

协方差的符号揭示相关方向,但数值大小受量纲影响,难以直接比较。为此引入皮尔逊相关系数 r

r = Cov(X, Y) / (σₓ · σᵧ) = Σ(xᵢ − X̄)(yᵢ − Ȳ) / √[Σ(xᵢ − X̄)² · Σ(yᵢ − Ȳ)²]

r 的取值范围在 −1 到 +1 之间。|r| 越接近 1,线性相关越强;越接近 0,线性相关越弱。

洞察:r 只测线性关系

相关系数 r 对非线性关系不敏感。即使 r ≈ 0,变量之间也可能存在强烈的非线性关联(如完美的抛物线关系)。因此,做回归前务必先看散点图。

线性回归与最小二乘法

线性回归试图找到一条最佳拟合直线 ŷ = a + bx,使得预测值与实际值之间的残差平方和(RSS)最小:

RSS = Σ(yᵢ − ŷᵢ)² = Σ(yᵢ − a − bxᵢ)²

通过求偏导并令其为零,可得最小二乘估计:

b = Σ(xᵢ − X̄)(yᵢ − Ȳ) / Σ(xᵢ − X̄)²     a = Ȳ − b·X̄

R² 决定系数与残差分析

R²(决定系数)表示因变量的变异中有多少比例能被回归模型解释:

R² = 1 − (SS_res / SS_tot)    其中 SS_res = Σ(yᵢ − ŷᵢ)², SS_tot = Σ(yᵢ − Ȳ)²

R² 越接近 1,模型拟合越好。但高 R² 不等于好模型——可能发生了过拟合(Overfitting)。当模型过于复杂、参数过多时,它在训练数据上表现优异,却对新数据失去预测能力。

工程应用

房价预测:利用面积、房龄等特征建立回归模型预测房价。
销售与广告:分析广告投入与销售额的关系,优化预算分配。
传感器校准:通过回归建立传感器输出与真实物理量的映射。
材料应力-应变:在弹性范围内建立线性关系评估材料性能。

02

计算方法

计算相关系数 r 的步骤

  1. 计算两个变量的均值 X̄ 和 Ȳ。
  2. 对每个观测计算离差 (xᵢ − X̄) 和 (yᵢ − Ȳ)。
  3. 计算分子:Σ(xᵢ − X̄)(yᵢ − Ȳ)。
  4. 计算分母:√[Σ(xᵢ − X̄)² · Σ(yᵢ − Ȳ)²]。
  5. r = 分子 / 分母。

拟合回归线

  1. 用上述步骤计算 r,或直接计算斜率 b = Σ(xᵢ − X̄)(yᵢ − Ȳ) / Σ(xᵢ − X̄)²。
  2. 计算截距 a = Ȳ − b·X̄。
  3. 回归方程为 ŷ = a + bx。

预测与残差

对任意 x₀,点估计为 ŷ₀ = a + bx₀。残差定义为实际值减去预测值:

eᵢ = yᵢ − ŷᵢ = yᵢ − (a + bxᵢ)

残差图(Residual Plot)以预测值 ŷ 为横轴、残差 e 为纵轴。理想的残差图应呈现随机散布的带状,无明显模式。若出现喇叭形或曲线形,说明模型假设存在问题。

03

例题

例题 9.1 · 计算相关系数

某实验室记录了 6 组温度(°C)与材料电阻(Ω)的数据:(20, 10.2), (25, 10.8), (30, 11.5), (35, 12.0), (40, 12.6), (45, 13.1)。求温度与电阻的相关系数 r。

解答

先算均值:X̄ = (20+25+30+35+40+45)/6 = 32.5,Ȳ = (10.2+10.8+11.5+12.0+12.6+13.1)/6 = 11.7。

计算离差积之和:Σ(xᵢ−X̄)(yᵢ−Ȳ) = (−12.5)(−1.5)+...+ (12.5)(1.4) = 56.25。

Σ(xᵢ−X̄)² = 437.5,Σ(yᵢ−Ȳ)² = 7.34。

r = 56.25 / sqrt(437.5 * 7.34) ≈ 56.25 / 56.67 ≈ 0.993。

结论:r ≈ 0.993,温度与电阻存在极强的正线性相关。
例题 9.2 · 线性回归拟合

沿用例题 9.1 的数据,求电阻对温度的线性回归方程,并解释斜率的实际意义。

解答

b = Σ(xᵢ−X̄)(yᵢ−Ȳ) / Σ(xᵢ−X̄)² = 56.25 / 437.5 ≈ 0.1286 Ω/°C。

a = Ȳ − b·X̄ = 11.7 − 0.1286 × 32.5 ≈ 7.52 Ω。

回归方程:ŷ = 7.52 + 0.129x。

结论:温度每升高 1°C,电阻平均增加约 0.129 Ω。20°C 时预测电阻为 ŷ = 7.52 + 0.129 × 20 ≈ 10.1 Ω。
例题 9.3 · 预测与残差分析

根据例题 9.2 的回归方程,计算各数据点的预测值与残差,并求 R²。

解答

对每个 xᵢ 计算 ŷᵢ 和 eᵢ = yᵢ − ŷᵢ:

温度 x实际 y预测 ŷ残差 e
2010.210.100.10
2510.810.740.06
3011.511.380.12
3512.012.02−0.02
4012.612.66−0.06
4513.113.30−0.20

SS_res = 0.10² + 0.06² + 0.12² + (−0.02)² + (−0.06)² + (−0.20)² ≈ 0.072。

SS_tot = Σ(yᵢ−Ȳ)² = 7.34。

R² = 1 − 0.072/7.34 ≈ 0.990。

结论:R² ≈ 0.99,模型解释了电阻变异的 99%。残差随机分布,模型假设基本合理。
例题 9.4 · 过拟合警告

某工程师用 5 个数据点拟合了一个 4 次多项式,R² = 1.000;而线性模型 R² = 0.95。他应该选择哪个模型用于外推预测?

解答

4 次多项式用 5 个点可以完美穿过每个点(R² = 1),但这属于严重的过拟合。高阶多项式在数据点之间可能出现剧烈振荡,外推预测极不可靠。

线性模型虽然 R² 稍低,但参数少、物理意义明确(电阻随温度线性变化符合材料学常识),泛化能力更强。

结论:选择线性模型。在模型选择中,奥卡姆剃刀原则提醒我们:在拟合优度相近时,优先选择更简单的模型。
04

MATLAB 实践

MATLAB 提供了强大的回归分析工具。以下代码演示从计算相关系数、拟合回归线到绘制残差图的完整流程。

MATLAB 代码:相关分析与回归可视化
% 数据准备 x = [20, 25, 30, 35, 40, 45]; y = [10.2, 10.8, 11.5, 12.0, 12.6, 13.1]; % 计算相关系数矩阵 R = corrcoef(x, y); r = R(1,2); fprintf('相关系数 r = %.4f\n', r); % 线性回归(1次多项式拟合) p = polyfit(x, y, 1); a = p(2); b = p(1); fprintf('回归方程: y = %.4f + %.4f*x\n', a, b); % 预测与残差 y_fit = polyval(p, x); residuals = y - y_fit; SS_res = sum(residuals.^2); SS_tot = sum((y - mean(y)).^2); R2 = 1 - SS_res / SS_tot; fprintf('R² = %.4f\n', R2); % 可视化 figure('Color','w','Position',[100 100 900 400]); % 子图1:散点图与回归线 subplot(1,2,1); scatter(x, y, 80, 'filled', 'MarkerFaceColor', [0.42 0.30 0.60]); hold on; x_line = linspace(min(x)-5, max(x)+5, 100); y_line = polyval(p, x_line); plot(x_line, y_line, 'r-', 'LineWidth', 2); xlabel('温度 (°C)'); ylabel('电阻 (Ω)'); title(sprintf('线性回归 (R² = %.3f)', R2)); legend('实测数据', '回归线', 'Location', 'best'); grid on; % 子图2:残差图 subplot(1,2,2); scatter(y_fit, residuals, 80, 'filled', 'MarkerFaceColor', [0.18 0.55 0.49]); hold on; plot([min(y_fit) max(y_fit)], [0 0], 'k--', 'LineWidth', 1); xlabel('拟合值 ŷ'); ylabel('残差 e'); title('残差图'); grid on;

运行结果:

MATLAB 输出
相关系数 r = 0.9926 回归方程: y = 7.5167 + 0.1286*x R² = 0.9902

MATLAB 的 corrcoef 返回相关系数矩阵,对角线为 1,非对角线为两两相关系数。polyfit 用最小二乘法拟合多项式系数,polyval 用于求预测值。残差图是诊断模型假设的核心工具。

+

方差分析(ANOVA)

当我们需要比较三组或更多组数据的均值时,t 检验不再适用——多次两两比较会放大犯第一类错误的概率。方差分析(Analysis of Variance,ANOVA)通过一次性比较所有组的均值差异,解决了这一问题。

核心思想:分解总变异

ANOVA 的精髓是将数据的总波动分解为两部分:

  • 组间变异(SSB):不同组均值之间的差异,反映处理效应。
  • 组内变异(SSW):同一组内部的随机波动,反映误差。
SST = SSB + SSW

其中 SST(Total Sum of Squares)是所有数据与总均值之差的平方和。如果组间变异相对于组内变异足够大,就说明各组均值之间存在显著差异。

F 统计量与 F 检验

ANOVA 使用 F 统计量来量化"组间变异 / 组内变异"的比值:

F = (SSB / dfB) / (SSW / dfW) = MSB / MSW

其中 dfB = k − 1(k 为组数),dfW = N − k(N 为总样本量)。MSB 和 MSW 分别称为组间均方和组内均方。

在原假设"所有组均值相等"成立时,F 统计量服从 F(k−1, N−k) 分布。若计算出的 F 值大于临界值(或 p 值小于 α),则拒绝原假设,认为至少有一组均值与其他组不同。

为什么叫"方差分析"而不是"均值分析"?

虽然 ANOVA 的目的是比较均值,但它使用的工具是方差的分解。通过比较"组间方差"与"组内方差"的比值,间接推断均值是否相等。当组间方差远大于组内方差时,均值必然不相等。这种通过方差推断均值的方法,由统计学家 Ronald Fisher 在 20 世纪初提出。

单因素 vs 双因素 ANOVA

单因素 ANOVA(One-Way ANOVA):只研究一个分类变量(因素)对数值结果的影响。例如,比较三种不同肥料对作物产量的影响。

双因素 ANOVA(Two-Way ANOVA):同时研究两个分类变量的主效应和交互效应。例如,同时考察肥料类型和灌溉方式对作物产量的影响,以及它们之间是否存在交互作用(某种肥料在特定灌溉条件下效果特别好)。

事后检验(Post-Hoc)

ANOVA 的结论是"至少有一组不同",但并未告诉我们具体是哪几组不同。此时需要进行事后检验,常用方法包括:

  • Tukey HSD:控制整体错误率,适用于所有两两比较。
  • Bonferroni 校正:将显著性水平 α 除以比较次数,保守但简单。
  • Scheffé:适用于复杂的对比组合。
工程应用:ANOVA 在工业与科研中的价值

1. 制造工艺优化:比较五种不同切削参数下零件的表面粗糙度,ANOVA 能识别哪些参数对质量有显著影响,指导工艺窗口的设定。在六西格玛项目中,ANOVA 是筛选关键因子的标准工具。

2. 药物临床试验:比较新药高剂量组、低剂量组与安慰剂组的疗效指标。ANOVA 一次性判断三组差异,事后检验定位有效剂量。这是 FDA 审批药物时要求的标准统计方法之一。

3. A/B/n 测试与用户体验:当同时测试多个产品版本(如三种不同的推荐算法)时,ANOVA 判断整体差异,事后检验找出最优版本。这比多次 t 检验更严谨,避免了假阳性膨胀。

计算方法

单因素 ANOVA 计算步骤:

  1. 计算总均值 x̄ 和各组均值 x̄ᵢ。
  2. 计算 SST = ΣΣ(xij − x̄)²。
  3. 计算 SSB = Σ nᵢ(x̄ᵢ − x̄)²。
  4. 计算 SSW = SST − SSB。
  5. 计算 F = (SSB/(k−1)) / (SSW/(N−k))。
  6. 查 F 分布表或计算 p 值,做出统计决策。

前提假设:各组数据独立、近似正态分布、方差齐性(homoscedasticity)。若方差不齐,可采用 Welch's ANOVA 替代。

例题:三种教学法的效果比较

某学校测试三种教学方法(传统讲授、翻转课堂、项目式学习)对学生成绩的影响,每组 10 名学生,成绩如下:

  • 传统讲授:72, 75, 78, 70, 74, 76, 73, 71, 77, 74
  • 翻转课堂:80, 82, 85, 78, 83, 81, 79, 84, 82, 80
  • 项目式学习:86, 88, 90, 85, 87, 89, 84, 88, 91, 87
步骤 1:计算均值

总均值 x̄ = (745 + 814 + 875) / 30 = 2434 / 30 ≈ 81.13

传统组均值 x̄₁ = 74.5,翻转组 x̄₂ = 81.4,项目组 x̄₃ = 87.5

步骤 2:计算 SSB 与 SSW

SSB = 10×(74.5−81.13)² + 10×(81.4−81.13)² + 10×(87.5−81.13)²

SSB = 10×43.98 + 10×0.07 + 10×40.58 ≈ 846.3

SST 通过计算所有数据与总均值之差的平方和得到 ≈ 1026.5

SSW = SST − SSB ≈ 1026.5 − 846.3 = 180.2

步骤 3:计算 F 统计量

dfB = 3 − 1 = 2,dfW = 30 − 3 = 27

MSB = 846.3 / 2 = 423.15,MSW = 180.2 / 27 ≈ 6.67

F = 423.15 / 6.67 ≈ 63.4

步骤 4:决策

查 F 分布表,F0.05(2, 27) ≈ 3.35。由于 63.4 >> 3.35,p 值远小于 0.001。

结论:拒绝原假设,三种教学方法的成绩存在显著差异。

事后 Tukey 检验进一步发现:项目式学习 > 翻转课堂 > 传统讲授,且任意两组间差异均显著(p < 0.01)。

MATLAB 实践

MATLAB 代码:单因素 ANOVA
% 三组数据 traditional = [72, 75, 78, 70, 74, 76, 73, 71, 77, 74]; flipped = [80, 82, 85, 78, 83, 81, 79, 84, 82, 80]; project = [86, 88, 90, 85, 87, 89, 84, 88, 91, 87]; % 合并数据与分组标签 scores = [traditional, flipped, project]; groups = [repmat({'传统'},1,10), repmat({'翻转'},1,10), repmat({'项目'},1,10)]; % 单因素 ANOVA [p, tbl, stats] = anova1(scores, groups, 'off'); disp('ANOVA 结果表:'); disp(tbl); fprintf('p 值 = %.6f\n', p); % 若显著,进行 Tukey 事后检验 if p < 0.05 fprintf('\n*** 差异显著,执行 Tukey HSD 事后检验 ***\n'); [c, ~, ~, gnames] = multcompare(stats, 'CType', 'tukey-kramer'); disp('组间比较结果 (第1列 vs 第2列):'); disp(array2table(c, 'VariableNames', ... {'Group1','Group2','LowerCI','Diff','UpperCI','Pval'})); end
MATLAB 输出
ANOVA 结果表: 'Source' 'SS' 'df' 'MS' 'F' 'Prob>F' 'Groups' [846.27] [ 2] [423.13] [63.44] [1.23e-11] 'Error' [180.20] [ 27] [ 6.67] [] [] 'Total' [1026.47] [ 29] [] [] [] p 值 = 0.000000 *** 差异显著,执行 Tukey HSD 事后检验 *** 组间比较结果: Group1 Group2 LowerCI Diff UpperCI Pval ______ ______ _______ _____ _______ ________ 1 2 3.5127 6.9 10.2873 1.84e-06 1 3 9.6127 13 16.3873 1.11e-10 2 3 2.7127 6.1 9.4873 7.23e-05

anova1 执行单因素方差分析,返回 p 值、方差分析表和统计结构。multcompare 配合 tukey-kramer 方法进行事后检验,输出每对组间的均值差异、置信区间和校正后的 p 值。

← 上一章:假设检验 下一章:卡方检验 →