VAR(向量自回归模型)
一、直观理解:多个序列互相用对方的过去解释
单变量 AR 只问“自己的过去”。VAR(Vector Autoregression)把 个变量放进同一个系统:每个变量都对所有变量的滞后回归。
其中 是 向量。例如:GDP、投资、消费;或温度、用电负荷、电价。VAR 适合回答:
- 联合短期预测;
- 一个冲击如何传导到其他变量(脉冲响应);
- 变量间是否有预测能力(Granger 因果,注意不是哲学因果)。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 多个内生序列互相影响;样本长度明显大于 ;需要系统预测或冲击分析;变量大致同阶单整或已平稳。 |
| 核心优点 | 不先验区分内生/外生(都当内生);预测与动态分析一体;MATLAB varm 工具完善。 |
| 局限与缺点 | 参数个数 膨胀快;短样本不稳定;水平 VAR 遇单位根需小心;结构解释依赖识别假设;季节与异方差需额外处理。 |
经验:月度数据 时 已可能吃紧,优先信息准则与稀疏性。
三、核心原理
1. 参数规模
每个方程有 个系数(含常数),共 个方程。 时已约百参数量级,没有足够 时方差巨大。
2. 平稳 VAR
特征多项式根应在单位圆外。非平稳时常见策略:
- 差分后建 VAR;
- 若存在协整,用 VECM(向量误差修正);
- 水平 VAR 仅在有充分理论/稳健性支持时使用,并做稳健性检查。
3. 脉冲响应与方差分解
正交脉冲响应对 的协方差做 Cholesky 分解,结果依赖变量顺序。报告时必须说明排序依据(外生性从强到弱等),并做顺序敏感性分析。
4. Granger 因果
若 的滞后在 方程中联合显著,则称 Granger 引起 。这只说明预测帮助,不是干预因果。
四、建模步骤
- 统一频率、处理缺失,画多序列图;
- 单序列平稳性检验,决定水平/差分/VECM;
- 选 :LR/AIC/BIC/HQ,结合残差白噪声;
varm+estimate;- 残差:自相关、跨相关、稳定性;
- 训练期外:多步联合预测的 RMSE(可对每个变量报告);
- 需要时:
armairf脉冲响应、FEVD、Granger 检验。
五、MATLAB 示例
%% 模拟二元 VAR(1) 并估计、预测
rng(17);
A1 = [0.5 0.2; -0.1 0.4];
c = [0.1; 0.2];
Sigma = [1 0.3; 0.3 1];
T = 400; K = 2;
Y = zeros(T,K);
for t = 2:T
Y(t,:) = (c + A1*Y(t-1,:)' + mvnrnd([0 0],Sigma)')';
end
T0 = 340;
Ytr = Y(1:T0,:); Yte = Y(T0+1:end,:);
% 选阶
maxP = 6;
aic = nan(maxP,1);
for p = 1:maxP
md = varm(K,p);
est = estimate(md, Ytr);
% 信息准则
results = summarize(est);
% 用 logL 手工算更透明
[~,~,~,logL] = infer(est, Ytr); %#ok<*ASGLU>
numParam = K + K*K*p + K*(K+1)/2; % 粗计:常数+A+协方差
aic(p) = -2*logL + 2*numParam;
end
[~,pBest] = min(aic);
fprintf("AIC 选择 p=%d\n", pBest);
md = varm(K,pBest);
est = estimate(md, Ytr);
summarize(est);
% 稳定性
st = est.AR;
% 可用 eig 检查伴随矩阵根(略)
% 训练期外预测
h = size(Yte,1);
Yf = forecast(est, h, Ytr);
rmse = sqrt(mean((Yte - Yf).^2, 1));
fprintf("各变量测试 RMSE:"); disp(rmse);
% 对比:各变量独立 AR(p)
rmseAR = zeros(1,K);
for j = 1:K
aj = estimate(arima(pBest,0,0), Ytr(:,j), "Display","off");
yj = forecast(aj, h, "Y0", Ytr(:,j));
rmseAR(j) = sqrt(mean((Yte(:,j)-yj).^2));
end
fprintf("独立 AR RMSE:"); disp(rmseAR);
% 脉冲响应(Cholesky,顺序 1->2)
figure;
armairf(est.AR, {}, "InnovCov", est.Covariance, "NumObs", 20);
title("正交脉冲响应(注意变量顺序)");
figure;
plot(T0+1:T0+h, Yte(:,1),"k"); hold on;
plot(T0+1:T0+h, Yf(:,1),"r","LineWidth",1.2);
legend("真实 y1","VAR 预测"); title("变量1 训练期外预测");
若序列非平稳,先差分:
dYtr = diff(Ytr);
estD = estimate(varm(K,pBest), dYtr);
% 预测差分后再积分还原到水平
六、如何解释结果
报告建议:
- 变量选择与预处理(对数、差分);
- 滞后 的准则表;
- 关键系数矩阵(可只解释显著且符合机理的项);
- 残差相关与稳定性;
- 各变量测试 RMSE,对比独立 AR/单变量 ARIMA;
- 脉冲响应图 + 变量排序理由 + 敏感性;
- Granger 检验表(若题目关心“能否预测”);
- 明确限制:短样本、遗漏变量、结构性断裂。
七、常见误区
1. 和 同时偏大
参数爆炸,样本外很差。优先少变量、小 。
2. 把 Granger 因果写成政策因果
只能说预测意义,不能说“提高 A 必然导致 B”。
3. 忽略变量顺序对 IRF 的影响
Cholesky 识别不是唯一真理。
4. 非平稳水平 VAR 直接下结论
至少做差分 VAR 或协整/VECM 稳健性。
5. 只报告系统内拟合优度
必须训练期外联合预测评价。
八、小结
VAR 的核心是:
让每个变量对整个系统的滞后做回归,从而进行联合预测与动态传导分析。
它适合真正的多变量互动问题,但参数纪律很重要。规范做法是:平稳化处理 → 谨慎选 → 残差与稳定性诊断 → 训练期外对比单变量基线 → 谨慎解释脉冲响应与 Granger 结果。不要只看 ,系统模型更容易在样本内“显得很强”。