变量选择(Variable Selection)
变量选择的目标与基本概念
在多元线性回归中,我们通常有很多候选自变量(predictors),记候选变量个数为 (c)。
核心目标:
- 一、在解释力尽量强的前提下,使用尽量少的预测变量;
- 二、避免过拟合、冗余变量和不必要的复杂度;
- 三、在统计指标与领域知识之间取得平衡,而不是只看某一个指标。
候选变量(candidate predictors)
-
一、定义:数据集中所有可能被纳入模型的预测变量数量。
-
二、例子:FirstYearGPA 数据集中用于预测大一 GPA 的变量共有 9 个候选自变量:
- HS:高中 GPA
- SATV:SAT 语文
- SATM:SAT 数学
- HU:高中人文课学分
- SS:高中社科课学分
- SEX:性别
- FG:是否第一代大学生
- WH:是否白人
- CB:高中是否有 ≥50% 学生上大学
因变量为:GPA(大学一年级 GPA)。
常见变量选择方法概览
这些方法都是“算法化”的工具,用来帮我们在众多候选变量中筛选模型,但它们不能替代对数据和领域的思考。
常见方法包括:
- 一、All Possible Subsets(所有子集)
- 二、Best Subsets(最佳子集)
- 三、Backward Elimination(后退剔除)
- 四、Forward Selection(前进选择)
- 五、Stepwise Regression(逐步回归)
重要提醒:
-
这些方法可以:
- 提示哪些变量“看起来重要”;
- 提供若干可考虑的候选模型;
-
但不能保证:
- 一定找到“真·最优模型”;
- 一定与领域知识一致。
所有子集(All Possible Subsets)
定义与模型数量
思想:对所有候选变量的每一种子集组合都拟合一个回归模型,然后比较这些模型的表现。
若有 (c) 个候选变量,则所有子集的模型总数为:
[ \text{模型数} = 2^c ]
- 一、当 (c = 10) 时:模型数 (= 2^{10} = 1024),已是上千个模型;
- 二、当 (c = 20) 时:模型数 (= 2^{20} \approx 1,048,576),超过一百万个模型。
特点:
- 一、穷举所有可能的变量组合(但通常不包含交互项和变换);
- 二、计算量非常大,在变量很多时不现实;
- 三、适合作为“理论上最全面”的参考,但实际多用算法变体(如 Best Subsets)。
简单示例(假设有 3 个候选变量 (X_1, X_2, X_3))
所有可能模型包括:
-
一、只含截距:(E[Y|X] = \beta_0)
-
二、含单个变量:
- (\beta_0 + \beta_1 X_1)
- (\beta_0 + \beta_2 X_2)
- (\beta_0 + \beta_3 X_3)
-
三、含两个变量:
- (\beta_0 + \beta_1 X_1 + \beta_2 X_2)
- (\beta_0 + \beta_1 X_1 + \beta_3 X_3)
- (\beta_0 + \beta_2 X_2 + \beta_3 X_3)
-
四、含三个变量:
- (\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_3)
最佳子集(Best Subsets)
基本思想
All Possible Subsets 会生成所有 (2^c) 个模型,输出会非常庞大,不利于人工查看。
Best Subsets 的做法:
-
一、同样拟合所有子集模型(生成的模型数和 All Possible Subsets 一样);
-
二、但只在输出中展示:
- 最优的一元模型(1 个自变量);
- 最优的二元模型(2 个自变量);
- 最优的三元模型(3 个自变量);
- ……以此类推。
“最优”的标准通常根据某个指标,比如:
- 调整后的 (R^2)(Adjusted (R^2))
- Mallow’s (C_p)
- AIC 等。
FirstYearGPA 示例中的 Best Subsets
R 代码大致为:
library(olsrr)
lm_gpa <- lm(GPA ~ ., data = FirstYearGPA)
ols_step_best_subset(lm_gpa)
输出的“Model Index 与 Predictors”类似:
- 模型 1:HS
- 模型 2:HS + HU
- 模型 3:HS + HU + WH
- 模型 4:HS + SATV + HU + WH
- 模型 5:HS + SATV + HU + SS + WH
- ……直到包含所有 9 个预测变量的模型
随后还有一张表格,给出每个模型对应的:
- Adjusted (R^2)
- Predicted (R^2)
- Mallow’s (C_p)
- AIC 等。
从结果中观察:
- 一、调整 (R^2) 在模型 4–7 附近达到较高水平;
- 二、Mallow’s (C_p) 在模型 4 和 5 处最小,且数值相近;
- 三、在 4 和 5 中,通常倾向选择更简单的模型(变量更少):
即选择 模型 4:GPA ~ HS + SATV + HU + WH
与之前 6 变量模型(加了 SS、SEX)比较:
- 6 变量模型中,SS 与 SEX 在 10% 显著性水平下并不显著;
- 去掉这两个变量后,调整 (R^2) 几乎不变,Mallow’s (C_p) 非常接近最优;
- 因此,4 变量模型更简洁、解释力相近,更优雅。
后退剔除(Backward Elimination)
基本流程(基于 p-value)
后退剔除从“最大模型”开始(包含所有候选变量),逐步删除最不显著的变量:
-
一、拟合包含所有候选自变量的全模型;
-
二、找到 p-value 最大的那一个变量:
- 若该 p-value 较大(不显著),则删除这个变量,重新拟合模型;
- 若所有变量 p-value 都不大(都显著),则停止;
-
三、重复步骤二,直到没有明显不显著的变量。
FirstYearGPA 示例中的后退过程
全模型类似:
lm(GPA ~ HS + SATV + SATM + HU + SS + SEX + FG + WH + CB, data = FirstYearGPA)
R 输出显示:
- SATM、CB、FG、SEX、SS 等变量 p-value 偏大;
- HS、HU、WH 明显显著;SATV 在删掉一些变量后变得更有用。
后退剔除的典型步骤:
- 一、删 SATM:因为其 p-value 最大且远大于 0.1;
- 二、在新模型中,再删 p-value 最大的 CB;
- 三、再删 FG;
- 四、再删 SEX;
- 五、再删 SS;
最终得到模型:
[ \text{GPA} \sim \text{HS} + \text{SATV} + \text{HU} + \text{WH} ]
和 Best Subsets 选出的 4 变量模型刚好一致,但讲义也特别强调: 这种完全“巧合”的一致性,在其它数据集中并不常见。
后退剔除的优缺点
-
优点:
- 一、与 All Possible Subsets 相比,拟合的模型数量大大减少;
- 二、算法简单明了;
-
缺点:
- 一、结果高度依赖起始的“全模型”;
- 二、若一开始就没把某个重要变量包括进去,则永远不会被考虑;
- 三、只基于 p-value 时,忽略了模型整体指标(AIC、(C_p)、调整 (R^2) 等)。
前进选择(Forward Selection)
基本流程(基于 (R^2) 或调整 (R^2))
与后退剔除相反,前进选择从空模型开始,逐步加入最有用的变量。
常见步骤(以最大化调整 (R^2) 为例):
-
一、对每个单变量模型(只有 1 个自变量)计算调整 (R^2),选出最好的那一个变量,将其加入模型;
-
二、在已有变量的基础上,对“尚未加入”的每一个变量:
- 逐个加入,拟合新模型;
- 比较调整 (R^2),选择提升最大的那个变量加入;
-
三、重复上一步,直到:
- 加入任何新变量都无法明显改善指标,或
- 所有候选变量都已加入模型。
FirstYearGPA 示例
调用类似:
ols_step_forward_adj_r2(lm_gpa, details = TRUE)
从输出可以大致看出:
- 一、第一步:在所有单变量模型中,
HS的调整 (R^2) 最高,因此先加入 HS; - 二、第二步:在已含 HS 的基础上,每次尝试再加一个变量,结果发现 HU 能带来最大提升,于是得到模型: (\text{GPA} \sim \text{HS} + \text{HU});
- 三、第三步:在 HS+HU 的基础上,比较 WH、SATV 等变量的加入效果,WH 表现最好,于是得到: (\text{GPA} \sim \text{HS} + \text{HU} + \text{WH});
- 四、第四步:继续尝试加入 SATV、SS、SEX、FG、CB…… 直至满足停止条件。
在讲义给出的后续输出中,前进选择最终得到的模型结构与后退剔除、Best Subsets 的结果高度相似,但中途拟合的模型个数明显多于后退剔除,少于 All Possible Subsets。
前进选择的特点
- 一、从简到繁,减少初始拟合难度;
- 二、不会考虑“从未加入过”的变量被删掉(因为它们从未出现);
- 三、最大模型不一定包含所有变量(可能提前停止)。
逐步回归(Stepwise Regression)
结合前进与后退的思想
在实际数据中,有可能出现这样的情形:
- 一、变量 (X_1) 单独来看很强,被最早选入模型;
- 二、后来加入 (X_2)、(X_3) 后,它们与 (X_1) 含有大量重叠信息;
- 三、当模型包含 (X_1, X_2, X_3) 时,(X_1) 的 p-value 变得很大,说明它已经变“可有可无”。
如果只做前进选择:
- 一、(X_1) 一旦被加入,就不会被删除;
- 二、容易留下这样的“冗余变量”。
逐步回归的核心思想:
-
一、整体流程类似前进选择,一个一个往里加变量;
-
二、但每次加入新变量后,都允许“往回看”:
- 检查已经在模型里的变量;
- 如果某个变量 p-value 变大、不再显著,就把它删掉(类似后退剔除的动作);
-
三、因此兼具:
- 前进:逐步引入新变量;
- 后退:动态剔除变得不重要的旧变量。
对 FirstYearGPA 数据而言,讲义指出: 实际上不存在“加入后又变冗余”的情况,所以逐步回归多做一步检查,但结果与前进选择、后退剔除类似。
模型选择时的注意事项与策略
不同方法结果可能不同
- 一、All Possible Subsets、Best Subsets、Backward、Forward、Stepwise 一般不会给出完全相同的模型;
- 二、即使偶然得到相同的模型,也不能据此认为“这就是唯一正确的模型”。
实务中的思路
-
一、多个模型可能在指标上非常接近:
- (R^2)、调整 (R^2)、AIC、(C_p) 等差别很小;
-
二、此时常常更偏好:
- 变量更少、结构更简单的模型;
- 更符合领域知识的模型;
-
三、变量选择方法是工具,不是“自动驾驶”:
-
需要结合:
- 先验理论与常识判断;
- 探索性分析(散点图矩阵、箱线图、按类别着色的散点图等);
- 专家建议与研究目的。
-
异常点与诊断(Outliers & Diagnostics)
异常点的基本概念
异常点(Outlier):在拟合的回归模型下,“不符合整体模式”的观测值,其残差绝对值异常大。
-
一、残差: [ e_i = y_i - \hat{y}_i ]
-
二、异常点的特点:
- 垂直方向偏离大(即预测误差大);
- 不一定在水平方向(自变量方向)“极端”,这一点由杠杆值衡量;
-
三、关键问题:
- 残差多大才算“异常”?
- 多大程度上“影响”了拟合结果?
在诊断每个观测值时,需要综合考虑:
- 一、Influence(影响力)
- 二、Leverage(杠杆值)
- 三、Standardized Residual(标准化残差)
- 四、Cook’s Distance(Cook 距离)
影响力(Influence)
定义
影响力衡量的是:如果删除该观测点,回归模型(尤其是斜率)的估计会发生多大变化。
- 一、若删除某点后,斜率/截距几乎不变 → 影响力小;
- 二、若删除后,斜率明显改变 → 该点影响力大,是“有问题”的候选异常点。
Florida Votes 示例:
- 因变量:Buchanan 得票数;
- 自变量:Bush 得票数;
- 特别关注:Palm Beach County(棕榈滩县)。
对比:
- 一、包含 Palm Beach 的回归模型:斜率约 4.92;
- 二、删除 Palm Beach 再拟合:斜率变化为约 3.48,变化明显;
因此,Palm Beach 这个点对模型斜率有显著影响,是一个高影响力异常点。
杠杆值(Leverage)
概念与直觉
杠杆值(Leverage)衡量的是:一个观测在自变量空间中有多“极端”,即它有多大“潜力”去影响回归线。
- 一、自变量值离整体平均值越远,杠杆值越大;
- 二、杠杆值与自变量的位置有关,与因变量的取值无关。
直观类比:
-
想象一个跷跷板:
- 一个人离支点越远,对跷跷板的作用力越大;
- 即使 TA 的体重与别人差不多,但位置在更远,也能产生更大“杠杆效应”。
数学表达(简单线性回归)
在简单线性回归中,观测点 (i) 的杠杆值为:
[ h_i = \frac{1}{n} + \frac{(x_i - \bar{x})^2}{\sum_j (x_j - \bar{x})^2} ]
- 一、可以看到,杠杆值只依赖于 (x_i) 与 (\bar{x}) 的距离;
- 二、(h_i) 越大,点越“极端”,其潜在影响力越大。
Florida Votes 示例中的杠杆
- 一、Bush 得票数非常大的县(例如 Palm Beach)在横轴上远离平均值 → 杠杆值大;
- 二、如果 Palm Beach 的 Bush 票数从 153k 改为 50k,其横坐标就不再那么极端,杠杆值会变小;
- 三、杠杆(x 方向极端程度)与它的实际 y 值(Buchanan 票数)无关,但会影响其潜在影响力。
标准化残差(Standardized Residual)
为什么要标准化?
原始残差 (e_i) 的单位与因变量 (Y) 一致:
- 一、难以直接判断“残差是否异常大”;
- 二、不同数据集的残差尺度不一样,比较不方便。
标准化残差通过除以估计的标准差并考虑杠杆值,得到无量纲的量,类似“标准差单位”上的偏离:
[ r_i = \frac{y_i - \hat{y}_i}{\hat{\sigma}\sqrt{1 - h_i}} ]
其中:
- (\hat{\sigma}) 是残差标准差(RMSE),表示“典型误差”的大小;
- (h_i) 是第 (i) 个点的杠杆值。
大致经验:
-
若模型合理且误差近似正态:
- 约 95% 的点应有 (|r_i| \leq 2);
- (|r_i| > 2) 或 (|r_i| > 3) 时,应重点检查。
Studentized Residual(学生化残差)
讲义还提到 Studentized Residual(学生化残差),它与标准化残差类似,但在计算 (\hat{\sigma}) 时:
- 一、先删除第 (i) 个观测再拟合模型;
- 二、以避免该点的异常残差过度影响 (\hat{\sigma}) 的估计。
实务中,软件常直接给出学生化残差,用于更稳健地判断异常点。
Olympic Long Jump 示例
- 自变量:年份;
- 因变量:当届奥运会男子跳远冠军的成绩;
- 特别观测:1968 年 Bob Beamon 的“超远一跳”,打破世界纪录超过 2 英尺。
分析结果:
- 一、从残差图上可以看到 Bob 的残差非常大;
- 二、计算标准化残差后,其数值远超绝大部分年份;
- 三、但 Bob 的年份(x 方向)并不极端 → 杠杆值不高;
- 四、因此虽然残差极大,但由于杠杆不大,对斜率的影响并不严重 → 高残差但低影响力。
Cook 距离(Cook’s Distance)
定义与公式
Cook 距离综合了标准化残差与杠杆值,用来衡量某个点对回归模型的整体影响。
对第 (i) 个观测,Cook 距离为:
[ D_i = \frac{r_i^2}{p + 1} \cdot \frac{h_i}{1 - h_i} ]
其中:
- (r_i):该点的标准化残差;
- (h_i):该点的杠杆值;
- (p):自变量个数(不包括截距)。
可以看到:
- 一、残差越大(拟合得越差),(r_i^2) 越大,(D_i) 越大;
- 二、杠杆越大(越极端),(\frac{h_i}{1 - h_i}) 越大,(D_i) 越大;
- 三、两者任意一项大,都可能导致 Cook 距离大。
经验阈值
常用的经验判断:
- 一、(D_i > 0.5):中度有影响的点,需要重点关注;
- 二、(D_i > 1):高度有影响、非常“问题”的点,往往是强影响力异常点。
综合理解
Cook 距离本质上回答问题:
“如果删掉这个点,回归系数会发生多大变化?”
- 一、若某点残差不大,但杠杆极高(横向非常极端),也可能有不小的 Cook 距离;
- 二、若某点杠杆不高,但残差极端大,也可能导致不小的 Cook 距离;
- 三、若同时残差大、杠杆高,Cook 距离会极大,这是最危险的一类点。
Florida Votes 中的 Palm Beach:
- 一、Bush 得票数非常大 → 杠杆高;
- 二、Buchanan 得票数严重偏离整体趋势 → 标准化残差极大;
- 三、Cook 距离远大于其他县 → 典型的高杠杆 + 高残差 = 高影响力异常点。
综合诊断图(Summary Plot)
R 提供的回归诊断图(如 plot(lm_object))通常包括:
- 残差 vs 拟合值;
- 正态 QQ 图;
- 标准化残差 vs 杠杆值;
- Cook 距离图等。
通过这些图,我们可以直观地观察:
- 一、是否存在非线性关系或异方差;
- 二、是否存在高杠杆、残差异常大的点;
- 三、哪些观测点的 Cook 距离最大,值得进一步调查。
异常点处理的原则
-
一、这些诊断工具的作用是提示而非裁决:
- 高 Cook 距离、高标准化残差、高杠杆值 → 提示“这里有问题,请仔细看”;
-
二、应优先考虑:
- 是否存在录入错误、单位错误等数据错误;
- 是否代表某种特殊机制(例如特殊人群、特殊条件);
-
三、不要为了让回归图“好看”就随意删点:
- 有时“异常点”才是最有价值的信息;
-
四、合理做法:
- 分别在“保留异常点”和“删除异常点”的情况下完成分析;
- 比较模型系数、预测结果的变化,再做决策;
- 在报告中清楚说明自己对异常点的处理策略与理由。