跳到主要内容

逐步回归

一、直观理解:在候选变量清单上反复试穿​

逐步回归(Stepwise Regression)是一种自动筛选自变量的线性建模策略:从某个初始模型出发,按既定统计准则逐步加入或删除变量,直到不能再改进为止。

可以把它想象成整理行李箱:

  • 面前有一堆可能有用的衣物(候选变量);
  • 你不会把所有东西都塞进去(全模型可能过拟合、共线、难解释);
  • 也不会只带一件(欠拟合);
  • 于是采用规则:哪件对“旅行目标”提升最大就放进箱,哪件放进去后变得多余就拿出来。

与 PCA 不同,逐步回归的目标通常是保留原始变量含义的精简回归式,属于特征筛选,而不是特征提取。最终模型里的 xjx_j 仍是原来的 xjx_j,并不是主成分那种线性组合。

常见三种搜索方向:

  • 前向选择(forward):从只有截距开始,每次加入最有帮助的变量;
  • 后向剔除(backward):从全模型开始,每次删掉最不必要的变量;
  • 双向逐步(stepwise):加入与删除交替进行。

二、适用场景与优缺点​

类型说明
适用场景候选解释变量较多,需要可解释的线性/广义线性基线;希望在相关变量中得到较精简的子集;教学与竞赛中快速建立对照模型。
核心优点产出仍是原始变量,便于写机理与政策含义;计算相对直接;可与 AIC/BIC 等准则结合。
局限与缺点变量集合不稳定,数据轻微扰动就可能换一批入选变量;pp 值在多次搜索后不再保持名义意义;不能证明因果;高维 p≈np\approx n 或 p>np>n 时不可靠,更宜用正则化。

使用前检查:

  1. 确认问题适合线性(或可线性化/GLM)结构;
  2. 先处理缺失、明显共线与泄漏变量(如用未来信息构造的特征);
  3. 预先划定候选变量集合,禁止把目标编码泄漏列混入;
  4. 明确选择准则(AIC、BIC、SSE、pp 值阈值等)并固定;
  5. 准备独立验证:选择与评估不能全程共用同一份数据。

若目标是预测精度且可牺牲解释性,Lasso/Elastic Net、树模型可能更稳;若目标是可解释线性基线,逐步回归仍有位置,但结论表述必须克制。

三、核心原理:在模型子集上优化准则​

考虑线性模型

y=Xβ+ε,ε∼(0,σ2I)y=X\beta+\varepsilon,\qquad \varepsilon\sim (0,\sigma^2 I)

全子集回归要在 2p2^p 个子集中搜索,变量稍多就不可行。逐步回归用贪心策略近似这一搜索。

1. 以 AIC 为例的前向一步​

对当前模型 MM,考察每个尚未入选的变量 xjx_j,拟合 M∪{xj}M\cup\{x_j\},计算

AIC=nln⁡(σ^2)+2k\mathrm{AIC}=n\ln\big(\widehat{\sigma}^2\big)+2k

(具体常数项因实现而异,比较时一致即可。)其中 kk 为参数个数。选择使 AIC 下降最多的 xjx_j 加入;若没有任何加入能改进准则,则停止。

BIC 将惩罚项换成 kln⁡nk\ln n,通常比 AIC 更倾向稀疏模型。

2. 基于 pp 值的进出​

传统做法设定:

  • 进入阈值 αin\alpha_{\mathrm{in}}(如 0.05):偏 FF 检验显著则加入;
  • 剔除阈值 αout\alpha_{\mathrm{out}}(如 0.10):变得不显著则删除。

这类规则直观,但在多次检验下会膨胀第一类错误,现代更推荐信息准则 + 样本外验证。

3. 双向逐步​

每一轮可能:

  1. 尝试加入使准则最优的变量;
  2. 再检查是否有已在模型中的变量变得多余并剔除;
  3. 重复直至稳定。

需要注意:逐步回归找到的是局部最优路径上的模型,不保证是全局最佳子集。

四、关键决策​

1. 候选集与上限模型​

在 MATLAB stepwiselm 中,Upper 控制搜索上界,例如:

  • "linear":只考虑主效应;
  • "interactions":允许二阶交互;
  • "purequadratic":主效应 + 平方项。

上界越大,过拟合风险越高。没有机理支持时,先从 "linear" 开始。

2. 准则选择​

准则更偏向
AIC预测,模型可稍复杂
BIC更稀疏,大样本惩罚强
调整 R2R^2解释方差,但未必利于预测
pp 值阈值传统报告,推断性质弱

3. 训练与验证隔离​

推荐流程:

  1. 切分训练/验证(或交叉验证);
  2. 仅在训练折内做逐步选择;
  3. 用验证折评估最终公式;
  4. 报告入选变量的稳定性(例如各折是否常出现)。

若在全数据上逐步选完变量,再在同一数据上报告 R2R^2 与 pp 值,预测能力会被高估。

4. 共线与标准化​

强共线时,哪个变量留下带有偶然性。可先算 VIF、合并同源指标,或改用岭回归/Lasso。变量量纲差异大时,虽不必须标准化,但标准化有助于数值稳定与正则化方法对照。

五、MATLAB 示例​

rng(4);
n = 80;
X = randn(n, 6);
% 真模型只依赖 x1, x3,其余为噪声变量
y = 2.0*X(:,1) - 1.2*X(:,3) + 0.4*randn(n,1);

tbl = array2table([X, y], ...
"VariableNames", {"x1","x2","x3","x4","x5","x6","y"});

% 划分训练 / 测试
idx = cvpartition(n, "HoldOut", 0.25);
trainTbl = tbl(training(idx), :);
testTbl = tbl(test(idx), :);

% 从截距模型出发,在线性主效应范围内按 AIC 逐步选择
mdl = stepwiselm(trainTbl, "y ~ 1", ...
"Upper", "linear", ...
"Criterion", "aic", ...
"Verbose", 1);

disp(mdl);
disp("入选变量:");
disp(mdl.PredictorNames);

% 测试集表现
yHat = predict(mdl, testTbl);
rmse = sqrt(mean((testTbl.y - yHat).^2));
fprintf("测试 RMSE = %.4f\n", rmse);

% 对照:全变量线性模型
mdlFull = fitlm(trainTbl, "y ~ x1+x2+x3+x4+x5+x6");
yHatFull = predict(mdlFull, testTbl);
rmseFull = sqrt(mean((testTbl.y - yHatFull).^2));
fprintf("全模型测试 RMSE = %.4f\n", rmseFull);

% 系数表
disp(mdl.Coefficients);

若怀疑存在交互,可把 Upper 改为 "interactions",但务必用测试误差约束复杂度。

六、如何解释结果​

逐步回归给出的是“在选定准则下的一个精简线性近似”,不是“真理变量清单”。

解释时建议:

  1. 先写最终模型公式与系数方向;
  2. 说明搜索方向、准则、Upper 范围;
  3. 报告训练过程中变量进入/剔除顺序(体现路径,不单给终点);
  4. 用验证指标对比全模型、领域先验模型;
  5. 对入选变量给出专业含义,但避免因果措辞;
  6. 若多折交叉验证中入选集合波动大,应明确说“稳定性不足”。

完整报告要素:候选变量、样本划分、准则、最终公式、拟合优度、样本外误差、共线检查、局限。

关于 pp 值:逐步之后的 pp 值受到选择过程污染,不能再当作预先指定假设检验的真实显著性。需要推断时,应使用选择后推断方法,或改为预注册变量集 + 单次估计。

七、常见误区​

1. 把入选变量当成因果因素​

数据关联可能来自混杂、反向因果或共同趋势。逐步回归没有识别假设,不能自动完成因果证明。

2. 同一份数据既做选择又做最终评价​

这会系统性高估 R2R^2、低估误差。至少留出测试集,或做嵌套交叉验证。

3. 忽视选择不确定性​

Bootstrap 重抽样后反复逐步,常看到入选集合“漂移”。若漂移严重,最终论文应弱化“唯一正确变量集”的叙述,改谈稳定出现的核心变量与预测表现。

4. 在 pp 很大时硬上逐步​

高维小样本下贪心搜索不稳定。优先 Lasso、弹性网、或先基于领域知识大幅度减维。

5. 只看训练集 AIC 最优​

AIC 仍是样本内准则的一种。最终以任务指标(预测误差、分类代价、业务约束)为准。

八、小结​

逐步回归的核心思想可以概括为:

在线性模型框架下,按信息准则或显著性规则贪心地增删变量,得到较精简且仍保持原始变量含义的回归式。

它适合作为可解释的特征筛选基线,也便于和全模型、正则化模型对照。但逐步结果对样本敏感,推断意义有限,更不能替代因果识别。规范用法是:预固定候选集与准则,训练内选择,训练外评估,并用稳定性与业务含义共同审查入选变量。