自相关检验
一、直观理解:残差是否“一人犯错,邻座跟着错”
回归假定误差项相互独立。对时间序列或空间相邻观测,这个假定常被违反:某一期的冲击会延续到下一期,于是残差出现自相关(autocorrelation)。
图像特征:残差对时间作图呈波浪或持续同号;残差自相关函数(ACF)在滞后 1、2 阶显著不为 0。
后果与异方差类似而不同:
- OLS 系数在常见外生条件下仍可一致;
- 但普通 SE 低估(正自相关时尤甚),t 检验过于乐观;
- 预测区间也会失真。
建模中必须先问:数据是不是按时间/顺序排列的?若是,回归后一定检查残差自相关。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 时间序列回归;按年份/月份排列的宏观与传感器数据;残差 ACF 可疑时;需要 HAC 标准误或 GLS/ARIMA 误差。 |
| 核心优点 | DW、BP、LB 等检验经典;图诊断直观;Newey–West 等 HAC 可直接修正推断。 |
| 局限与缺点 | DW 对严格外生、含滞后因变量等情形有局限;仅检验一阶时不够;把自相关当唯一问题可能掩盖设定错误(漏趋势、漏季节)。 |
三、核心原理
1. 一阶自相关模型
为常见正自相关。
2. Durbin–Watson 统计量
- DW≈2:无明显一阶自相关;
- DW≈0:强正自相关;
- DW≈4:强负自相关。
精确临界值依赖设计矩阵,需查表或用 dwtest。
3. Ljung–Box / Breusch–Godfrey
- Ljung–Box:对残差多个滞后的自相关做组合检验;
- BG 检验:把残差对原回归元及滞后残差再回归,适合含滞后因变量的情形,往往比 DW 更适用。
4. 处理
- 检查是否漏掉趋势、季节、重要变量;
- Newey–West HAC SE(修正推断);
- Cochrane–Orcutt / Prais–Winsten 等 FGLS;
- 显式建立 ARIMA 误差或动态回归;
- 差分平稳后再回归(需经济含义支持)。
四、关键决策
1. 先设定均值再谈相关
残差自相关经常是“模型太瘦”(漏变量)的症状,不是一上来就 GLS。
2. DW 还是 BG?
有滞后 y 作回归元时避免只依赖 DW,改用 BG 或 HAC。
3. 要有效率还是要稳健推断?
- 快速稳健:OLS + Newey–West;
- 结构清楚:把动力学写进模型。
五、MATLAB 示例
rng(12);
n = 120;
t = (1:n)';
x = randn(n,1);
% 构造 AR(1) 误差
e = zeros(n,1);
for i = 2:n
e(i) = 0.7*e(i-1) + randn;
end
y = 1 + 0.8*x + e;
T = table(t, x, y);
mdl = fitlm(T, "y ~ x");
disp(mdl);
% Durbin-Watson
[p_dw, dw] = dwtest(mdl);
fprintf("DW = %.3f, p = %.4g\n", dw, p_dw);
% 残差 ACF
ehat = mdl.Residuals.Raw;
figure;
subplot(2,1,1); plot(t, ehat, "-o"); yline(0); title("残差时间图");
subplot(2,1,2); autocorr(ehat); title("残差 ACF");
% Ljung-Box(若干滞后)
[h, p_lb, stat, cval] = lbqtest(ehat, "Lags", 10);
fprintf("Ljung-Box lag10: h=%d, p=%.4g, stat=%.3f\n", h, p_lb, stat);
% Newey-West HAC 协方差(手写示意,滞后 q)
X = [ones(n,1) x];
b = mdl.Coefficients.Estimate;
u = ehat;
q = floor(n^(1/4));
S = zeros(2);
for i = 1:n
xi = X(i,:)';
S = S + (u(i)^2) * (xi' * xi);
end
for l = 1:q
w = 1 - l/(q+1); % Bartlett
Gamma = zeros(2);
for t2 = l+1:n
Gamma = Gamma + u(t2)*u(t2-l) * (X(t2,:)' * X(t2-l,:));
end
S = S + w*(Gamma + Gamma');
end
bread = inv(X' * X);
V_nw = bread * S * bread;
se_nw = sqrt(diag(V_nw));
fprintf("OLS SE: %.4f %.4f\n", mdl.Coefficients.SE(1), mdl.Coefficients.SE(2));
fprintf("NW SE: %.4f %.4f\n", se_nw(1), se_nw(2));
六、如何解释结果
- 数据的时间粒度与排序;
- DW / BG / LB 结果与 ACF 图;
- 可能的设定原因(漏趋势等);
- 最终采用的修正(HAC 或动态模型);
- 修正前后推断是否改变。
七、常见误区
1. 横截面数据无故做 DW
若无自然顺序,DW 无意义;不要按错误排序“制造”自相关。
2. DW≈2 就宣布完全独立
还可能有高阶自相关或条件异方差(GARCH)。
3. 一见自相关就盲目差分
可能过度差分,损失水平信息。
4. 含滞后 y 仍只报 DW
应改用 BG/HAC 并讨论动态解释。
八、小结
自相关检验的核心是:
检查回归残差是否随时间(或顺序)系统相关,从而判断普通 SE 是否可信。
时间序列回归中,残差时间图 + ACF + DW/BG/LB 应成为标准流程;修正手段在“改设定、HAC SE、动态/GLS 模型”之间按目标选择。