跳到主要内容

格兰杰因果检验

一、直观理解:旧信息里,谁能帮我多预测一步​

格兰杰因果(Granger causality)问的是预测性问题:

在包含变量 XX 与 YY 的过去信息时,若去掉 XX 的过去,对 YY 的预测会显著变差,则称 XX Granger-引起 YY。

它不是哲学上的“真因”,也不是干预意义的因果,而是时间序列中的领先—滞后预测关系。

例子:若利率变化有助于预测未来投资,即使控制投资自身的滞后,则利率 Granger-引起投资。但这仍可能由第三变量共同驱动,或与预期有关。

二、适用场景与优缺点​

类型说明
适用场景多变量时间序列;探索领先滞后;VAR 建模中的结构探索;排除“明显没有预测内容”的链接。
核心优点操作标准化;与 VAR 一体;可双向检验;有滞后选择与稳健实现。
局限与缺点非干预因果;受遗漏变量、预期、采样频率影响;需平稳或协整框架;瞬时相关不在基本定义内。

在建模论文中,若写“格兰杰因果”,应同时声明其预测含义,避免政策干预式措辞。

三、核心原理​

对平稳序列,考虑 YY 方程:

Yt=α+∑i=1paiYt−i+∑i=1pbiXt−i+utY_t=\alpha+\sum_{i=1}^{p}a_i Y_{t-i}+\sum_{i=1}^{p}b_i X_{t-i}+u_t

检验 H0:b1=⋯=bp=0H_0:b_1=\cdots=b_p=0。可用 F/Wald 检验。对称地可检验 Y→XY\to X。

在 VAR 系统中对整块系数做约束检验。滞后 pp 用 AIC/BIC 或事前信息选。

非平稳时:

  • 先差分到平稳再检验;或
  • 在协整/VECM 框架讨论长期与短期格兰杰关系。

推广:条件格兰杰(控制第三变量集合)、频域格兰杰、面板格兰杰。

四、关键决策​

1. 信息集​

格兰杰结论相对于你放入的变量集合。漏掉共同原因会得到虚假因果。

2. 滞后阶数​

太短:漏掉慢通道;太长:功效低。报告换阶稳健性。

3. 瞬时相关​

同一期冲击相关时,基本格兰杰不刻画“瞬时因果”,需结构 VAR 与识别假设。

4. 措辞​

推荐:“XX 在格兰杰意义上有助于预测 YY”,而不是“XX 导致 YY”。

五、MATLAB 示例​

rng(25);
T = 400;
% X 是 Y 的领先者
x = zeros(T,1); y = zeros(T,1);
ex = randn(T,1); ey = randn(T,1);
for t = 3:T
x(t) = 0.5*x(t-1) + ex(t);
y(t) = 0.4*y(t-1) + 0.6*x(t-1) + ey(t);
end

% 用 lagmatrix 构造回归
p = 2;
Y = y(p+1:end);
Xlags = [];
Ylags = [];
for i = 1:p
Xlags = [Xlags, x(p+1-i:end-i)];
Ylags = [Ylags, y(p+1-i:end-i)];
end

% 无约束:Y ~ Ylags + Xlags
mdl_u = fitlm([Ylags Xlags], Y);
% 约束:Y ~ Ylags
mdl_r = fitlm(Ylags, Y);
% F 检验(似然比/多余平方和)
SSR_u = sum(mdl_u.Residuals.Raw.^2);
SSR_r = sum(mdl_r.Residuals.Raw.^2);
n = numel(Y); k_u = 1 + 2*p; q = p;
Fstat = ((SSR_r - SSR_u)/q) / (SSR_u/(n - k_u));
pval = 1 - fcdf(Fstat, q, n-k_u);
fprintf("H0: X 不 Granger 引起 Y; F=%.3f, p=%.4g\n", Fstat, pval);

% 反向
X = x(p+1:end);
mdl_u2 = fitlm([Xlags Ylags], X);
mdl_r2 = fitlm(Xlags, X);
SSR_u2 = sum(mdl_u2.Residuals.Raw.^2);
SSR_r2 = sum(mdl_r2.Residuals.Raw.^2);
F2 = ((SSR_r2-SSR_u2)/q) / (SSR_u2/(n-(1+2*p)));
p2 = 1 - fcdf(F2, q, n-(1+2*p));
fprintf("H0: Y 不 Granger 引起 X; F=%.3f, p=%.4g\n", F2, p2);

% 也可用 vgx 或 varm 工具箱做 VAR 与 gctest(若可用)
try
Mdl = varm(2, p);
Est = estimate(Mdl, [y x]);
% 某些版本提供 gctest
if exist("gctest", "file")
gctest(Est);
end
catch
disp("跳过工具箱 VAR 接口,手写检验已完成");
end

六、如何解释结果​

  1. 序列、变换(对数/差分)与平稳性;
  2. 信息集变量;
  3. 滞后选择;
  4. 双向检验表;
  5. 明确“预测因果”含义;
  6. 稳健性与可能的遗漏变量。

七、常见误区​

1. 当成政策干预因果​

措辞过度是最常见问题。

2. 非平稳直接回归​

虚假回归与错误 F。

3. 只做单向​

应报告是否双向。

4. 采样过粗​

季度数据可能把瞬时关系抹成滞后或反过来。

八、小结​

格兰杰因果的核心是:

在给定信息集下,一个序列的过去是否有助于预测另一个序列。

它是时间序列探索与 VAR 诊断的有用工具,但不是结构因果的替代品。写作中把“预测性领先”与“可干预因果”分开,是专业性的基本标准。