逐步回归
一、直观理解:在候选变量清单上反复试穿
逐步回归(Stepwise Regression)是一种自动筛选自变量的线性建模策略:从某个初始模型出发,按既定统计准则逐步加入或删除变量,直到不能再改进为止。
可以把它想象成整理行李箱:
- 面前有一堆可能有用的衣物(候选变量);
- 你不会把所有东西都塞进去(全模型可能过拟合、共线、难解释);
- 也不会只带一件(欠拟合);
- 于是采用规则:哪件对“旅行目标”提升最大就放进箱,哪件放进去后变得多余就拿出来。
与 PCA 不同,逐步回归的目标通常是保留原始变量含义的精简回归式,属于特征筛选,而不是特征提取。最终模型里的 仍是原来的 ,并不是主成分那种线性组合。
常见三种搜索方向:
- 前向选择(forward):从只有截距开始,每次加入最有帮助的变量;
- 后向剔除(backward):从全模型开始,每次删掉最不必要的变量;
- 双向逐步(stepwise):加入与删除交替进行。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 候选解释变量较多,需要可解释的线性/广义线性基线;希望在相关变量中得到较精简的子集;教学与竞赛中快速建立对照模型。 |
| 核心优点 | 产出仍是原始变量,便于写机理与政策含义;计算相对直接;可与 AIC/BIC 等准则结合。 |
| 局限与缺点 | 变量集合不稳定,数据轻微扰动就可能换一批入选变量; 值在多次搜索后不再保持名义意义;不能证明因果;高维 或 时不可靠,更宜用正则化。 |
使用前检查:
- 确认问题适合线性(或可线性化/GLM)结构;
- 先处理缺失、明显共线与泄漏变量(如用未来信息构造的特征);
- 预先划定候选变量集合,禁止把目标编码泄漏列混入;
- 明确选择准则(AIC、BIC、SSE、 值阈值等)并固定;
- 准备独立验证:选择与评估不能全程共用同一份数据。
若目标是预测精度且可牺牲解释性,Lasso/Elastic Net、树模型可能更稳;若目标是可解释线性基线,逐步回归仍有位置,但结论表述必须克制。
三、核心原理:在模型子集上优化准则
考虑线性模型
全子集回归要在 个子集中搜索,变量稍多就不可行。逐步回归用贪心策略近似这一搜索。
1. 以 AIC 为例的前向一步
对当前模型 ,考察每个尚未入选的变量 ,拟合 ,计算
(具体常数项因实现而异,比较时一致即可。)其中 为参数个数。选择使 AIC 下降最多的 加入;若没有任何加入能改进准则,则停止。
BIC 将惩罚项换成 ,通常比 AIC 更倾向稀疏模型。
2. 基于 值的进出
传统做法设定:
- 进入阈值 (如 0.05):偏 检验显著则加入;
- 剔除阈值 (如 0.10):变得不显著则删除。
这类规则直观,但在多次检验下会膨胀第一类错误,现代更推荐信息准则 + 样本外验证。
3. 双向逐步
每一轮可能:
- 尝试加入使准则最优的变量;
- 再检查是否有已在模型中的变量变得多余并剔除;
- 重复直至稳定。
需要注意:逐步回归找到的是局部最优路径上的模型,不保证是全局最佳子集。
四、关键决策
1. 候选集与上限模型
在 MATLAB stepwiselm 中,Upper 控制搜索上界,例如:
"linear":只考虑主效应;"interactions":允许二阶交互;"purequadratic":主效应 + 平方项。
上界越大,过拟合风险越高。没有机理支持时,先从 "linear" 开始。
2. 准则选择
| 准则 | 更偏向 |
|---|---|
| AIC | 预测,模型可稍复杂 |
| BIC | 更稀疏,大样本惩罚强 |
| 调整 | 解释方差,但未必利于预测 |
| 值阈值 | 传统报告,推断性质弱 |
3. 训练与验证隔离
推荐流程:
- 切分训练/验证(或交叉验证);
- 仅在训练折内做逐步选择;
- 用验证折评估最终公式;
- 报告入选变量的稳定性(例如各折是否常出现)。
若在全数据上逐步选完变量,再在同一数据上报告 与 值,预测能力会被高估。
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",但务必用测试误差约束复杂度。
六、如何解释结果
逐步回归给出的是“在选定准则下的一个精简线性近似”,不是“真理变量清单”。
解释时建议:
- 先写最终模型公式与系数方向;
- 说明搜索方向、准则、
Upper范围; - 报告训练过程中变量进入/剔除顺序(体现路径,不单给终点);
- 用验证指标对比全模型、领域先验模型;
- 对入选变量给出专业含义,但避免因果措辞;
- 若多折交叉验证中入选集合波动大,应明确说“稳定性不足”。
完整报告要素:候选变量、样本划分、准则、最终公式、拟合优度、样本外误差、共线检查、局限。
关于 值:逐步之后的 值受到选择过程污染,不能再当作预先指定假设检验的真实显著性。需要推断时,应使用选择后推断方法,或改为预注册变量集 + 单次估计。
七、常见误区
1. 把入选变量当成因果因素
数据关联可能来自混杂、反向因果或共同趋势。逐步回归没有识别假设,不能自动完成因果证明。
2. 同一份数据既做选择又做最终评价
这会系统性高估 、低估误差。至少留出测试集,或做嵌套交叉验证。
3. 忽视选择不确定性
Bootstrap 重抽样后反复逐步,常看到入选集合“漂移”。若漂移严重,最终论文应弱化“唯一正确变量集”的叙述,改谈稳定出现的核心变量与预测表现。
4. 在 很大时硬上逐步
高维小样本下贪心搜索不稳定。优先 Lasso、弹性网、或先基于领域知识大幅度减维。
5. 只看训练集 AIC 最优
AIC 仍是样本内准则的一种。最终以任务指标(预测误差、分类代价、业务约束)为准。
八、小结
逐步回归的核心思想可以概括为:
在线性模型框架下,按信息准则或显著性规则贪心地增删变量,得到较精简且仍保持原始变量含义的回归式。
它适合作为可解释的特征筛选基线,也便于和全模型、正则化模型对照。但逐步结果对样本敏感,推断意义有限,更不能替代因果识别。规范用法是:预固定候选集与准则,训练内选择,训练外评估,并用稳定性与业务含义共同审查入选变量。