前置条件与学习依赖 / PREREQUISITES
数学 / 统计基础前向理性预期、欧拉方程;本页新增分段函数与互补松弛(complementary slackness)概念、离散状态的数值网格与迭代收敛判据。
经济学理论前置必须先吃透 10 NK 三方程:本页 IS 曲线、NKPC、Taylor 规则全部沿用,只在利率上加一个下界。
软件 / 计算前置MATLAB + Dynare ≥4.6(occbin 内建);Python 3 + numpy/scipy(全局求解器,本页给出)。
站内前置页面10 NK 三方程(内核)、15 扰动法(一阶/二阶,理解为何线性近似在 ZLB 失效)、13 财政与货币政策规则。
难度与路线位置进阶→前沿本页是 DSGE 数值方法的分水岭:一阶线性近似到此为止,必须上分段或全局方法。

01 概念直觉:为什么 ZLB 让线性模型失效

在前一页的 NK 三方程世界里,央行可以无限制地调利率:通胀低了就降息、产出差了就降息,实际利率总能把总需求拉回正轨。但现实中有一个硬约束——名义利率不能大幅低于零(更准确说是有效下界 ELB,约为 $-0.5\%\sim0\%$)。原因很直观:持有现金(通货)的名义回报是 0,如果银行存款利率是 $-2\%$,理性人会把钱取出来压在床垫下,银行体系就被挤兑了。于是名义利率存在一个下界 $\underline i$:

直觉性约束
$$i_t \ge \underline i \qquad(\text{季度口径,}\underline i\approx 0)$$

问题出在求解。标准 DSGE 用对数线性化 + 一阶扰动(见 15 扰动法),它假设模型在一个稳态附近"光滑",政策函数是状态变量的线性函数。但 ZLB 是一个不等式、分段、偶尔才绑定的约束:平时利率离零很远,约束形同虚设;一旦自然利率暴跌(2008 金融危机、2020 疫情),Taylor 规则建议的利率跌破零,央行被迫停在 $\underline i$。政策函数在"绑定 vs 松弛"两个区域之间不光滑、有拐点,一阶泰勒展开根本跨不过去。

核心矛盾:"偶尔绑定"≠"永远绑定"

这类约束叫 Occasionally Binding Constraint(OBC,偶发约束):大部分时间不绑定,小部分时间绑定。它不同于"永远绑定"(直接改方程即可)或"永远松弛"(标准线性模型),难点在于经济体会预期到自己将来可能撞上下界,这种"对未来绑不绑的预期"会反过来影响今天的消费、定价与通胀——预期效应是 OBC 模型最反直觉、也是最重要的部分

02 经济环境与假设:NK 三方程 + 利率下界

我们直接复用 10 NK 三方程的内核,只把 Taylor 规则换成"带地板的版本"。先回顾三大线性化核心(全部变量为偏离稳态的季度口径):

Eq.N10/N11 · IS 曲线与 NKPC(沿用三方程页)
$$\hat y_t = E_t\hat y_{t+1} - \tfrac{1}{\sigma}\big(\hat i_t - E_t\hat\pi_{t+1} - \hat r_t^n\big)$$ $$\hat\pi_t = \beta E_t\hat\pi_{t+1} + \kappa\hat y_t$$

变量:$\hat y_t$ 产出缺口;$\hat\pi_t$ 通胀;$\hat i_t$ 名义利率;$\hat r_t^n$ 自然利率。参数:$\sigma$ 风险厌恶、$\kappa$ NKPC 斜率、$\beta$ 贴现。直觉:实际利率 $(\hat i_t-E_t\hat\pi_{t+1})$ 越高,当期需求越弱;正产出缺口推通胀。

关键修改在政策规则。央行希望按 Taylor 规则设定一个"意愿利率" $i_t^\ast$(shadow rate,影子利率),但受零下限约束,实际利率取二者较大值:

Eq.Z1 · 影子利率与实际利率的 max 关系(ZLB 核心)
$$i_t^\ast = \phi_\pi \hat\pi_t + \phi_y \hat y_t + \hat\nu_t, \qquad \boxed{\hat i_t = \max\big(\underline i,\ i_t^\ast\big)}$$

设定理由:$\max$ 把"央行想做的事"(Taylor 规则)和"能做的事"(不低于零)分开。$i_t^\ast$ 是影子利率——如果不受约束央行会设的利率;$\hat i_t$ 是实际成交的政策利率。参数:$\phi_\pi,\phi_y$ Taylor 系数;$\hat\nu_t$ 货币政策冲击;$\underline i$ 下界(对数线性模型里设为 0,对应"利率不能再降")。经济直觉:当 $i_t^\ast>\underline i$,约束松弛,$\hat i_t=i_t^\ast$;当 $i_t^\ast<\underline i$,约束绑定,$\hat i_t=\underline i$,央行"想降降不动"。

影子利率(shadow rate)≠ 实际利率

$\hat i_t$ 是可观测的政策利率(到了 ZLB 就一直贴在 0 附近);$i_t^\ast$ 是不可观测的、被约束压住的"应有"利率。量化宽松(QE)等非常规政策相当于在不抬高 $\hat i_t$ 的情况下压低 $i_t^\ast$。文献里用 Wu-Xia、Krippner 影子利率把它从收益率曲线上"估"出来(见 §9)。把影子利率当实际利率用,是新手第一大错。

自然利率 $\hat r_t^n$ 被建模为高度持续的 AR(1),它就是把经济推入 ZLB 的"扳机":

Eq.Z6 · 自然利率冲击过程(ZLB 的触发源)
$$\hat r_t^n = \rho_r \hat r_{t-1}^n + \varepsilon_t^r, \qquad \varepsilon_t^r\sim\mathcal N(0,\sigma_r^2)$$

设定理由:2008 后大缓和时代估计的 $\rho_r$ 高达 0.9~0.95,意味着自然利率暴跌后要很多年才能回升——这段时间 ZLB 一直绑着。直觉:当 $\hat r_t^n$ 大幅为负(家庭想储蓄、企业不想投资),即使 $\hat i_t=0$,实际利率 $-\hat\pi_{t+1}$ 仍然太高,需求疲软。

03 完整推导:互补松弛与两种状态

$\max(\underline i,i_t^\ast)$ 这个式子,在优化理论里对应一个不等式约束 + 拉格朗日乘子。把它写严谨,就是 KKT 条件里的互补松弛(complementary slackness)

3.1 从 max 到互补松弛条件

引入一个非负的"绑定乘子" $\mu_t\ge 0$,度量 ZLB 有多紧。$\max(\underline i,i_t^\ast)$ 等价于下面两条约束同时成立:

Eq.Z2 · ZLB 的互补松弛条件(KKT 形式)
$$\hat i_t \ge \underline i, \qquad i_t^\ast \le \hat i_t, \qquad \boxed{\mu_t\ge 0,\ \ \mu_t\cdot(\hat i_t - i_t^\ast)=0}$$

含义:乘子 $\mu_t$ 只能在约束绑定的地方非零。互补项 $\mu_t(\hat i_t-i_t^\ast)=0$ 是关键:① 若约束松弛($i_t^\ast>\underline i$),则 $\hat i_t=i_t^\ast$,乘子 $\mu_t=0$;② 若约束绑定($i_t^\ast<\underline i$),则 $\hat i_t=\underline i$,乘子 $\mu_t>0$。直觉:"不绑就不惩罚,绑了才惩罚"——这正是分段线性求解器(OccBin)的数学原型。

3.2 状态 A:约束松弛(normal regime)

当 $i_t^\ast>\underline i$,乘子为零,模型退回标准三方程:

Eq.Z3 · 松弛态方程组
$$\hat y_t = E_t\hat y_{t+1} - \tfrac{1}{\sigma}\big(\hat i_t - E_t\hat\pi_{t+1} - \hat r_t^n\big)$$ $$\hat\pi_t = \beta E_t\hat\pi_{t+1} + \kappa\hat y_t$$ $$\hat i_t = \phi_\pi \hat\pi_t + \phi_y \hat y_t + \hat\nu_t \quad(\text{Taylor 规则完全生效})$$

3.3 状态 B:约束绑定(ZLB regime)

当 $i_t^\ast<\underline i$,利率被钉在地板上,Taylor 规则的反应系数暂时失效

Eq.Z4 · 绑定态方程组
$$\hat y_t = E_t\hat y_{t+1} - \tfrac{1}{\sigma}\big(\underline i - E_t\hat\pi_{t+1} - \hat r_t^n\big)$$ $$\hat\pi_t = \beta E_t\hat\pi_{t+1} + \kappa\hat y_t$$ $$\hat i_t = \underline i \quad(\text{利率被钉死,}\phi_\pi,\phi_y\text{ 不再起作用})$$

关键推导:把 $\hat i_t=\underline i$(在对数线性模型 $\underline i=0$)代入 IS 曲线,实际利率变成 $-\hat\pi_{t+1}-\hat r_t^n$。此时央行无法通过降息对冲:$\hat r_t^n$ 越负,$\hat y_t$ 越往下掉;而且因为 $E_t\hat\pi_{t+1}$ 出现在分母符号里,通缩预期会自我加强——这就是 ZLB 陷阱的数学种子。

为什么线性化模型在这里直接报错/失真

状态 A 与状态 B 是两套不同的方程(第三式一个是 Taylor 规则、一个是常数)。一阶扰动法只在一个稳态附近展开,假设政策函数处处光滑,根本不知道有"切换"这回事。若强行在原点做一阶线性近似,Dynare 会把 $\hat i_t=\max(0,\cdot)$ 线性化成 $\hat i_t=i_t^\ast$(因为稳态 $\hat i=0$ 处 max 的子梯度选错),等于假装 ZLB 不存在,2008 那种大冲击的 IRF 完全算错。

04 ZLB 陷阱:预期驱动的通缩稳态

ZLB 最深刻的含义不是"政策暂时失效",而是它打开了第二个均衡。Eggertsson-Woodford(2003)、Benhabib-Schmitt-Grohé-Uribe(2001)证明:在 ZLB 下,理性预期模型存在一个预期驱动的通缩稳态(deflationary / liquidity-trap steady state)

4.1 稳态的两条候选

长期稳态下 $E_t\hat y_{t+1}=\hat y_t=0$、$E_t\hat\pi_{t+1}=\hat\pi_t=\bar\pi$。把稳态代入,系统有两个不动点:

Eq.Z5 · 两个稳态的推导

目标稳态(正常):$\bar\pi=0,\ \bar i=\bar r^n$,Taylor 原理 $\phi_\pi>1$ 保证它确定。

通缩稳态(陷阱):此时 $\hat i_t=\underline i$ 绑定,IS 稳态要求 $\underline i-\bar\pi=\bar r^n$。在名义下界 $\underline i=0$ 下得 $\bar\pi=-\bar r^n<0$——通胀为负,利率贴着零,产出低于自然水平,且自我维持

直觉:如果所有人都预期"央行救不了、价格会跌",企业就降价→实际利率上升(因为 $i=0$ 降不动)→需求更弱→企业更降价,预期自我实现。日本 1999 年后的"失去的二十年"就是这个均衡的现实版。

4.2 自然利率冲击如何触发 ZLB

第 1 步:自然利率暴跌
$\varepsilon_t^r<0$ 使 $\hat r_t^n$ 大幅为负(去杠杆、需求不足、储蓄过剩)。此时 Taylor 规则"想要"的 $i_t^\ast=\phi_\pi\hat\pi_t+\phi_y\hat y_t$ 跌破 $\underline i$。
第 2 步:央行撞上下界
$\hat i_t=\underline i$,无法再降息。实际利率 $\hat i_t-E_t\hat\pi_{t+1}$ 相对自然利率仍然偏高,产出缺口转负。
第 3 步:预期恶化放大衰退
负产出缺口→通胀下降→$E_t\hat\pi_{t+1}$ 下降→实际利率进一步上升→产出更差。因为央行知道将来一段时间还会卡在 ZLB,今天的降息空间被预期"预先封死"。
第 4 步:缓慢退出
只要 $\hat r_t^n$ 慢慢回升到足够高,$i_t^\ast$ 重新越过 $\underline i$,约束解除,模型回到状态 A,经济缓慢爬回目标稳态。

05 求解方法 I:OccBin 分段线性解(Guerrieri-Iacoviello 2015)

处理 OBC 有两条路线:分段线性(便宜、可估计、够用)和全局非线性(贵但精确)。本节讲第一条,也是 Dynare 内建的 occbin 工具箱。

5.1 核心思想:把"切换"本身当成状态

OccBin(Occasionally Binding)不做全局近似,而是承认模型在两个 regime 间切换:用两套线性方程(松弛态 Eq.Z3 / 绑定态 Eq.Z4),并在每一个时点、每一条模拟路径上判断约束绑没绑定,用一个确定性的前向迭代把"今天绑不绑"与"明天预期绑不绑"联立求解。

OccBin 的求解逻辑(时间迭代)
$$\text{给定未来 }T\text{ 期一定会离开 ZLB} \Rightarrow \text{从 }T\text{ 倒推每期}\Rightarrow \text{选择使约束满足的 regime}$$

它假设:足够远的未来,经济一定回到松弛态(ZLB 是临时的)。于是从未来已知端点往回推,逐期判断"这一期按绑还是松算"。这是一种分段线性 + 预期一致的局部解,速度快到可以做贝叶斯估计。

5.2 与一阶扰动的本质区别

维度一阶扰动(标准 Dynare)OccBin 分段线性全局非线性
政策函数处处光滑线性分段线性,按 regime 切换真正非线性(凸/凹、拐点)
ZLB 处理直接忽略 max,算错显式声明约束,逐期判断网格上迭代自然体现
预期效应无(不知将来会绑)有(倒推未来 regime)有(政策函数含全状态空间)
计算成本毫秒级秒~分钟级,可估计分钟~小时级,难估计
精度小波动、远离 ZLB大冲击、临时 ZLB深 ZLB、多重稳态、长持续

5.3 Dynare 的 occbin 命令长什么样

OccBin 在 Dynare 里通过 occbin; 块声明约束,并写两个 model 块:第一个是"约束不绑"的参考模型(Taylor 规则生效),第二个是"约束绑定"的受限模型(利率钉在 $\underline i$)。§7 给出完整可运行工程。

06 求解方法 II:全局非线性方法

当 ZLB 很深、持续很久,或想认真研究通缩稳态、多重均衡时,OccBin 的"假设终将脱离 ZLB"就不够了,必须上全局求解(global solution):在整个状态空间上迭代出真正的非线性政策函数。

6.1 值函数迭代(VFI, Value Function Iteration)

把代表性家庭的值函数 $V(s)$ 在状态 $s$(这里是自然利率状态 $\hat r^n$)的网格上迭代:猜一个 $V(s)$,对每个网格点求解 Bellman 方程取最大,更新 $V$,直到收敛。优点是收敛性有理论保证(压缩映射);缺点是 curse of dimensionality——状态一多网格指数爆炸,NK 三方程全局还能算,中尺度模型就不行了。

6.2 政策函数迭代(PFI / 时间迭代)

不迭代值函数,直接迭代政策函数 $g(s)$:猜 $\hat y(\cdot),\hat\pi(\cdot)$ 作为"明天"的策略,用 IS/NKPC/ZLB 三式解出"今天"的最优 $\hat y,\hat\pi$,更新策略函数直到收敛。它比 VFI 快一个量级,且天然处理 max 约束——今天算 $\hat i_t=\max(\underline i,\phi_\pi\hat\pi_t+\phi_y\hat y_t)$ 就行,不需要光滑假设。注意:纯前望 NK 在深 ZLB 绑定区局部特征根略大于 1,朴素逐点时间迭代可能数值发散;本页 §8 的代码改用"全网格残差一次性求根"的更稳实现,思想仍是在网格上逼近政策函数。

6.3 投影法(Projection / Chebyshev)

把政策函数用 Chebyshev 多项式基展开 $\hat y(s)\approx\sum_k a_k T_k(s)$,用残差正交条件(配点法 collocation)定系数 $a_k$。状态少时精度高、光滑;但状态空间一高,配点与基函数系数也会爆炸,且不擅长"有拐点"的政策函数(ZLB 的 max 就是拐点)。

6.4 参数化期望(PEA, Parameterized Expectations)

Marcet 提出:不近似政策函数,而近似期望项 $E_t[\hat y_{t+1}],E_t[\hat\pi_{t+1}]$ 为状态的多项式。模拟长序列、用最小二乘更新多项式系数,迭代收敛。适合有随机模拟需求、且期望项维数低的模型。

方法选择决策树

① 只是想让 IRF 在大冲击下别爆炸、要做贝叶斯估计 → OccBin(首选,便宜)。② 状态少(≤3)、ZLB 深且想研究多重稳态/福利 → PFI/VFI 全局。③ 政策函数光滑、想要高精度导数 → 投影法。④ 模型大但期望项低维 → PEA。文献主流:OccBin 做估计,全局方法做"理论性质"分析。

07 Dynare .mod:完整 OccBin 工程

下面是一个完整可运行的 OccBin .mod,存为 zlb_occbin.mod。结构:第一个 model; 块写"无约束"的 Taylor 规则版;occbin; 块声明下界约束;第二个 model(linear); 块写"绑定"版(利率钉死)。运行 dynare zlb_occbin.mod

Dynare / zlb_occbin.mod(完整 OccBin 工程)
// ============================================================
// zlb_occbin.mod  ——  NK 三方程 + 名义利率零下限(OccBin)
// 运行:dynare zlb_occbin.mod
// 思想:两套 model 块分别对应 "约束松弛" 与 "约束绑定"
//       occbin 块声明 i >= i_lb,绑定时把 i 钉到下界
// ============================================================

var  y pi i rn ;
varexo eps_rn ;

parameters beta sigma varphi epsilon theta kappa ...
           phi_pi phi_y rho_rn i_lb;

// ---------- 深参数校准(与 NK 三方程页一致) ----------
beta    = 0.99;
sigma   = 1.0;
varphi  = 1.0;
epsilon = 6.0;
theta   = 0.75;
kappa   = (1-theta)*(1-beta*theta)/theta*(sigma+varphi)/(1+epsilon*varphi);
phi_pi  = 1.5;
phi_y   = 0.125;
rho_rn  = 0.90;
i_lb    = 0.0;          // 零下界(对数线性模型里取 0)

// ============================================================
// 【model 块 1】约束【松弛】:Taylor 规则完全生效
// ============================================================
model;
// (1) IS 曲线
y = y(+1) - (1/sigma)*( i - pi(+1) - rn );
// (2) NKPC
pi = beta*pi(+1) + kappa*y;
// (3) Taylor 规则(无下界的"影子"意愿利率)
i = phi_pi*pi + phi_y*y;
// (4) 自然利率 AR(1)
rn = rho_rn*rn(-1) + eps_rn;
end;

// ============================================================
// 【occbin 块】声明偶发约束:名义利率不能低于 i_lb
// ============================================================
occbin;
var i;                          // 被约束的变量
parameters i_lb;                // 下界参数
constraints;
  i >= i_lb;                    // 不等式约束
restrictions;
  i = i_lb;                     // 一旦绑定,把 i 钉到下界(替换 Taylor 规则)
end;

// ============================================================
// 【model 块 2】约束【绑定】:利率钉死在 i_lb
// 只把第三式换成 i = i_lb,其余与块1相同
// ============================================================
model(linear);
y = y(+1) - (1/sigma)*( i - pi(+1) - rn );
pi = beta*pi(+1) + kappa*y;
i = i_lb;                       // 关键区别:不再按 Taylor 规则调
rn = rho_rn*rn(-1) + eps_rn;
end;

// ---------- 初始值(正常稳态原点) ----------
initval;
 y = 0; pi = 0; i = 0; rn = 0;
end;
steady;

// ---------- 自然利率冲击(一次性大负冲击推入 ZLB) ----------
shocks;
var eps_rn; stderr = 0.01;
end;

// 给一个大的负自然利率冲击(-3%),观察经济如何撞入并走出 ZLB
// periods=80:模拟 80 个季度;replic:确定性模拟路径
shocks;
var eps_rn = (-0.03);   // 第 1 期一个 -3% 的自然利率冲击
end;

occbin_setup(display_occbin);
simul(periods=80);

// 想对比"无约束"版本:把 occbin 块与第二个 model 块删掉,
// 直接 stoch_simul 跑块1即可,会看到利率被允许降到负值(错误!)
Dynare 版本注意

不同 Dynare 版本的 OccBin 语法略有差异:≥4.6 用 occbin; 块 + 双 model 块;更早版本用 occbin_setup; / occbin_solver; 命令式写法。Guerrieri-Iacoviello 官方 replication 文件 occbin_example.mod 是最权威的对照。若报"inconsistent model blocks",多半是两个 model 块的变量声明没对齐。

08 Python 全局求解器:状态网格 + 联立求根

下面是一个完整可运行的全局求解器,用 numpy/scipy 在自然利率 $\hat r^n$ 网格上求政策函数。状态取自然利率,用 Rouwenhorst 离散 AR(1);控制 $\hat y,\hat\pi$,利率直接取 $\max(\underline i,\cdot)$。我们把全网格的 IS/NKPC/ZLB 残差堆叠成一个大方程组,一次性求根——这比朴素的时间迭代更稳,能避免深 ZLB 区的数值发散。

Python / zlb_global_solve.py(全局非线性求解器:网格+联立求根)
# ============================================================
# zlb_global_solve.py  ——  NK三方程 + ZLB 的全局非线性求解
# 方法:在状态 rn 网格上,把每个网格点的 IS/NKPC/ZLB 残差
#       全部堆叠成一个大的非线性方程组,用 fsolve 一次性求根。
# 说明:纯前望 NK 在"深 ZLB 绑定区"局部特征根>1,朴素的
#       时间迭代会发散;直接联立求根能稳定收敛到全局政策函数。
# 状态:自然利率 rn(AR(1),用 Rouwenhorst 离散)
# 控制:产出缺口 y, 通胀 pi, 名义利率 i
# 依赖:numpy, scipy
# ============================================================
import numpy as np
from scipy.optimize import fsolve

# ---------- 1. 深参数(与 Dynare 一致) ----------
beta    = 0.99      # 贴现因子
sigma   = 1.0       # 风险厌恶
kappa   = 0.0245    # NKPC 斜率(由深参数推出)
phi_pi  = 1.5       # Taylor 通胀系数
phi_y   = 0.125     # Taylor 产出系数
rho_rn  = 0.90      # 自然利率持续性
sd_rn   = 0.01      # 自然利率 innovation 标准差
i_lb    = 0.0       # 名义利率零下界(对数线性口径)

# ---------- 2. 用 Rouwenhorst 把 AR(1) 离散成状态网格 ----------
N = 21                              # 自然利率网格点数
p = (1 + rho_rn) / 2.0              # Rouwenhorst 相邻转移概率
def rouwenhorst(N, p, q):
    # 递归生成 N 点马尔可夫链转移矩阵 Pi
    Pi = np.array([[p, 1-p], [1-q, q]])
    for _ in range(N-2):
        a = np.zeros((Pi.shape[0]+1, Pi.shape[1]+1))
        a[:-1, :-1] += p*Pi
        a[:-1, 1:]  += (1-p)*Pi
        a[1:, :-1]  += (1-q)*Pi
        a[1:, 1:]   += q*Pi
        a[1:-1, :] /= 2
        Pi = a
    return Pi
Pi = rouwenhorst(N, p, p)
# 状态网格:对称中心 0,跨约 3.5 个无条件标准差
g = 3.5*sd_rn/np.sqrt(1-rho_rn**2)
rn_grid = np.linspace(-g, g, N)

# ---------- 3. 定义残差方程组(把 N 个网格点全部堆叠) ----------
# 未知向量 x = [y(0..N-1), pi(0..N-1)],共 2N 个未知量
def residuals(x):
    y  = x[:N]          # 各网格点的产出缺口政策值
    pi = x[N:]          # 各网格点的通胀政策值
    # 期望项:E[y']=Pi@y, E[pi']=Pi@pi(对明天政策函数求期望,
    #         天然包含"将来可能撞 ZLB"的前向预期)
    Ey  = Pi @ y
    Epi = Pi @ pi
    r = np.zeros(2*N)
    for j in range(N):
        # 意愿(影子)利率与实际利率:ZLB 取 max(i_lb, 意愿)
        i_star = phi_pi*pi[j] + phi_y*y[j]
        i = i_star if i_star >= i_lb else i_lb   # 关键的分段 max
        # IS 曲线残差:y_j = Ey_j - (1/sigma)(i_j - Epi_j - rn_j)
        r[j]   = y[j] - Ey[j] + (1/sigma)*(i - Epi[j] - rn_grid[j])
        # NKPC 残差:pi_j = beta*Epi_j + kappa*y_j
        r[N+j] = pi[j] - beta*Epi[j] - kappa*y[j]
    return r

# ---------- 4. 初始猜测:无约束线性解附近 ----------
# 无约束时 y 对 rn 的导数约为 2.78(由深参数推出),pi 约 0.625*y
x0 = np.concatenate([2.78*rn_grid, 0.625*2.78*rn_grid])

# ---------- 5. 直接联立求根(全局政策函数) ----------
sol, info, ier, msg = fsolve(residuals, x0, full_output=True, xtol=1e-11)
y_policy  = sol[:N]
pi_policy  = sol[N:]
print(f"[求解] fsolve 收敛状态 ier={ier}")

# ---------- 6. 后处理:实际利率政策函数与绑定标记 ----------
i_star  = phi_pi*pi_policy + phi_y*y_policy
i_policy = np.maximum(i_lb, i_star)            # 实际利率(含 ZLB)
binding  = i_policy <= i_lb + 1e-9             # 哪些状态 ZLB 绑定

# ---------- 7. 打印关键结果 ----------
print("\n=== 全局政策函数(自然利率由低到高) ===")
print(f"{'rn':>8}{'y':>10}{'pi':>10}{'i(实际)':>10}{'ZLB绑定?':>10}")
for j in [0, N//4, N//2, 3*N//4, N-1]:
    print(f"{rn_grid[j]:8.4f}{y_policy[j]:10.4f}{pi_policy[j]:10.4f}"
          f"{i_policy[j]:10.4f}{str(binding[j]):>10}")
print("\n经济直觉:")
print("· rn 很负(深衰退)时 y 大幅为负、i 被钉在 0(ZLB 绑定);")
print("· 因为央行降不动息,通缩+衰退被前向预期放大;")
print("· rn 回到 0 附近,约束松弛,i 随 Taylor 规则正常变动。")
怎么读这个求解器

全局网格:在自然利率 $r^n$ 的整个网格上求政策函数 $\hat y(\cdot),\hat\pi(\cdot)$,而不是只在原点线性化——这是"全局"二字的含义。② 分段 max:每个网格点的实际利率 $i=\max(\underline i,\phi_\pi\hat\pi+\phi_y\hat y)$,绑不绑由解本身内生决定。③ 期望:$E[y_{t+1}]=\sum_k\pi_{jk}y_{k}$ 用转移矩阵对"明天政策函数"加权,天然包含了"将来可能撞 ZLB"的前向预期。④ 用 fsolve 把全网格残差一次性求根,比朴素时间迭代更稳(深 ZLB 绑定区局部特征根 >1,单步迭代会发散)。收敛后 $\hat y(\cdot),\hat\pi(\cdot),\hat i(\cdot)$ 就是全局非线性政策函数,可直接画 IRF、算福利。

09 估计与数据:ZLB 时期识别与影子利率

9.1 主要 ZLB 时期的经验识别

经济体ZLB/ELB 时期政策利率代理数据含义
美国2008Q4 – 2015Q4Federal Funds Rate ≈ 0–0.25%大衰退后七年零利率;2015.12 首次加息退出
欧元区2014 – 2022DFR(存款便利利率)略低于 0ELB(有效下界)而非严格零;2022 通胀回升后退出
日本1999 – 至今无担保隔夜拆借利率 ≈ 0(后转负)史上最长 ZLB,通缩稳态的现实样本
美国(疫情)2020Q1 – 2022Fed Funds Rate 回零短暂二次撞 ZLB

9.2 影子利率数据:Wu-Xia 与 Krippner

ZLB 期间名义利率贴地,用 $i_t$ 当政策立场会严重低估宽松程度(QE、前瞻指引都在压低长端/影子利率)。文献用影子利率补全这段:

  • Wu-Xia Shadow Rate(Wu-Xia 2016):用无套利 AFNS 收益率曲线模型,从整个收益率曲线反推出"若没有零约束,短端利率本该是多少"。ZLB 期间它为,正好度量 QE 的额外宽松。数据公布于亚特兰大联储网站。
  • Krippner(2013)Shadow Rate:同样基于期权定价框架(shadow-rate / term-structure model),方法略异但结论一致,圣路易斯联储 FRED 上有序列 BWAMESS / KRNSR 等。
常见误用:影子利率 ≠ 可借贷的实际利率

影子利率是从收益率曲线反推的"应有短端利率",不是任何人实际借贷的价格,不能直接塞进预算约束当 $i_t$ 用。它的正确用法是:① 作为政策立场的度量(画图、做 VAR);② 估计 DSGE 时作为 ZLB 期间"无约束政策利率"的代理观测。把影子利率当观测利率硬塞进观测方程,量纲与传导都会错。

9.3 贝叶斯估计中如何处理 OBC

标准贝叶斯 DSGE 用卡尔曼滤波,但 ZLB 让模型非线性、非高斯,卡尔曼不再适用。三条主流路线:

路线 A:OccBin + 粒子滤波
用 OccBin 求分段线性解,再用粒子滤波(particle filter)替代卡尔曼算似然(Guerrieri-Iacoviello 的做法)。能直接对 ZLB 时期数据做贝叶斯估计。
路线 B:分段估计 / 删去 ZLB 样本
粗糙但常见:只用 ZLB 之前的样本估计参数,再在 ZLB 样本上做条件预测 / 反事实。缺点是丢掉了 2008 后的信息。
路线 C:影子利率补全观测
把 2008–2015 年的观测政策利率换成 Wu-Xia 影子利率,让观测方程在样本期"连续",再用标准卡尔曼。简单但把影子利率当观测,需做稳健性。

10 模拟与结果:IRF、财政乘数与前瞻指引

10.1 绑定 vs 无约束 IRF 的对比

对一个同样大的负自然利率冲击,OccBin 解与"假装无约束"解的 IRF 差异巨大:

  • 无约束(错误):名义利率自由降到 $-2\%$,实际利率下降,产出只是小幅下滑——严重低估衰退
  • 绑定(正确):利率钉在 0,无法降息;产出缺口大幅为负、通胀转负;而且因为预期"未来几期还绑着",同期跌幅被放大,复苏更慢。

10.2 财政乘数在 ZLB 处放大(Christiano-Eichenbaum-Rebelo 2011)

这是 ZLB 文献最著名的定量结论。正常时期政府支出乘数约 0.5~1(部分挤出);但在 ZLB:

Eq.Z7 · 为什么 ZLB 处财政乘数 > 1
$$\Delta G\uparrow \Rightarrow \hat y\uparrow \Rightarrow \hat\pi\uparrow \Rightarrow E_t\hat\pi_{t+1}\uparrow \Rightarrow \underbrace{(\underline i - E_t\hat\pi_{t+1})}_{\text{实际利率}}\downarrow$$

传导链:政府花钱→产出上升→通胀上升→由于 $\hat i_t=\underline i$ 降不动,通胀上升直接压低实际利率→进一步刺激私人消费投资→乘数自我放大。CER(2011) 校准出 ZLB 处乘数可达 2 甚至更大。直觉:正常时期政府发债会推高利率挤私人;ZLB 时利率被钉死,"挤出"变成"挤入"。

10.3 前瞻性指引(Forward Guidance)效应与"谜题"

央行承诺"在经济复苏后仍维持低利率"。由 IS 曲线 $y=E_t y_{t+1}-\frac1\sigma(i-E\pi_{t+1}-r^n)$,远期未来的利率承诺,会通过 $E_t y_{t+1}$ 一直传导到今天。但标准模型预测:越远的指引效应越大(远期指引谜题 forward guidance puzzle)——这在理论上不合理(应该越远越弱),是线性 NK 模型的著名缺陷,需引入折扣预期、有限承诺等修正(Del-Negro-Macro 2015)。

10.4 福利分析

ZLB 造成的福利损失远超正常波动:① 无法对冲大需求冲击,产出缺口与通胀波动都被放大;② 通缩稳态一旦预期形成,可能长期困在低水平均衡。政策含义由此而来:提高通胀目标(给名义利率更多降息空间)、财政货币协同、果断 QE 管理预期,都是为了降低"撞 ZLB 的概率与代价"。

11 论文、常见错误与交叉链接

11.1 必读论文

English · 奠基
The Zero Bound on Interest Rates and Optimal Monetary Policy
Eggertsson G.B. & Woodford M., Brookings Papers on Economic Activity, 2003(1)
ZLB 现代理论的奠基之作。系统推导零下界下的最优货币政策、"承诺更低久利率"(forward guidance)的价值,与"通缩陷阱"机制。本页 §4、§10 的理论骨架。
English · 财政乘数
When Is the Government Spending Multiplier Large?
Christiano L., Eichenbaum M. & Rebelo S., Journal of Political Economy, 2011, 119(1)
证明 ZLB 处政府支出乘数可远大于 1(甚至 >2),核心机制即 Eq.Z7:财政支出推通胀→压低实际利率→挤入私人需求。本页 §10.2 的出处。
English · 求解方法
OccBin: A Toolkit for Solving Dynamic Models with Occasionally Binding Constraints Easily
Guerrieri L. & Iacoviello M., Journal of Economic Dynamics and Control, 2015, 59
OccBin 工具箱的原始论文。讲清分段线性、双 model 块、预期一致倒推的算法,附 Dynare 实现。本页 §5、§7 的方法来源。
English · 影子利率
Measuring the Stance of Monetary Policy in Zero Lower Bound Environments / Measuring the Macroeconomic Impact of Monetary Policy at the ZLB
Krippner L., Economics Letters 2013;Wu J.C. & Xia F.D., J. Money, Credit & Banking, 2016, 48(2-3)
两支影子利率的代表。从收益率曲线反推 ZLB 期间"应有短端利率",是本页 §9.2 数据的来源。
中文 · ZLB 与金融稳定
零利率下限、货币政策与金融稳定
杨光、李力、郝大鹏,《财经研究》2017 年第 43 卷第 1 期,第 41–50 页
国内较早把 ZLB 约束嵌入 DSGE、系统讨论"零利率下货币政策与金融稳定"权衡的论文,方法上采用分段/不等式约束求解,是中文 ZLB-DSGE 的代表。
中文 · 供求冲击与中国波动
零利率下限约束、供求冲击与中国经济波动
刘尧成、庄雅淳,《首都经济贸易大学学报》2019 年第 1 期,第 24–32 页
构建 DSGE,分"是否存在零利率下限"两情形比较供求冲击对产出、通胀、实际利率波动的影响,强调"费雪效应"在 ZLB 下改变冲击方向。
中文 · 混合型货币政策框架
零利率下限约束、宏观经济波动与混合型货币政策框架
杨源源、于津平、高洁超,《财贸经济》2020 年
把 ZLB 不等式约束(采用 Holden-Paetz 2012 的处理)嵌入中国"数量型+价格型"混合型货币政策框架,讨论低利率环境下的政策搭配,方法与本页互补松弛一致。
中文 · 负利率与存款利率下限
存款利率零下限与负利率传导机制
孙国峰、何晓贝,中国人民银行工作论文 2018 年第 2 号
用 DSGE 论证:存款利率零下限如何阻碍负利率政策传导;在信用货币体系下银行可不依赖存款放贷,故负利率可穿透零区间。是中文界讨论"利率下界传导"最有影响力的工作论文之一。

11.2 常见错误(6 条)

错误 1:在 ZLB 处继续用一阶线性化(log-linearize around origin)

一阶扰动在 $\hat i=\max(0,\cdot)$ 的拐点处线性化失败,会把利率"允许降到负值",大衰退 IRF 完全失真。只要要研究 ZLB,就必须 OccBin 或全局方法。

错误 2:写 occbin 时两个 model 块变量/方程不对齐

松弛块与绑定块除了"被约束那一行",其余变量声明与方程数必须严格一致,否则 Dynare 报"inconsistent models"。常见漏改:绑定块忘了把自然利率 AR(1) 也抄进去。

错误 3:忽略"预期将来会绑 ZLB"的前向效应

若只用"今天绑不绑"的静态判断、不从未来倒推,就丢掉了 OBC 最核心的预期机制——而这恰恰是 ZLB 放大衰退、财政乘数变大的来源。OccBin 倒推、PFI 迭代都在补这一项。

错误 4:把影子利率当成可借贷的实际利率塞进预算约束

Wu-Xia / Krippner 影子利率是收益率曲线反推的"应有利率",是政策立场度量,不是任何主体的借贷成本。错当观测利率直接进模型,传导与似然全错。

错误 5:忽视 forward guidance puzzle,盲目相信远期指引

标准线性 NK 预测"越远的承诺效应越大",这是模型缺陷(预期没有被充分贴现),不是政策真理。报告前瞻指引效应时必须加有限承诺/折扣预期修正,否则结论不可信。

错误 6:贝叶斯估计 ZLB 样本仍用卡尔曼滤波

OBC 使模型非线性、似然非高斯,卡尔曼滤波的"正态/线性"假设失效。须改用粒子滤波,或分段估计 / 影子利率补全,否则后验与方差分解有偏。

11.3 进阶资料与交叉链接

  • Woodford M. (2003), Interest and Prices 第 2 章 —— 利率下界的理论基石。
  • Holden T. & Paetz M. (2012), "Efficient simulation of ergodic distributions for DSGE models with occasionally binding constraints" —— 另一套 OBC 解法,中文文献常用。
  • Werning I. (2012), "Managing a Liquidity Trap: Monetary and Fiscal Policy", NBER w17514。
  • Del Negro M. 等 (2015) "The Forward Guidance Puzzle", Staff Papers, FRBNY。
  • 交叉链接:本页内核见 10 NK 三方程;扰动法局限见 15 扰动法;财政乘数与规则见 13 财政与货币政策规则;求解方法谱系见 DSGE 总览