← 返回模块
2.2.2.3beta 可读 · 未来付费校验通过内容版本 2026-05-25

回归诊断、多重共线性与正则化

2.2.2 · 回归与广义线性模型 · 数学与统计能力

上海某私募的多因子研究员把过去 250 个交易日的沪深300 成分股横截面回归刚跑完——12 个风格因子,R2R^2 达到 0.41,看着挺漂亮。可是把 5 月那一周的极端行情样本剔掉再跑一次,某个动量因子的系数从 +0.18+0.18 翻成 0.07-0.07;再换一种风险因子的口径,价值因子又从显著变成不显著。模型「拟合得很好」却一推就倒——这正是前两课没有触及的现实:​​普通最小二乘​​(ordinary least squares, OLS)给你一个数学上完美的最小化器,却不告诉你这个解到底是被某几个观测点撑着、被一对高度相关的因子绑着,还是被异方差扭曲着。本课把这套「然后呢」的诊断与修正工具一次性铺开,并把正则化作为系统性的应对手段。

一、残差结构与四张诊断图

第 2 课已经告诉你残差向量 e=yy^e = y - \hat y 的​​协方差矩阵​​(covariance matrix)为 Cov(e)=σ2(IH)\mathrm{Cov}(e) = \sigma^2 (I - H),因此 Var(ei)=σ2(1hii)\mathrm{Var}(e_i) = \sigma^2 (1 - h_{ii})——逐点不同。原始残差之间不可比,要校正这种异质方差才能跨点比较。把残差除以自身标准差的估计,得到​​学生化残差​​(studentized residual):

ri=eiσ^1hiir_i = \dfrac{e_i}{\hat{\sigma}\,\sqrt{1 - h_{ii}}}

其中 hii=[X(XX)1X]iih_{ii} = [X(X^\top X)^{-1} X^\top]_{ii} 是帽子矩阵 H=X(XX)1XH = X(X^\top X)^{-1} X^\top 的第 ii 个对角元。

熟悉 R 的 plot.lm() 输出的人都见过那四张诊断图,顺序固定:(a) ​残差-拟合图​​——检查线性(无系统弯曲)与同方差(无喇叭口);(b) ​正态 Q-Q 图​​——把 rir_i 的样本分位数对比正态分位数,直线即正态,偏离则说明厚尾或偏态;(c) ​尺度-位置图​​(ri\sqrt{|r_i|}y^i\hat y_i)——把方差趋势变成可视的;(d) ​残差-杠杆图​​叠加库克距离等高线——挑出影响力大的个别点。四张图各自盯着一条假设,先学会「这张图坏了说明哪条假设破了」,比记任何检验都重要。

二、杠杆与库克距离

hiih_{ii} 之所以叫​​杠杆值​​(leverage),是因为 y^=Hy\hat y = H y 意味着 y^i=jhijyj\hat y_i = \sum_j h_{ij} y_j 里第 ii 项是 yiy_i 对自己拟合值的直接贡献。代数簿记上,hii[1/n,1]h_{ii} \in [1/n, 1]ihii=tr(H)=p\sum_i h_{ii} = \mathrm{tr}(H) = p——平均杠杆即 p/np/n。一条常用经验值:hii>2p/nh_{ii} > 2p/n 时该点列入「高杠杆点」(high-leverage point)候选,值得逐条审视。

库克距离(Cook's distance)把残差大小与杠杆值合成一个综合影响度量:

Di=ei2pσ^2hii(1hii)2D_i = \dfrac{e_i^2}{p\,\hat{\sigma}^2}\cdot\dfrac{h_{ii}}{(1 - h_{ii})^2}

它近似等于把第 ii 个观测删去后 β^\hat\beta 的整体偏移量。经验值 Di>4/nD_i > 4 / n 一般认为「可能具有影响力」。请记住:这两条阈值都是经验启发(heuristic),不是带受控弃真率的假设检验——它们是用来标点的,不是用来判点的。

三、异方差的检测与修正

Var(εi)\mathrm{Var}(\varepsilon_i) 不再是常数,Gauss-Markov 给的 BLUE 结论就失效了。检测两条路:视觉上,看尺度-位置图有没有系统趋势;形式化地,做​​布劳殊-帕甘检验​​(Breusch-Pagan test)——把 ei2e_i^2XX 跑一次辅助回归,在同方差原假设 H0H_0 下检验统计量近似 χp12\chi^2_{p-1}

两种标准修正:

  1. ​加权最小二乘​​(weighted least squares, WLS):若 Cov(ε)=σ2W1\mathrm{Cov}(\varepsilon) = \sigma^2 W^{-1}WW 对角,则 β^WLS=(XWX)1XWy\hat\beta_{\mathrm{WLS}} = (X^\top W X)^{-1} X^\top W y 在异方差 Gauss-Markov 假设下仍是 BLUE。实务中 WW 未知,通常用迭代 WLS(先 OLS 拟合,用残差估计 WW,再加权,如此反复)。
  2. ​怀特-胡贝尔三明治标准误​​(Huber-White / sandwich standard errors,中文常译「稳健标准误」):β^OLS\hat\beta_{\mathrm{OLS}} 仍无偏一致,只把标准误估计换成异方差一致的形式:
Var^HC(β^)=(XX)1Xdiag(ei2)X(XX)1\widehat{\mathrm{Var}}_{\mathrm{HC}}(\hat{\beta}) = (X^\top X)^{-1} X^\top \,\mathrm{diag}(e_i^2)\, X (X^\top X)^{-1}

这就是 White (1980) 的著名结果,也是 R 的 lmtest::coeftest + sandwich::vcovHC、Python statsmodelsHC0/HC1/HC2/HC3 选项背后的公式。代价是小样本下略损效率,收益是把异方差对推断的污染压平。

四、多重共线性:VIF 与条件数

当设计矩阵的两列(或多列)几乎线性相关时,​​正规方程​​(normal equations)XXβ=XyX^\top X \beta = X^\top y 趋近奇异,(XX)1(X^\top X)^{-1} 的对角元爆炸,直接放大 Var(β^j)=σ2[(XX)1]jj\mathrm{Var}(\hat\beta_j) = \sigma^2 [(X^\top X)^{-1}]_{jj}。诊断办法是把 XX 的第 jj 列对其余 p1p-1 列做辅助回归,记其 R2R^2Rj2R_j^2,定义​​方差膨胀因子​​(variance inflation factor, VIF):

VIFj=11Rj2\mathrm{VIF}_j = \dfrac{1}{1 - R_j^2}

VIFj=1\mathrm{VIF}_j = 1 时第 jj 个预测变量与其它正交;VIFj\mathrm{VIF}_j 较大时该变量被其它列强烈复制。一般经验值 VIFj>10\mathrm{VIF}_j > 10 提示严重共线性(部分文献用 >5>5 更严)。连到线性代数侧:XXX^\top X 的​​条件数​​(condition number)κ(XX)=λmax/λmin\kappa(X^\top X) = \lambda_{\max} / \lambda_{\min} 是最大与最小​​特征值​​(eigenvalue)之比,刻画解正规方程的数值敏感度——κ\kappa 越大,小幅扰动越能把 β^\hat\beta 推得面目全非。

​一个最小数值例子。​X=[1,x1,x2]X = [1, x_1, x_2],其中 x2=2x1+ηx_2 = 2 x_1 + \etaη\eta 很小。把 x2x_2x1x_1 做辅助回归,得 R220.95R_2^2 \approx 0.95,故

VIF2=110.9520.\mathrm{VIF}_2 = \dfrac{1}{1 - 0.95} \approx 20.

也就是说 β^2\hat\beta_2 的方差被放大约 20 倍。这时往数据里加进一个新观测——或仅仅把某个 yiy_i 改动一点——β^2\hat\beta_2 就可能直接翻号,β^1\hat\beta_1 反向吸收差额。这就是共线性的「不稳定签名」:不是大样本失效,而是对小扰动过度敏感,签到正负号都跳。

下面这个滑块把 VIF 当成辅助 R2R^2 的函数:把 R2R^2 向 1 推,VIF 急剧爆炸——这就是经验阈值 10 的几何理由。

Formula Explorer

1 / (1 - r_squared)

五、正则化:岭回归与 Lasso

岭回归(ridge regression)把残差平方和替换为带 L2L^2 惩罚的目标:

β^ridge(λ)=(XX+λI)1XyargminβyXβ2+λβ22\hat{\beta}_{\mathrm{ridge}}(\lambda) = (X^\top X + \lambda I)^{-1} X^\top y \quad \text{即} \quad \arg\min_\beta \,\|y - X\beta\|^2 + \lambda \|\beta\|_2^2

加上 λI\lambda I 等于把 XXX^\top X 的每个​​特征值​​抬高 λ\lambda,矩阵恒为正定可逆,所以岭回归在 XXX^\top X 奇异时也有定义。代价是引入偏差(每个系数都被收缩向零),换来的是方差大幅下降——正是模块 2.2.1 第 2 课里讲过的均方误差(MSE)折中。

Lasso 把 L2L^2 惩罚换成 L1L^1:

β^lasso(λ)=argminβyXβ2+λβ1\hat{\beta}_{\mathrm{lasso}}(\lambda) = \arg\min_\beta \,\|y - X\beta\|^2 + \lambda \|\beta\|_1

​无闭式解​​;主流求解器是坐标下降(coordinate descent)与 LARS。几何上,L1L^1 球是带尖角的菱形(对比岭的同心圆球面),最优点常常落在某个尖角上——那意味着对应分量精确为零,即同时完成变量选择。一句话的贝叶斯桥梁:岭是 β\beta 取高斯先验的 MAP 估计,Lasso 是 Laplace 先验的 MAP——完整贝叶斯视角留到后续模块。弹性网(elastic net)、组 Lasso 等扩展则把这套思想推广到「成组相关预测变量需要一起进或一起出」的场景,推导属于模块 2.5.2 的范围;经典逐步回归与 AIC / BIC 是 Lasso 之前的备选路径,各有自身的多重检验放大与不稳定问题,这里仅作一句提示。库克距离会标外点但并不修外点,稳健回归(Huber 损失、RANSAC 等)才是配套工具,也不在本课展开。

惩罚参数 λ\lambdaKK 折交叉验证(K-fold cross-validation,通常 K=5K = 51010)挑选:在每个候选 λ\lambda 上,用 K1K-1 折拟合、留一折评测,求平均预测误差并取最小者;若追求简约,可用「1-SE 法则」选取「在最小误差 1 个标准误以内的最大 λ\lambda」。交叉验证本身的完整理论留待模块 2.6。

六、下一步

到这里你已经能在 OLS 框架内识别影响点、应对异方差、量化共线性,并把岭与 Lasso 当作系统性的方差控制工具。但整个故事仍然假设响应变量是连续的且服从正态。下一课把这套框架推到非高斯响应——二分类、计数——用广义线性模型(generalized linear models, GLM)统一处理:把残差换成偏差(deviance)残差、把 RSS 换成负对数似然、把链接函数嵌进去。诊断方法对应迁移、岭与 Lasso 几乎原样移植到惩罚似然上,λ\lambda 与交叉验证一并继续生效。

Exercise

设某多元回归中 n=100n = 100p=5p = 5,平均杠杆 p/n=0.05p/n = 0.05。(a) 写出高杠杆点的经验阈值,以及由库克距离判定影响点的经验阈值。(b) 对某观测 hii=0.4h_{ii} = 0.4、学生化残差 ri=2.5r_i = 2.5,计算库克距离 DiD_i。(c) 若 VIF3=12\mathrm{VIF}_3 = 12,说明它对 Var(β^3)\mathrm{Var}(\hat\beta_3) 相对于「预测变量正交」基线的含义,并列出两条补救手段。(d) 写出岭回归的闭式估计量,并用一句话解释为什么把 λI\lambda I 加到 XXX^\top X 上,即使 XXX^\top X 奇异时也良定义。

提示
先回忆两条经验阈值:hii>2p/nh_{ii} > 2p/n 表示高杠杆,Di>4/nD_i > 4/n 表示具影响力。(b) 用学生化残差把 Cook 重写为 Di=(ri2/p)hii/(1hii)D_i = (r_i^2/p)\cdot h_{ii}/(1-h_{ii})
提示
(b) 代入 ri=2.5, hii=0.4, p=5r_i=2.5,\ h_{ii}=0.4,\ p=5:Di=(6.25/5)(0.4/0.6)0.83D_i = (6.25/5)\cdot(0.4/0.6) \approx 0.83,远超 4/n=0.044/n = 0.04。(c) VIF=12\mathrm{VIF}=12Var(β^3)\mathrm{Var}(\hat\beta_3) 被放大 12 倍;补救:删冗余列、合并相关变量、或改用岭回归。