29. 一些不愉快的货币主义算术#
29.1. 概述#
本讲座建立在 通过货币资助的政府赤字和价格水平 中介绍的概念和问题基础上。
在那个讲座中,我们探讨了通货膨胀税率及其相关货币收益率的拉弗曲线上的静态均衡点。
本讲中,我们将研究一个特殊情况:某个静态均衡只在时间
在
在这个过渡期内,实际货币余额
这种变化对于
关键的货币与债券比率只有在时间
而且,
这些发现构成了萨金特和华莱士(Sargent and Wallace)在”不愉快的货币主义算术”一文中的核心论点 [Sargent and Wallace, 1981]。
前一讲座已经介绍了本讲中使用的货币供应和需求模型,并描述了我们在本讲中将通过逆向推导得出的稳态均衡。
除了学习”不愉快的货币主义算术”外,本讲座还将教授如何实现一个用于计算初始价格水平的不动点算法。
29.2. 设置#
让我们首先回顾 通过货币资助的政府赤字和价格水平 中的模型设定。
如有需要,请参考那篇讲义并查看我们将在本讲中继续使用的Python代码。
对于
或者
其中
是第 期末的实际余额 是从 到 期间实际余额的毛收益率
对实际余额的需求是
其中
29.3. 货币与财政政策#
在通过货币资助的政府赤字和价格水平的基础模型基础上,我们引入了一期通胀指数化政府债券,作为政府筹集财政资金的另一种渠道。
假设
有了这个额外的融资工具,政府在时间
在模型开始前,公众持有两种资产:
这两个数值作为模型的初始条件给定。
值得注意的是,
29.3.1. 公开市场操作#
在时间
或
该方程表明,政府(特别是中央银行)可以通过增加债券持有量(
这实际上描述了中央银行的公开市场操作——一种货币政策工具,通过买卖政府债券来调节经济中的货币供应量。当中央银行购买政府债券时,它向经济注入资金;当出售债券时,则从流通中收回资金。
29.4. 初始公开市场操作的影响#
我们将按照萨金特和华莱士 [Sargent and Wallace, 1981] 的分析框架,探讨一个关键问题:在面对持续性财政赤字(即正值
在模型的初始阶段(
对于
而对于
其中
我们的目标是计算这一方案下的均衡序列
在这里,财政政策是指政府决定一系列净利息赤字
货币政策或债务管理政策则是指政府决定如何在有息债务(政府债券)和无息债务(货币)之间分配其对公众的债务组合的行动。
公开市场操作是指政府(或其代表中央银行)的货币政策行动,包括用新发行的货币从公众购买政府债券,或向公众出售债券并收回流通中的货币。
29.5. 算法(基本思想)#
类似于 通货膨胀税的拉弗曲线 中的方法,我们将从
在开始描述算法之前,我们需要回顾一下稳态收益率
二次方程 (29.5) 有两个根,
与 通过货币资助的政府赤字和价格水平 末尾所描述的原因类似,我们选择较大的根
接下来,我们计算
我们可以通过连续求解方程 (29.1) 和 (29.2) 来计算稳态序列
29.6. 在时间 之前#
定义
我们的限制
我们想要计算
因此,
我们可以通过迭代以下公式来实现前述公式:
起始于
29.7. 算法(伪代码)#
现在我们详细地以伪代码形式描述一个计算算法。
为了计算一个均衡,我们使用以下算法。
29.8. 计算示例#
让我们通过一个具体示例来演示模型的计算过程。我们将参数设置为与 通货膨胀税的拉弗曲线 讲座中相同的稳态值,以便于比较结果。
基本参数设为
对于新参数,我们将设置
我们将考察一个”小型”公开市场操作,具体方法是设置
这意味着在时间
这一操作的直接结果是公众持有的货币减少而政府债券增加。从货币供应减少的角度看,我们可以预期时间
然而,这只是初始效应。这次公开市场操作还会通过影响未来的货币供应路径
首先,我们需要导入必要的库:
import numpy as np
import matplotlib.pyplot as plt
from collections import namedtuple
import matplotlib as mpl
FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf"
mpl.font_manager.fontManager.addfont(FONTPATH)
plt.rcParams['font.family'] = ['Source Han Serif SC']
现在让我们用Python来实现我们的伪代码。
# 创建一个包含参数的命名元组
MoneySupplyModel = namedtuple("MoneySupplyModel",
["γ1", "γ2", "g",
"R_tilde", "m0_check", "Bm1_check",
"T"])
def create_model(γ1=100, γ2=50, g=3.0,
R_tilde=1.01,
Bm1_check=0, m0_check=105,
T=5):
return MoneySupplyModel(γ1=γ1, γ2=γ2, g=g,
R_tilde=R_tilde,
m0_check=m0_check, Bm1_check=Bm1_check,
T=T)
msm = create_model()
def S(p0, m0, model):
# 解包参数
γ1, γ2, g = model.γ1, model.γ2, model.g
R_tilde = model.R_tilde
m0_check, Bm1_check = model.m0_check, model.Bm1_check
T = model.T
# 公开市场操作
Bm1 = 1 / (p0 * R_tilde) * (m0_check - m0) + Bm1_check
# 计算 B_{T-1}
BTm1 = R_tilde ** T * Bm1 + ((1 - R_tilde ** T) / (1 - R_tilde)) * g
# 计算 g bar
g_bar = g + (R_tilde - 1) * BTm1
# 解二次方程
Ru = np.roots((-γ1, γ1 + γ2 - g_bar, -γ2)).max()
# 计算 p0
λ = γ2 / γ1
p0_new = (1 / γ1) * m0 * ((1 - λ ** T) / (1 - λ) + λ ** T / (Ru - λ))
return p0_new
def compute_fixed_point(m0, p0_guess, model, θ=0.5, tol=1e-6):
p0 = p0_guess
error = tol + 1
while error > tol:
p0_next = (1 - θ) * S(p0, m0, model) + θ * p0
error = np.abs(p0_next - p0)
p0 = p0_next
return p0
让我们看看在稳态
注意
这一结果表明,我们的模型验证了货币数量论的结论, 这正是 萨金特和华莱士 [Sargent and Wallace, 1981]用来证明其标题中“货币主义”一词的合理性而刻意融入其模型的。
m0_arr = np.arange(10, 110, 10)
plt.plot(m0_arr, [compute_fixed_point(m0, 1, msm) for m0 in m0_arr])
plt.ylabel('价格水平 $p_0$')
plt.xlabel('初始货币供应量 $m_0$')
plt.show()
现在让我们编写代码来试验前面描述的在时刻
def simulate(m0, model, length=15, p0_guess=1):
# 解包参数
γ1, γ2, g = model.γ1, model.γ2, model.g
R_tilde = model.R_tilde
m0_check, Bm1_check = model.m0_check, model.Bm1_check
T = model.T
# (pt, mt, bt, Rt)
paths = np.empty((4, length))
# 公开市场操作
p0 = compute_fixed_point(m0, 1, model)
Bm1 = 1 / (p0 * R_tilde) * (m0_check - m0) + Bm1_check
BTm1 = R_tilde ** T * Bm1 + ((1 - R_tilde ** T) / (1 - R_tilde)) * g
g_bar = g + (R_tilde - 1) * BTm1
Ru = np.roots((-γ1, γ1 + γ2 - g_bar, -γ2)).max()
λ = γ2 / γ1
# t = 0
paths[0, 0] = p0
paths[1, 0] = m0
# 1 <= t <= T
for t in range(1, T+1, 1):
paths[0, t] = (1 / γ1) * m0 * \
((1 - λ ** (T - t)) / (1 - λ)
+ (λ ** (T - t) / (Ru - λ)))
paths[1, t] = m0
# t > T
for t in range(T+1, length):
paths[0, t] = paths[0, t-1] / Ru
paths[1, t] = paths[1, t-1] + paths[0, t] * g_bar
# Rt = pt / pt+1
paths[3, :T] = paths[0, :T] / paths[0, 1:T+1]
paths[3, T:] = Ru
# bt = γ1 - γ2 / Rt
paths[2, :] = γ1 - γ2 / paths[3, :]
return paths
def plot_path(m0_arr, model, length=15):
fig, axs = plt.subplots(2, 2, figsize=(8, 5))
titles = ['$p_t$', '$m_t$', '$b_t$', '$R_t$']
for m0 in m0_arr:
paths = simulate(m0, model, length=length)
for i, ax in enumerate(axs.flat):
ax.plot(paths[i])
ax.set_title(titles[i])
axs[0, 1].hlines(model.m0_check, 0, length, color='r', linestyle='--')
axs[0, 1].text(length * 0.8, model.m0_check * 0.9, r'$\check{m}_0$')
plt.show()
plot_path([80, 100], msm)

Fig. 29.1 不愉快的算术#
Fig. 29.1 展示了两个实验的结果,清晰地呈现了[Sargent and Wallace, 1981] 论文中的核心观点:
在
时进行的公开市场操作减少了货币供应,从而导致当时的价格水平下降公开市场操作后的货币供应量越低,初始价格水平也就越低
然而,减少初始货币供应的公开市场操作也会导致
时期的货币回报率 降低。这是因为更高的政府借贷最终需要通过印钞(即征收通货膨胀税)在 时期进行融资货币回报率
在维持货币稳定性和应对政府赤字引起的通货膨胀方面扮演着关键角色在某些情况下,政策制定者可能会选择较高的
值,以减轻通货膨胀对实际回报率造成的负面影响