定量宏观经济建模与结构向量回归
下面给出一份“可直接上手”的路线图,把定量宏观建模与结构向量回归(SVAR)从“经济故事 → 矩阵写法 → 代码实现 → 结果解释”串成一条线,中间不摆公式墙,也避免软件命令堆砌,力求“看完就能复现”。
一、先分清三种“VAR”在宏观里的角色
- 简约式 VAR(Reduced-form VAR)
只是用数据自我投影,脉冲响应没结构含义,通常当“描述统计”用。 - 结构式 VAR(SVAR)
在简约式残差上施加一个 contemporaneous 结构(A0 或 A0+A1+…),让线性冲击有经济解释:技术、货币、财政、风险溢价……这是宏观论文里“识别需求冲击”的主战工具。 - DSGE-VAR/SVAR
把 DSGE 模型一阶近似解写成状态空间,再用 Bayesian 方法把理论矩匹配到数据矩,相当于“让 SVAR 的脉冲响应先验来自理论模型”。若你只是做实证,可跳过这层;若要做“理论对照”,就把 DSGE 脉冲响应当先验,后面步骤完全一样。
二、写模型:三步把故事变成矩阵
- 选变量——先问“我要识别什么冲击?”
例:技术冲击 → 选 TFP、工时、消费、投资;货币政策冲击 → 选政策利率、通胀、产出、信贷。 - 定滞后——用信息准则(AIC/BIC)即可,一般宏观季度数据 2–4 阶足够。
- 画因果链——把“谁当期不回应当谁”写成下三角(Cholesky)或长期零约束(Blanchard-Quah)或符号约束(Uhlig)。
例:技术冲击当期不影响工时(长期零约束),就把 A0^{-1} 对应的元素设 0;货币紧缩对产出当期非正(符号约束),就把该元素约束为 ≤0。
三、估计:两条路线都给你
路线 A:经典极大似然(Amodel)
- 用 Σ̂ 和 A0 的零约束做 FIML(Stata 的 svar, est(method(fiml));R 的 vars::SVAR())。
- 得 A0̂ 后,冲击 ε_t = A0̂^{-1}u_t,脉冲响应直接用 MA 系数 Θ_h = Φ_h A0̂^{-1}。
路线 B:Bayesian(Bmodel,推荐小样本)
- 先给简约式系数 β 和 Σ 加 Normal-Wishart 共轭先验。
- 把结构约束写成“截断正态”或“符号指示函数”,用 Gibbs+Metropolis 抽样。
- 每轮都画 Θ_h,后验 median + 16–84% 区间就是论文里那两条灰带。
代码:R 的 bvartools::bsvar(); Python 的 pymaclab + pymc;Stata 15+ 的 bayes: var。
四、检验:别让“看上去显著”骗你
- 识别检验:做“反向脉冲”——把约束掉的一方放松,看响应是否翻转;若翻转很大,说明原约束太狠。
- 稳健性:换阶数、换样本起止、换约束(Cholesky ↔ 符号),把关键响应图叠在一起,只要方向不变就可接受。
- 经济检验:把技术冲击的脉冲喂回 DSGE 校准,看是否也能解释 70% 以上的方差;若对不上,说明识别冲击里混了需求噪音。
五、结果讲故事:三句话就够
- “一个标准差技术冲击使 TFP 当跳 1%,工时先降后升,峰值在第 5 季度”——这是数量结论。
- “该冲击解释产出 60% 长期波动,需求冲击仅占 20%”——这是方差分解。
- “若央行按 Taylor 规则反应,则通胀脉冲被削掉 30%,说明货币政策可部分熨平技术冲击的通缩压力”——这是政策含义。
六、一行代码模板(Stata 示例,直接跑)
// 1. 读数据、设时间序列
import delimited macro_quarterly.csv, clear
gen qdate = tq(1990q1) + _n-1
tsset qdate
// 2. 选变量、滞后 4 阶
local y "tfp_hours_cons_inv"
varsoc `y', maxlag(8) // 选 4 阶
var `y', lags(1/4) exog(l1.policy_rate) // 简约式
// 3. SVAR:下三角识别技术冲击当期不回应工时
matrix A = (1,0,0,0 \ .,1,0,0 \ .,.,1,0 \ .,.,.,1)
svar `y', lags(1/4) aeq(A) est(method(fiml))
irf set techirf, replace
irf create tech, step(24)
irf graph irf, impulse(tfp) response(hours cons inv) byopts(yrescale)
// 4. 方差分解
irf table fevd, impulse(tfp) level(90)
跑完就能拿到论文里常见的“四图一表”。
七、常见坑提醒
- 变量必须同时平稳或协整;若含单位根,先做差分或 SVAR-VECM。
- 样本过短(<60 期)千万别用渐近标准误,直接上 Bayesian。
- 符号约束一定检查“边界堆积”——后验密度在 0 处鼓包,说明约束太紧,应放宽或改用软约束。
- 别把脉冲响应当“预测”用,它只是“如果其他冲击为零,该变量怎么走”,不是真实路径。
把以上七步串下来,你就完成了一个“从经济问题到 SVAR 量化”的完整闭环:故事 → 识别 → 估计 → 检验 → 政策解读。剩下的只是换数据、换约束、换先验,反复跑即可。祝建模顺利!