跳到主要内容

多元线性回归

一、直观理解:把结果写成各自变量效应的加权和​

多元线性回归假设:

y=β0+β1x1+⋯+βpxp+εy=\beta_0+\beta_1 x_1+\cdots+\beta_p x_p+\varepsilon

在其他变量保持不变时,βj\beta_j 表示 xjx_j 增加一个单位,yy 的平均变化。它是建模竞赛中最重要的可解释基线:先看线性关系能走多远,再决定是否上非线性、正则化或机器学习。

“线性”指的是对参数 β\beta 线性,因此 xx、x2x^2、log⁡x\log x、交互项 x1x2x_1x_2 都可以作为回归元,模型仍可用 fitlm 估计。

二、适用场景与优缺点​

类型说明
适用场景连续响应;效应近似可加线性;需要系数解释与区间;变量数不太多于样本;作为一切复杂模型的对照。
核心优点估计快、理论成熟;系数有直接解释;诊断工具丰富(残差、VIF、杠杆、Cook 距离);便于写进论文机理段。
局限与缺点真实关系强非线性时偏差大;共线导致系数不稳;对异常点敏感;高维 p≈np\approx n 时需正则/降维;时间数据若忽略自相关会低估标准误。

三、核心原理​

1. 最小二乘​

β^=(X⊤X)−1X⊤y\hat{\boldsymbol{\beta}}=(X^\top X)^{-1}X^\top\mathbf{y}

要求 XX 满列秩。高斯–马尔可夫条件下 OLS 是最佳线性无偏估计;若再假设正态误差,可得 tt/FF 推断。

2. 关键假设与对应检查​

假设检查
线性可加残差 vs 拟合值、分量加性图
误差独立同分布残差序列图、Durbin–Watson、ACF
方差齐性残差扇形图、BP 检验
无严重共线相关阵、VIF
影响点可控杠杆、Cook's D、学生化残差

3. 拟合优度不是终点​

R2=1−SSresSStot,Radj2=1−SSres/(n−p−1)SStot/(n−1)R^2=1-\frac{\mathrm{SS}_{res}}{\mathrm{SS}_{tot}},\quad R^2_{\mathrm{adj}}=1-\frac{\mathrm{SS}_{res}/(n-p-1)}{\mathrm{SS}_{tot}/(n-1)}

R2R^2 随变量增多不减,但预测能力可能下降。必须用训练/测试或交叉验证的 RMSE/MAE。时间序列回归还要用时间外推验证。

四、变量处理与模型选择​

  1. 先机理筛选,再统计筛选;
  2. 标准化后比较系数大小(解释时还原单位);
  3. 类别变量用哑变量,注意参照水平;
  4. 可用逐步回归/信息准则,但更推荐交叉验证;
  5. 共线严重时:删变量、合并、主成分回归、岭回归、PLS;
  6. 存在自相关时:加滞后项或改用时间序列模型,不能假装 i.i.d.。

五、MATLAB 示例​

%% 模拟并拟合多元线性回归
rng(4);
n = 200;
X1 = randn(n,1);
X2 = 0.7*X1 + 0.3*randn(n,1); % 与 X1 相关
X3 = randn(n,1);
y = 2 + 1.5*X1 - 0.8*X2 + 0.5*X3 + 0.7*randn(n,1);
tbl = table(X1,X2,X3,y);

% 时间/样本顺序划分(若是截面可用 cvpartition)
T0 = 150;
tr = 1:T0; te = T0+1:n;

mdl = fitlm(tbl(tr,:), "y ~ X1 + X2 + X3");
disp(mdl);

% VIF(共线)
% 简单实现:对每个 Xj 关于其余 X 回归
predictors = tbl{tr,1:3};
vif = zeros(1,3);
for j = 1:3
Z = predictors; yj = Z(:,j); Z(:,j) = [];
mj = fitlm(Z, yj);
vif(j) = 1/(1 - mj.Rsquared.Ordinary);
end
disp("VIF:"); disp(vif);

% 诊断图
figure; plotResiduals(mdl, "fitted");
figure; plotResiduals(mdl, "probability");
figure; plotDiagnostics(mdl, "cookd");

% 训练期外预测
yhat = predict(mdl, tbl(te,:));
rmse = sqrt(mean((tbl.y(te) - yhat).^2));
mae = mean(abs(tbl.y(te) - yhat));
r2_te = 1 - sum((tbl.y(te)-yhat).^2)/sum((tbl.y(te)-mean(tbl.y(te))).^2);
fprintf("测试 RMSE=%.4f MAE=%.4f R2=%.4f\n", rmse, mae, r2_te);
fprintf("训练 R2=%.4f (勿只报这个)\n", mdl.Rsquared.Ordinary);

% 与截距均值基线比较
rmse0 = sqrt(mean((tbl.y(te) - mean(tbl.y(tr))).^2));
fprintf("均值基线 RMSE=%.4f\n", rmse0);

若误差疑似异方差,可报告稳健标准误,或对 yy 变换;若是时间序列,检查:

res = mdl.Residuals.Raw;
figure; autocorr(res);

六、如何解释结果​

完整报告:

  1. 模型公式与变量含义/单位;
  2. 样本划分方式;
  3. 系数表:估计、标准误、p 值、置信区间;
  4. 调整 R2R^2、F 检验(仅辅助);
  5. 测试集 RMSE/MAE 与基线对比;
  6. VIF 与残差诊断结论;
  7. 系数解释是否符合机理,哪些不显著/符号异常;
  8. 局限:遗漏变量、测量误差、外推范围。

解释 β\beta 时必须加“在控制其他变量的条件下”,并说明只在样本取值范围内较可信。

七、常见误区​

1. 只报训练 R2R^2 很高​

这是预测题最大雷区。没有样本外误差等于没做预测。

2. 逐步回归海选后当因果​

多重检验与选择偏差会使 p 值失真。

3. 忽视共线却大谈“某变量影响最大”​

VIF 高时系数解释不稳定,应谈联合贡献或改用正则/PLS。

4. 类别变量当连续数字​

必须哑变量化。

5. 时间序列回归不做残差自相关检查​

标准误会骗人,预测也不是最优。

八、小结​

多元线性回归的核心是:

用可解释的线性参数结构建立预测基线,并以诊断与样本外误差决定是否够用。

它应该是大多数预测题的第一张牌。写论文时,把系数解释、假设诊断和训练期外指标写全,再说明为何需要(或不需要)更复杂的模型。记住:模型价值由外推误差决定,不是由 R2R^2 单独决定。