前置条件与学习依赖 / PREREQUISITES
数学 / 统计基础时间序列分析、VAR 直觉、方差分解与历史分解的线性代数。
经济学理论前置一个已求解的 DSGE 模型(IRF 是求解器输出的解读);各类外生冲击的经济含义。
软件 / 计算前置MATLAB(读取 Dynare 的 oo_ 结构体并绘图);模型已由 Dynare 解出政策函数。
站内前置页面先学 05-dynare-solving。
难度与路线位置入门→进阶所有模型页的'看图说话'收尾,IRF/方差分解是论文标配图。
📚 基础知识库 · 本页定位

本页是 DSGE 基础知识库页面。定位:先单独学会这个工具,再到模型分支里看它怎么用。IRF 与模拟是求解结果的"读图"环节——学会 IRF 解读、方差分解、历史分解后,再去各分支看具体模型对各类冲击的响应形状。

在哪些模型分支中使用:所有模型分支的收尾"看图说话"都靠它—— RBC 基准模型 · NK 三方程 · 中尺度 SW · 小国开放经济 · 金融摩擦 BGG/GK · 财政与货币规则 · TANK两主体 · HANK · 适应性学习

01 IRF 的定义与经济学解读

脉冲响应函数(Impulse Response Function, IRF)描述一个外生结构冲击 $\varepsilon_t$ 发生后,内生变量 $\hat x_{t+s}$ 在随后各期如何偏离稳态。定义为政策函数对冲击的导数:

IRF 定义
$$\frac{\partial \hat x_{t+s}}{\partial \varepsilon_t} = \big(B A^{s-1}\big)_{\cdot, j},\qquad s=0,1,2,\dots$$

横轴是期数(季度),纵轴是"偏离稳态的百分比"(或百分点,对利率/通胀)。IRF 是 DSGE 论文的"主角图"——它把抽象的方程组翻译成"这个冲击让产出、通胀、利率怎么动、动多少、持续多久"。读图三要素:方向(正/负)、量级(百分之几)、持续性(多久回到稳态)。

02 四类冲击的 IRF 分析

冲击传导机制产出通胀政策利率
技术冲击 $\varepsilon^a$供给侧:生产率↑→边际成本↓↑(持续)↓(反周期)
货币政策冲击 $\varepsilon^m$需求侧:利率↑→投资↓→产出↓→通胀↓↓( hump-shaped 驼峰)
需求冲击 $\varepsilon^d$需求侧:总需求↑→产出↑→通胀↑↑(同向)
金融冲击 $\varepsilon^{fk}$净值↓→溢价↑→投资↓↓(放大、持久)↓(央行宽松)
💡 识别"错误冲击"的指纹

技术冲击让产出与通胀反向(产出↑、通胀↓);需求/货币冲击让它们同向。如果你估计出的技术冲击 IRF 让通胀与产出同向,多半是模型设定或识别错了。这是 DSGE 审稿人最常挑的点。

03 历史分解与方差分解

历史分解(historical decomposition)

把每个历史时点 $\hat x_t$ 的实际偏离分解成各结构冲击贡献的和

历史分解
$$\hat x_t = \sum_j \sum_{s=0}^{t} \frac{\partial \hat x_{t}}{\partial \varepsilon_{j,t-s}}\,\varepsilon_{j,t-s}$$

用途:回答"2008 年衰退到底是技术、货币还是金融冲击造成的?"。Dynare 命令 histval_file + 估计后自动输出 oo_.historical_decomposition。历史分解图通常画成堆叠面积图(stacked area chart):横轴时间,纵轴产出偏离,每种颜色代表一个冲击的累计贡献,不同颜色堆叠的总和应恰好等于实际产出偏离线;某段时期某颜色"变厚",就说明该冲击在主导那段波动。

方差分解(variance decomposition)

回答"产出波动里多少比例来自技术冲击、多少来自金融冲击"。Dynare 估计后输出 oo_.variance_decomposition 表格。注意它是条件方差分解:问的是预测方差在不同期界上的归因——短视野(1 季度)常由金融/货币冲击主导,长视野(20 季度以上)逐渐由技术等持续冲击主导。论文里通常同时报告 4 季度与 20 季度两个期界,以展示冲击传导的时变结构。

✅ 论文常用组合

方差分解("哪个冲击解释最多波动")+ 历史分解("某次衰退谁主导演")+ IRF("这个冲击怎么传导")三件套,是 DSGE 实证章节的标准配置。

04 反事实模拟与条件预测

反事实模拟(counterfactual simulation)

固定其他冲击,只关掉某一个冲击,重跑模拟,看时间序列会怎样。例:"如果 2008 没有金融冲击,产出会跌这么多吗?"。Dynare 用 simulconditional_forecast 实现。

条件预测(conditional forecast)

给定未来若干期的某些变量路径(如"假设通胀未来 4 期锁定在 2%"),让模型内生预测其余变量。常用于央行预测:conditional_forecast_paths; + conditional_forecast;

05 Dynare 的 oo_ 结构体输出

求解/估计后,所有结果都在全局结构体 oo_ 里。论文绘图全靠这些字段:

字段内容用途
oo_.irfIRF 矩阵(变量×冲击×期数)画 IRF 图
oo_.dr.ghx/ghu政策函数系数手算 IRF
oo_.var二阶矩(方差、自相关、相关)矩匹配
oo_.historical_decomposition历史分解衰退归因
oo_.variance_decomposition方差分解冲击贡献占比
oo_.PosteriorTheoreticalMoments后验分布统计量贝叶斯估计

06 MATLAB 绘图代码

Dynare 自动生成的 IRF 图往往不够论文级。下面是一段可直接运行的 MATLAB 代码,把技术冲击对产出、通胀、利率的 IRF 画成论文质量图,带阴影置信带(贝叶斯估计后用)。

MATLAB · plot_irf.m(论文级 IRF 绘图)
% ======================================================================
% plot_irf.m  从 Dynare oo_.irf 画论文级 IRF 图
% 前提: 已运行 dynare nk_baseline.mod, 工作区有 oo_, M_
% ======================================================================
clear; clc; close all;

% --- 1) 取出 IRF: 假设冲击为 ea(技术), 变量为 y, pi, r ---
% Dynare 把 IRF 存在 oo_.irf 下, 字段名 = 变量名_冲击名
horizon = 1:40;                 % 横轴: 40 期
y_irf   = oo_.irf.yea;          % 技术冲击 ea 对 y 的 IRF
pi_irf  = oo_.irf.piea;         % 技术冲击 ea 对 pi 的 IRF
r_irf   = oo_.irf.rea;          % 技术冲击 ea 对 r 的 IRF

% --- 2) 贝叶斯后验: 取 16/50/84 分位数画置信带 ---
% 若用估计命令, 后验 IRF 存在 oo_.PosteriorIRF.metropolis.HPDinf / HPDsup
try
  y_lo = oo_.PosteriorIRF.metropolis.HPDinf.yea;
  y_hi = oo_.PosteriorIRF.metropolis.HPDsup.yea;
catch
  y_lo = y_irf*0.8;  y_hi = y_irf*1.2;   % 校准模型无置信带, 用 ±20% 示意
end

% --- 3) 画三行一列子图 ---
figure('Position',[100 100 700 750]);

subplot(3,1,1);
  fill([horizon fliplr(horizon)], [y_lo fliplr(y_hi)], ...
       [0.85 0.9 0.95],'EdgeColor','none'); hold on;
  plot(horizon, y_irf, 'b-','LineWidth',1.8);
  yline(0,'k:');  title('Output \hat{y}_t');
  ylabel('% dev. from SS');  grid on;

subplot(3,1,2);
  plot(horizon, pi_irf, 'r-','LineWidth',1.8);
  yline(0,'k:');  title('Inflation \hat{\pi}_t');
  ylabel('annualized pp');  grid on;

subplot(3,1,3);
  plot(horizon, r_irf, 'g-','LineWidth',1.8);
  yline(0,'k:');  title('Nominal Rate \hat{r}_t');
  xlabel('Quarters after shock'); ylabel('annualized pp'); grid on;

% --- 4) 导出为论文用 PDF/PNG ---
exportgraphics(gcf,'irf_tech_shock.pdf','ContentType','vector');
exportgraphics(gcf,'irf_tech_shock.png','Resolution',300);
disp('IRF 图已导出 irf_tech_shock.pdf / .png');

% ======================================================================
% 进阶: 把两个模型(无摩擦 vs BGG)叠在一张图对比
% plot(horizon, y_irf_noFric,'b-', horizon, y_irf_BGG,'r--','LineWidth',1.6);
% legend('No friction','BGG accelerator','Location','best');
% ======================================================================

07 如何在论文中呈现 IRF 图

Step 1 · 坐标轴与单位写清楚
纵轴标注 "Percent deviation from steady state",横轴 "Quarters after shock"。利率/通胀用 annualized percentage points。
Step 2 · 冲击归一化
统一冲击大小(如"1% 标准差的技术冲击"或"100bp 货币冲击"),否则跨图不可比。在图注里写清。
Step 3 · 贝叶斯后验带
估计模型画后验中位数 + 16/84(或 10/90)置信带;校准模型画单一线。
Step 4 · 一图多冲击 vs 一冲击多变量
论文常用"一个冲击 × 三个变量"的子图布局,方便讲故事;或"一个变量 × 四个冲击"对比传导。
Step 5 · 图注写经济学解释
图注不只写变量名,要点出"这是金融加速器放大效应"或"需求冲击产出通胀同向"。
Step 6 · 与 VAR/文献对照
审稿人常要求把模型 IRF 与结构 VAR(如 Christiano-Eichenbaum-Evans 货币冲击 VAR)画在同一张图上比对,说明模型是否"复现了数据中的脉冲形状"。这是 DSGE 模型被接受的关键说服力来源。

08 经典论文、常见错误与进阶

English · 金标准
Smets, F. & Wouters, R. (2007). Shocks and Frictions in US Business Cycles: A Bayesian DSGE Approach
AER, 97(3) · IRF 呈现的范本
其 Figure 1-3 的 IRF(含后验置信带)、历史分解、方差分解表格,是论文里 DSGE 实证部分的标准范式。
English · 方法论
Christiano, L., Eichenbaum, M. & Evans, C. (2005). Nominal Rigidities and the Dynamic Effects of a Shock to Monetary Policy
JPE, 113(1) · 货币冲击 IRF 标定标准
用 VAR 识别的货币冲击 IRF 作为"靶",让 DSGE 模型 IRF 去拟合,是 IRF 比对法的代表作。
中文 · 顶刊
刘斌 (2008). 我国DSGE模型的开发及在货币政策分析中的应用
《金融研究》 · 中文 IRF 呈现范本
示范了如何把技术、货币、需求冲击的 IRF 组织成论文图,并做方差分解解释中国经济波动来源。
中文 · 顶刊
杨天宇、孙挺等 · 《经济研究》DSGE 政策模拟系列
《经济研究》 · 反事实与条件预测
用反事实模拟评估中国货币政策规则(Taylor 规则 vs 相机抉择),示范了条件预测在政策分析中的用法。
❌ 常见错误

① 纵轴不标单位,读者不知是%还是百分点;② 冲击大小不统一,跨图误导;③ 技术冲击 IRF 让产出通胀同向(识别错);④ 把校准模型的 IRF 当后验带画;⑤ 历史分解不归一到 100%。

📚 进阶与下一步

① Dynare manual "IRF and simulation" 章;② 用 Dynare 的 var_decomphistoy_decomp 自动化分解表;③ 至此 DSGE 九大站点全部完成,回到 DSGE 总览 复习路线。