跳到主要内容

异方差

一、直观理解:噪声“忽大忽小”,普通标准误会骗人​

经典线性回归假定

Var(εi∣Xi)=σ2\mathrm{Var}(\varepsilon_i\mid X_i)=\sigma^2

对所有样本相同,称为同方差。若误差方差随拟合值或某个 XX 变化,就是异方差(heteroscedasticity)。

常见图像:残差图呈喇叭形——拟合值越大,点云越散。例如:

  • 收入越高,消费波动越大;
  • 企业规模越大,利润波动越大;
  • 计数或比例数据天然方差随均值变化。

异方差下,OLS 系数往往仍可无偏(假定其它条件),但:

  • 默认 SE 与 t/F 检验不可信;
  • OLS 不再是最佳线性无偏,可能有更有效的加权方法。

二、适用场景与优缺点​

类型说明
适用场景横截面回归诊断;残差呈扇形;经济、生物尺度数据;需要稳健推断或改进效率。
核心优点诊断图直观;稳健标准误实现简单;WLS/GLS 可提效。
局限与缺点形式未知时加权可能错;检验功效有限;对数变换改变解释;面板/时间序列还有其它相关结构。

三、核心原理​

模型 y=Xβ+εy=X\beta+\varepsilon,E(ε∣X)=0\mathbb{E}(\varepsilon\mid X)=0,但 Var(ε∣X)=Ω=diag(σi2)\mathrm{Var}(\varepsilon\mid X)=\Omega=\mathrm{diag}(\sigma_i^2)。

  • OLS:β^=(XTX)−1XTy\hat\beta=(X^\mathsf{T}X)^{-1}X^\mathsf{T}y 仍一致(在常规条件下);
  • 真实方差:Var(β^∣X)=(XTX)−1XTΩX(XTX)−1\mathrm{Var}(\hat\beta\mid X)=(X^\mathsf{T}X)^{-1}X^\mathsf{T}\Omega X(X^\mathsf{T}X)^{-1};
  • 若误用 σ2(XTX)−1\sigma^2(X^\mathsf{T}X)^{-1},推断失真。

White 稳健 SE 用 ε^i2\hat\varepsilon_i^2 估计 Ω\Omega 的对角,得到夹心协方差(HC0/HC1/HC2/HC3 等小样本变体)。

Breusch–Pagan / White 检验:将 ε^i2\hat\varepsilon_i^2 对 XX 或 XX 的水平与平方交叉项回归,检验是否有解释力。

处理路径:

  1. 变换 YY(如 log⁡Y\log Y)——改模型含义;
  2. 加权最小二乘(WLS)——需方差模型;
  3. 保留 OLS + 异方差稳健 SE——解释不变,推断更稳;
  4. 显式建模方差(如 GLM 的均值-方差关系)。

四、关键决策​

1. 只要稳健 SE 还是要 WLS?​

  • 目标是系数解释与检验:优先 OLS + HC SE;
  • 目标是效率且方差函数可建模:WLS/FGLS;
  • 比例/计数:直接 GLM,而不是硬套正态 OLS。

2. 如何发现​

残差 vs 拟合值图是第一现场;再辅以 BP/White 检验。不要只看检验 p 值。

3. 与非线性混淆​

喇叭形有时来自漏掉二次项。先检查均值函数是否正确,再谈异方差。

五、MATLAB 示例​

rng(11);
n = 200;
x = 1 + 4*rand(n,1);
% 方差随 x 增大
sig = 0.3 + 0.7*x;
y = 2 + 1.5*x + sig.*randn(n,1);
T = table(x, y);
mdl = fitlm(T, "y ~ x");
disp(mdl);

% 残差图
figure;
plotResiduals(mdl, "fitted");
title("残差 vs 拟合(异方差示意)");

% Breusch-Pagan 思想:e^2 ~ x
e = mdl.Residuals.Raw;
bp = fitlm(x, e.^2);
fprintf("BP 型检验(e^2 on x)p = %.4g\n", bp.Coefficients.pValue(2));

% 异方差稳健 SE(HC0 夹心)
X = [ones(n,1) x];
b = mdl.Coefficients.Estimate;
e = mdl.Residuals.Raw;
meat = X' * diag(e.^2) * X;
bread = inv(X' * X);
V_hc0 = bread * meat * bread;
se_hc0 = sqrt(diag(V_hc0));
fprintf("普通 SE: %.4f %.4f\n", mdl.Coefficients.SE(1), mdl.Coefficients.SE(2));
fprintf("HC0 SE: %.4f %.4f\n", se_hc0(1), se_hc0(2));

% 若用 fitlm 的稳健选项(若版本支持 RobustOpts 是对异常值;异方差可用 coefCI 等)
% 加权最小二乘:假设 sigma ∝ x
w = 1 ./ (x.^2);
mdl_w = fitlm(T, "y ~ x", "Weights", w);
disp(mdl_w);

% 对数变换对照(若 y>0)
T.logy = log(y);
mdl_log = fitlm(T, "logy ~ x");
fprintf("log 模型 R^2=%.3f(解释变为半弹性)\n", mdl_log.Rsquared.Ordinary);

六、如何解释结果​

  1. 展示残差图与检验;
  2. 说明对 SE / p 值的影响(对照普通 SE 与稳健 SE);
  3. 若变换或加权,明确新模型的含义;
  4. 最终推断以稳健方法为准时要写明 “heteroscedasticity-robust SE”。

七、常见误区​

1. 异方差就说 OLS 系数完全作废​

均值模型仍可能成立;先修 SE,再考虑效率。

2. 一看 BP 显著就对数变换​

可能牺牲可解释性,且未必解决。

3. 忽略均值设定错误​

先把线性/漏变量问题解决。

4. 时间序列用横截面 BP 就完事​

还可能有自相关,需 HAC(如 Newey–West)。

八、小结​

异方差的关键影响是:

系数点估计未必坏,但普通标准误会骗人。

诊断靠残差图,处理靠稳健 SE、WLS 或更合适的 GLM。报告中应展示诊断并声明最终推断所用的协方差估计。

在报告中建议增加一张“诊断—处理—结论”对照表:先写残差图或一致对统计量给出的证据,再写采用了稳健标准误、变换、加权或改用何种相关,最后写推断是否改变。这样评阅人可以在一分钟内看完你的稳健性逻辑。