122. 代际交叠模型中的转型#
除了 Anaconda 中的内容外,本讲座还需要以下库:
!pip install --upgrade quantecon
122.1. 概述#
本讲座介绍了由 Peter Diamond [Diamond, 1965] 提出的一个由两期生存的世代交叠人群组成的生命周期模型。
我们将介绍 Auerbach 和 Kotlikoff(1987 年)[Auerbach and Kotlikoff, 1987] 在其著作第 2 章中分析的版本。
Auerbach 和 Kotlikoff(1987 年)将他们的两期模型作为热身练习,为他们对长寿命人群的世代交叠模型的分析做准备,而后者才是其著作的主要内容。
他们的两期生存世代交叠模型是一个有用的起点,原因如下:
它阐明了在给定日期存活的不同世代主体之间相互作用的结构
它激活了政府与历代人群所面临的各种力量和权衡取舍
它是研究政府税收与补贴计划,以及发行和偿还政府债务的政策之间联系的良好实验场所
一些涉及从一个稳态过渡到另一个稳态的有趣实验可以手工计算
它是展示用于求解具有初始条件和终端条件的非线性差分方程组的打靶法的良好场景
备注
Auerbach 和 Kotlikoff 使用计算机代码来计算他们那些包含长寿命人群的模型的过渡路径。
我们斗胆对 Auerbach 和 Kotlikoff 第 2 章的模型加以扩展,以研究一些在各世代之间重新分配资源的安排
这些安排采取了一系列针对特定年龄的一次性总付税收和转移支付的形式
我们将研究这些安排如何影响资本积累和政府债务
122.2. 设定#
时间是离散的,用 \(t=0, 1, 2, \ldots\) 表示。
经济体永远存在,但其中的人不会。
在每个时间点 \(t \geq 0\),都有一个代表性老年人和一个代表性年轻人存活。 在时点 \(t\),一个代表性老年人与一个代表性年轻人共存,这个年轻人将在时点 \(t+1\) 成为老年人。
我们假设人口规模随时间保持不变。
年轻人从事工作,进行储蓄和消费。
老年人进行消费和储蓄,但不工作。
政府永远存在,即在各期 \(t=0, 1, 2, \ldots\) 都存在。
每个时期 \(t \geq 0\),政府进行征税、支出、转移支付和借贷。
在模型之外、于时点 \(t=0\) 设定的初始条件为
\(K_0\):由一个代表性的初始老年人在时点 \(t=0\) 时带入的初始资本存量
\(D_0\):由一个代表性的老年人在时点 \(t=0\) 持有并在 \(t=0\) 到期的政府债务
\(K_0\) 和 \(D_0\) 都以时点 \(0\) 的商品单位计量。
政府政策由五个序列 \(\{G_t, D_t, \tau_t, \delta_{ot}, \delta_{yt}\}_{t=0}^\infty\) 组成,其要素包括
\(\tau_t\):在时点 \(t\) 对工资、资本收益和政府债券征收的统一税率
\(D_t\):在时点 \(t\) 到期的一期政府债券的本金,按人均计算
\(G_t\):政府在时点 \(t\) 的商品购买,按人均计算
\(\delta_{yt}\):在时点 \(t\) 对每个年轻人征收的一次性税
\(\delta_{ot}\):在时点 \(t\) 对每个老年人征收的一次性税
配置是一组序列 \(\{C_{yt}, C_{ot}, K_{t+1}, L_t, Y_t, G_t\}_{t=0}^\infty \),其组成部分包括
\(K_t\):人均实物资本
\(L_t\):人均劳动
\(Y_t\):人均产出
以及
\(C_{yt}\):在时点 \(t \geq 0\) 的代表性年轻人的消费
\(C_{ot}\):在时点 \(t \geq 0\) 的代表性老年人的消费
\(K_{t+1} - K_t \equiv I_t \) – 在时点 \(t \geq 0\) 的实物资本投资
\(G_t\):政府购买
国民收入与产品核算由一组等式构成
\(Y_t = C_{yt} + C_{ot} + (K_{t+1} - K_t) + G_t, \quad t \geq 0\)
价格体系是一对序列 \(\{W_t, r_t\}_{t=0}^\infty\),其组成部分为生产要素的租赁价格
\(W_t\):在时点 \(t \geq 0\) 的劳动要素租金
\(r_t\):在时点 \(t \geq 0\) 的资本要素租金
122.3. 生产#
生产包含两种要素:实物资本 \(K_t\) 和劳动投入 \(L_t\)。
资本不会折旧,因此下文中的 \(r_t\) 是净回报率。
由于每个年轻人无弹性地供给一单位劳动,且人口保持不变,劳动供给满足 \(L_t = 1\) 对所有 \(t\) 成立。
我们将利用这一事实来简化下文的公式。
初始资本存量 \(K_0\) 由一个代表性的初始老年人持有,并在时点 \(0\) 出租给企业。
时点 \(t\) 的净投资率 \(I_t\) 为
时点 \(t\) 的资本存量由过去投资的累计形成:
生产函数采用 Cobb–Douglas 形式,将实物资本 \(K_t\) 和劳动投入 \(L_t\) 转化为产出 \(Y_t\)
122.4. 政府#
在时点 \(t-1\),政府发行一期无风险债务,承诺在时点 \(t\) 支付人均 \(D_t\) 单位的商品。
时点 \(t\) 的年轻人购买将于时点 \(t+1\) 到期的政府债券 \(D_{t+1}\)。
在时点 \(t\) 发行的政府债券,其税前净利率为 \(r_{t+1}\),利息支付在时点 \(t+1\) 进行。
政府在时点 \(t \geq 0\) 的预算约束为
或等价地
其中,总税收净额(扣除转移支付)为 \(T_t\),满足
由于每个时点都恰好存在一个年轻人和一个老年人,这两笔一次性总付税以单位权重计入 \(T_t\) 中。
122.5. 要素市场中的活动#
老年人: 在每个时点 \(t \geq 0\),一个代表性老年人
将 \(K_t\) 和 \(D_t\) 带入当期,
将资本出租给代表性企业,获得租金 \(r_{t} K_t\),
为其租金和利息收入缴税 \(\tau_t r_t (K_t+ D_t)\),
向政府缴纳一次性税款 \(\delta_{ot}\),
将 \(K_t\) 卖给年轻人。
年轻人: 在每个时点 \(t \geq 0\),一个代表性年轻人
向代表性企业出售一单位劳动服务,获得工资 \(W_t\),
为其劳动收入缴税 \(\tau_t W_t\),
向政府支付一次性税款 \(\delta_{yt}\),
消费支出为 \(C_{yt}\),
获得非负资产 \(A_{t+1}\),其中包括实物资本 \(K_{t+1}\) 和在 \(t+1\) 到期的一期政府债券 \(D_{t+1}\) 之和。
备注
如果一次性税款为负,意味着政府向个人支付补贴。
122.6. 代表性企业的问题#
代表性企业以竞争性工资率 \(W_t\) 从年轻人那里雇佣劳动服务,并以竞争性租金率 \(r_t\) 从老年人那里雇佣资本。
资本的租金率 \(r_t\) 等于政府一期债券的利率。
租金率的单位是:
对于 \(W_t\),每单位劳动力在时点 \(t\) 的产出
对于 \(r_t\),每单位资本在时点 \(t\) 的产出
我们将时点 \(t\) 的产出作为计价单位,因此时点 \(t\) 的产出价格等于1。
企业在时点 \(t\) 的利润为
为了实现利润最大化,企业让边际产量与要素的租赁率相等:
产出可以被老年人或年轻人消费;可以卖给年轻人用于增加资本存量;也可以卖给政府,用于不为个体带来效用的用途(在模型中,即“被丢入海洋”)。
因此,企业将产出出售给老年人、年轻人和政府。
122.7. 个体问题#
122.7.1. 初始老年人#
在时点 \(t=0\),一个代表性的初始老年人拥有 \((1 + r_0(1 - \tau_0)) A_0\) 的初始资产,其中 \(A_0 = K_0 + D_0\)。
他必须向政府支付一笔一次性税款(如果为正),或从政府获得补贴(如果为负) \(\delta_{o0}\)。
老年人的预算约束为
初始老年人的效用函数为 \(C_{o0}\),因此其最优消费计划由方程 (122.4) 给出。
122.7.2. 年轻人#
在每个时点 \(t \geq 0\),代表性年轻人无弹性地提供一单位劳动,并获得税前劳动收入 \(W_t\)。
年轻人的税后与转移支付后的收入为 \(W_t (1 - \tau_t) - \delta_{yt}\)。
在每个时点 \(t \geq 0\),年轻人选择消费计划 \(C_{yt}, C_{o,t+1}\) 以最大化 Cobb–Douglas 效用函数
其预算约束在 \(t\) 和 \(t+1\) 时分别为:
将 (122.6) 的第二个方程解得的储蓄 \(A_{t+1}\) 代入第一个方程,可得现值预算约束
为了求解年轻人的最优问题,构建拉格朗日函数
其中 \(\lambda \geq 0\) 是跨期预算约束 (122.7) 的拉格朗日乘子。
经过若干代数运算,跨期预算约束 (122.7) 以及关于 \(C_{yt}, C_{o,t+1}\) 最大化 \({\mathcal L}\) 的一阶条件表明,最优消费计划满足
关于拉格朗日函数 (122.8) 对拉格朗日乘子 \(\lambda\) 的一阶条件可恢复预算约束 (122.7),进而利用 (122.9) 得到最优储蓄计划
122.8. 均衡#
定义: 均衡是一种配置、一项政府政策和一个价格体系,具有以下性质:
给定价格体系和政府政策,该配置能够求解
代表性企业在 \(t \geq 0\) 时的问题
个人在 \(t \geq 0\) 时的问题
给定价格体系和配置,政府预算约束对所有 \(t \geq 0\) 都得到满足。
122.9. 后续步骤#
为开启对均衡结果的分析,我们将研究 Auerbach 和 Kotlikoff (1987) [Auerbach and Kotlikoff, 1987] 在第2章开篇所采用的特例模型。
它可以手工求解。
我们接下来就将这样做。
在我们推导出封闭形式解之后,我们将假定自己事先并不知道解,并据此计算均衡路径。
具体而言,我们首先会将均衡表述为一个不动点问题:该不动点映射将要素价格与税率序列映射至要素价格与税率序列。
然后我们将通过迭代计算并收敛到该映射的不动点,从而得到均衡。
122.10. 封闭形式解#
为了得到 Auerbach 和 Kotlikoff (1987) [Auerbach and Kotlikoff, 1987] 第2章的特例,我们将 \(\delta_{ot}\) 和 \(\delta_{yt}\) 都设为零。
作为 (122.9) 的特例,代表性年轻人的消费–储蓄计划为:
使用 (122.3) 和 \(A_t = K_t + D_t\),我们得到资本的封闭形式传导方程:
之所以债务项的时间下标为 \(t+1\),是因为年轻人携带到 \(t+1\) 期的资产 \(A_{t+1}\) 既包括实物资本 \(K_{t+1}\),也包括在 \(t+1\) 期到期的政府债券 \(D_{t+1}\)。
122.10.1. 稳态#
根据 (122.11) 和政府预算约束 (122.2),我们可以计算时不变值或稳态值 \(\hat K, \hat D, \hat T\):
这意味着
当 \(\hat D = 0\) 时,(122.12) 的第一个方程可求得封闭形式解
当 \(\hat D \neq 0\) 时,该方程必须通过数值方法求解,这正是 练习 122.1 所要完成的任务。
示例:考虑以下情况:
初始政府债务为零,即\(D_t=0\),
政府消费 \(G_t\) 等于产出 \(Y_t\) 的 \(15\%\)
由稳态公式可得
122.10.2. 实现#
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf"
mpl.font_manager.fontManager.addfont(FONTPATH)
plt.rcParams['font.family'] = ['Source Han Serif SC']
from numba import jit
from quantecon.optimize import brent_max
给定参数 \(\alpha = 0.3\) 和 \(\beta = 0.5\),计算 \(\hat{K}\):
# 参数
α = 0.3
β = 0.5
# τ 和 D 的稳态值
τ_hat = 0.15
D_hat = 0.
# 解 K 的稳态值
K_hat = ((1 - τ_hat) * (1 - α) * (1 - β)) ** (1 / (1 - α))
K_hat
0.17694509514972878
知道 \(\hat K\) 后,我们可以计算其他均衡量。
首先,定义一些 Python 辅助函数。
@jit
def K_to_Y(K, α):
return K ** α
@jit
def K_to_r(K, α):
return α * K ** (α - 1)
@jit
def K_to_W(K, α):
return (1 - α) * K ** α
@jit
def K_to_C(K, D, τ, r, α, β):
# 当 δ=0 时老年人的最优消费
A = K + D
Co = A * (1 + r * (1 - τ))
# 当 δ=0 时年轻人的最优消费
W = K_to_W(K, α)
Cy = β * W * (1 - τ)
return Cy, Co
我们可以使用这些辅助函数来获得与稳态值 \(\hat{K}\) 和 \(\hat{r}\) 相对应的稳态值 \(\hat{Y}\)、\(\hat{r}\) 和 \(\hat{W}\)。
Y_hat, r_hat, W_hat = K_to_Y(K_hat, α), K_to_r(K_hat, α), K_to_W(K_hat, α)
Y_hat, r_hat, W_hat
(0.5947734290747186, 1.0084033613445376, 0.41634140035230305)
稳态净回报率 \(\hat r\) 接近于一,也就是大约 \(100\) 个百分点。
这并非失误:本模型中的一期对应一个人一生的一半,因此 \(\hat r\) 累积了跨越一代人的回报。
由于政府债务的稳态值 \(\hat{D}\) 为 \(0\),所有税收都用于支付政府支出
G_hat = τ_hat * Y_hat
G_hat
0.0892160143612078
使用最优消费计划找到年轻人和老年人的消费稳态值
Cy_hat, Co_hat = K_to_C(K_hat, D_hat, τ_hat, r_hat, α, β)
Cy_hat, Co_hat
(0.17694509514972878, 0.32861231956378195)
使用一个名为 init_ss 的数组来存储稳态下的数量和价格
init_ss = np.array([K_hat, Y_hat, Cy_hat, Co_hat, # 数量
W_hat, r_hat, # 价格
τ_hat, D_hat, G_hat # 政策
])
122.10.3. 转型#
我们已经计算了一个稳态,在该稳态下,政府政策序列在时间上都是常数。
我们将此稳态作为 \(t=0\) 时另一个经济体的初始条件,在这个经济体中,政府政策序列随时间变化。
为便于理解计算,我们将 \(t=0\) 理解为发生巨大、未预期冲击的时点,其形式包括
随时间变化的政府政策序列扰乱了原有的稳态;
新的政府政策序列最终在时间上收敛为常数,即在某一时点 \(T >0\) 之后,每个序列在时间上保持不变;
一项新的政府政策在 \(t=0\) 时以政策序列的形式突然公布。
我们假设在 \(t=0\) 时,包括老年人在内的每个人都知道新的政府政策序列,并据此做出选择。
随着资本存量和其他总量随时间对财政政策变化的调整,经济将接近一个新的稳态。
通过在序列空间中采用不动点算法,我们可以求解从旧稳态到新稳态的转型路径。
但在我们的特例中,由于存在封闭形式解,可采用一种更简单且更快速的方法。
为此,我们定义了一个 Python 类 ClosedFormTrans,其功能是在给定财政政策冲击下,计算长度为 \(T\) 的转型路径。
我们选择足够大的 \(T\),以确保在经过 \(T\) 期后,经济已经非常接近新的稳态。
该类包含三个关键参数:τ_pol、D_pol 和 G_pol,分别是税率、政府债务水平和政府购买的序列。
在下面的每个政策实验中,我们将把三者中的两个作为输入,从而刻画一项财政政策。
接着,我们利用政府预算约束,计算唯一剩余的内生变量。
在模拟转型路径时,有必要区分状态变量(如时点 \(t\) 的 \(K_t,Y_t,D_t,W_t,r_t\))和控制变量(如 \(C_{yt},C_{ot},\tau_{t},G_t\))。
class ClosedFormTrans:
"""
本类用于模拟一个经济体在财政政策变化下的长度为 T 的转型路径,
前提是给定其初始稳态。模拟基于在没有一次性税收情况下的封闭形式解。
"""
def __init__(self, α, β):
self.α, self.β = α, β
def simulate(self,
T, # 要模拟的转型路径长度
init_ss, # 初始稳态
τ_pol=None, # 税率序列
D_pol=None, # 政府债务水平序列
G_pol=None): # 政府购买序列
α, β = self.α, self.β
# 解包稳态变量
K_hat, Y_hat, Cy_hat, Co_hat = init_ss[:4]
W_hat, r_hat = init_ss[4:6]
τ_hat, D_hat, G_hat = init_ss[6:9]
# 初始化数组容器
# K, Y, Cy, Co
quant_seq = np.empty((T+1, 4))
# W, r
price_seq = np.empty((T+1, 2))
# τ, D, G
policy_seq = np.empty((T+2, 3))
# t=0,从稳态开始
K0, Y0 = K_hat, Y_hat
W0, r0 = W_hat, r_hat
D0 = D_hat
# 财政政策
if τ_pol is None:
D1 = D_pol[1]
G0 = G_pol[0]
τ0 = (G0 + (1 + r0) * D0 - D1) / (Y0 + r0 * D0)
elif D_pol is None:
τ0 = τ_pol[0]
G0 = G_pol[0]
D1 = (1 + r0) * D0 + G0 - τ0 * (Y0 + r0 * D0)
elif G_pol is None:
D1 = D_pol[1]
τ0 = τ_pol[0]
G0 = τ0 * (Y0 + r0 * D0) + D1 - (1 + r0) * D0
# 最优消费计划
Cy0, Co0 = K_to_C(K0, D0, τ0, r0, α, β)
# t=0 时的经济状态
quant_seq[0, :] = K0, Y0, Cy0, Co0
price_seq[0, :] = W0, r0
policy_seq[0, :] = τ0, D0, G0
policy_seq[1, 1] = D1
# 从 t=1 到 T
for t in range(1, T+1):
# K 的传导
K_old, τ_old = quant_seq[t-1, 0], policy_seq[t-1, 0]
D = policy_seq[t, 1]
K = K_old ** α * (1 - τ_old) * (1 - α) * (1 - β) - D
# 产出、资本回报率、工资
Y, r, W = K_to_Y(K, α), K_to_r(K, α), K_to_W(K, α)
# 为满足政府预算约束
if τ_pol is None:
D = D_pol[t]
D_next = D_pol[t+1]
G = G_pol[t]
τ = (G + (1 + r) * D - D_next) / (Y + r * D)
elif D_pol is None:
τ = τ_pol[t]
G = G_pol[t]
D = policy_seq[t, 1]
D_next = (1 + r) * D + G - τ * (Y + r * D)
elif G_pol is None:
D = D_pol[t]
D_next = D_pol[t+1]
τ = τ_pol[t]
G = τ * (Y + r * D) + D_next - (1 + r) * D
# 最优消费计划
Cy, Co = K_to_C(K, D, τ, r, α, β)
# 存储 t 时点的经济总量
quant_seq[t, :] = K, Y, Cy, Co
price_seq[t, :] = W, r
policy_seq[t, 0] = τ
policy_seq[t+1, 1] = D_next
policy_seq[t, 2] = G
self.T, self.init_ss = T, init_ss
self.quant_seq = quant_seq
self.price_seq = price_seq
self.policy_seq = policy_seq
return quant_seq, price_seq, policy_seq
def plot(self):
T, init_ss = self.T, self.init_ss
quant_seq = self.quant_seq
price_seq = self.price_seq
policy_seq = self.policy_seq
fig, axs = plt.subplots(3, 3, figsize=(14, 10))
# 数量变量
for i, name in enumerate(['K', 'Y', 'Cy', 'Co']):
ax = axs[i//3, i%3]
ax.plot(range(T+1), quant_seq[:T+1, i], label=name)
ax.hlines(init_ss[i], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 价格变量
for i, name in enumerate(['W', 'r']):
ax = axs[(i+4)//3, (i+4)%3]
ax.plot(range(T+1), price_seq[:T+1, i], label=name)
ax.hlines(init_ss[i+4], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 政策变量
for i, name in enumerate(['τ', 'D', 'G']):
ax = axs[(i+6)//3, (i+6)%3]
ax.plot(range(T+1), policy_seq[:T+1, i], label=name)
ax.hlines(init_ss[i+6], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
我们可以为模型参数 \(\{\alpha, \beta\}\) 创建一个实例 closed,并将其用于各种财政政策实验。
closed = ClosedFormTrans(α, β)
122.10.4. 实验1:减税#
为了展示ClosedFormTrans的强大功能,我们首先考虑以下财政政策变动:
在 \(t=0\) 时,政府意外宣布一次性减税,\(\tau_0 =(1-\frac{1}{3}) \hat{\tau}\),通过发行政府债务 \(\bar{D}\) 来融资;
从 \(t=1\) 开始,政府将维持 \(D_t=\bar{D}\),并调整 \(\tau_{t}\) 以征税,用于支付政府消费和债务利息;
政府消费固定为 \(G_t = 0.15 \hat{Y}\)。
以下方程完全刻画了从初始稳态出发的均衡转型路径
我们可以模拟 20 期的转型过程,之后经济将非常接近新的稳态。
第一步是准备一组刻画财政政策的政策变量序列。
我们必须事先给定政府支出序列 \(\{G_t\}_{t=0}^{T}\) 和债务水平 \(\{D_t\}_{t=0}^{T+1}\),然后将它们输入到求解器中。
T = 20
# 减税
τ0 = τ_hat * (1 - 1/3)
# 政府购买序列
G_seq = τ_hat * Y_hat * np.ones(T+1)
# 政府债务序列
D_bar = G_hat - τ0 * Y_hat
D_seq = np.ones(T+2) * D_bar
D_seq[0] = D_hat
让我们使用 closed 的 simulate 方法来计算动态转换。
请注意,我们将 τ_pol 保留为 None,因为需要确定税率以满足政府预算约束。
quant_seq1, price_seq1, policy_seq1 = closed.simulate(T, init_ss,
D_pol=D_seq,
G_pol=G_seq)
closed.plot()
findfont: Failed to find font weight normal, now using 600.
我们也可以尝试更低的减税率,例如 \(0.2\)。
# 更低的减税率
τ0 = 0.15 * (1 - 0.2)
# 相应的债务序列
D_bar = G_hat - τ0 * Y_hat
D_seq = np.ones(T+2) * D_bar
D_seq[0] = D_hat
quant_seq2, price_seq2, policy_seq2 = closed.simulate(T, init_ss,
D_pol=D_seq,
G_pol=G_seq)
fig, axs = plt.subplots(3, 3, figsize=(14, 10))
# 数量
for i, name in enumerate(['K', 'Y', 'Cy', 'Co']):
ax = axs[i//3, i%3]
ax.plot(range(T+1), quant_seq1[:T+1, i], label=f'{name}, 1/3')
ax.plot(range(T+1), quant_seq2[:T+1, i], label=f'{name}, 0.2')
ax.hlines(init_ss[i], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 价格
for i, name in enumerate(['W', 'r']):
ax = axs[(i+4)//3, (i+4)%3]
ax.plot(range(T+1), price_seq1[:T+1, i], label=f'{name}, 1/3')
ax.plot(range(T+1), price_seq2[:T+1, i], label=f'{name}, 0.2')
ax.hlines(init_ss[i+4], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 政策
for i, name in enumerate(['τ', 'D', 'G']):
ax = axs[(i+6)//3, (i+6)%3]
ax.plot(range(T+1), policy_seq1[:T+1, i], label=f'{name}, 1/3')
ax.plot(range(T+1), policy_seq2[:T+1, i], label=f'{name}, 0.2')
ax.hlines(init_ss[i+6], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
具有较低减税率(在 \(t=0\) 时实施)的经济体,其转型路径模式相同,但扭曲程度较小,并且会收敛到一个拥有更高实物资本存量的新稳态。
122.10.5. 实验2:政府资产积累#
假设经济最初处于相同的稳态。
现在政府承诺将其在公共服务与商品上的支出削减一半,并对所有 \(t \geq 0\) 都保持这一削减。
政府设定的目标是保持相同的税率 \(\tau_t=\hat{\tau}\),并通过时间推移逐步积累资产 \(-D_t\)。
为了进行该实验,我们将 τ_seq 和 G_seq 作为输入,并让 D_pol 沿转型路径由政府预算约束自动决定。
# 政府支出减半
G_seq = τ_hat * 0.5 * Y_hat * np.ones(T+1)
# 目标税率
τ_seq = τ_hat * np.ones(T+1)
closed.simulate(T, init_ss, τ_pol=τ_seq, G_pol=G_seq);
closed.plot()
随着政府积累资产,它提供了本应由私人储蓄者提供的资金,因此资本存量上升,资本的租金率下降。
因此,政府资产与用于生产的实物资本之比 \(-\frac{D_t}{K_t}\) 将随着时间的推移而增加
plt.plot(range(T+1), -closed.policy_seq[:-1, 1] / closed.quant_seq[:, 0])
plt.xlabel('t')
plt.ylabel('-D/K')
plt.show()
图 122.1 政府资产与资本之比#
我们想知道这一政策实验如何影响个体。
从长远来看,未来的世代将在他们的一生中享受更高的消费,因为他们工作时将获得更高的劳动收入。
而在短期内,早期的世代则会遭受损失。
\(t=0\) 时的代表性老年人不受影响,因为 \(K_0\)、\(r_0\) 和 \(\tau_0\) 在 \(t=0\) 时均未发生变化。
但在 \(t=0\) 和 \(t=1\) 时年轻的世代,是在该政策尚未提高工资之前进行储蓄的,而他们获得回报时所面对的利率却已被更高的资本存量大幅压低。
练习 122.2 逐代计算了这些收益与损失。
这种鲜明的长期效应与短期效应促使我们去研究转型路径。
备注
虽然在新的稳态中消费确实更高,但其代价是公共服务与商品供给的减少。
122.10.6. 实验3:暂时性支出削减#
我们接下来考察一种情形,即政府再次通过削减支出来积累资产。
但这次削减仅持续一期:政府将 \(G_0\) 设为 \(0\),并从 \(t=1\) 起将购买恢复为 \(\hat G\)。
从 \(t \geq 1\) 起,政府支出恢复到 \(\hat{G}\),而税率 \(\tau_t\) 调整以维持资产水平 \(-D_t = -D_1\)。
# 政府购买序列
G_seq = τ_hat * Y_hat * np.ones(T+1)
G_seq[0] = 0
# 政府债务序列
D_bar = G_seq[0] - τ_hat * Y_hat
D_seq = D_bar * np.ones(T+2)
D_seq[0] = D_hat
closed.simulate(T, init_ss, D_pol=D_seq, G_pol=G_seq);
closed.plot()
经济体很快收敛到一个新的稳态,在该稳态下,物质资本存量更高、利率更低、工资更高,且年轻人与老年人的消费水平均有所提高。
尽管从 \(t \geq 1\) 起,政府支出 \(G_t\) 恢复到其较高的初始水平,但由于政府在临时削减支出期间积累了资产,从而获得了额外收入 \(-r_t D_t\),因此可以在更低的税率下维持预算平衡。
与 实验2:政府资产积累 相似,转型过程初期处于年轻阶段的世代会因该政策冲击而受损,因为他们是在工资上涨之前进行储蓄,随后却只能获得随之而来的较低利率回报。
122.11. 计算策略#
在前述计算中,我们研究了由不同财政政策引发的动态转型。
在所有这些实验中,我们都保持了一个假设:不存在一次性税收,即 \(\delta_{yt}=0, \delta_{ot}=0\)。
在本节中,我们将研究当一次性税收存在时的转型动态。
政府将使用一次性税收与转移支付在不同世代之间重新分配资源。
引入一次性税收会破坏封闭形式解,因为此时个体的最优消费与储蓄计划取决于未来价格与税率。
因此,我们通过寻找“从序列到序列的映射”的不动点来计算均衡转型路径:
该不动点确定了一个均衡。
为引入这一寻求其不动点的映射,我们回到 均衡 一节中引入的概念。
定义: 给定参数 \(\{\alpha\), \(\beta\}\),一个竞争性均衡由以下内容组成:
最优消费序列 \(\{C_{yt}, C_{ot}\}\)
价格序列 \(\{W_t, r_t\}\)
资本存量和产出序列 \(\{K_t, Y_t\}\)
税率、政府资产(债务)、政府购买以及一次性税收序列 \(\{\tau_t, D_t, G_t, \delta_{yt}, \delta_{ot}\}\)
并满足以下性质:
在给定价格体系与政府财政政策下,消费计划是最优的;
政府预算约束在所有 \(t\) 上均得到满足。
均衡转型路径可以通过“猜测–校验”若干内生序列来计算。
例如,在 实验1:减税 中,序列 \(\{D_t\}_{t=0}^{T}\) 和 \(\{G_t\}_{t=0}^{T}\) 是外生的。
此外,我们假设一次性税收 \(\{\delta_{yt}, \delta_{ot}\}_{t=0}^{T}\) 是给定的,且模型中的每个个体都知晓。
我们可以按照以下步骤求解其他均衡序列
猜测价格 \(\{W_t, r_t\}_{t=0}^{T}\) 和税率 \(\{\tau_t\}_{t=0}^{T}\);
求解最优消费和储蓄计划 \(\{C_{yt}, C_{ot}\}_{t=0}^{T}\),将未来价格和税率的猜测视为真实值;
求解资本存量的转移 \(\{K_t\}_{t=0}^{T}\);
用均衡条件隐含的值更新价格和税率的猜测;
迭代直至收敛。
接下来我们将实现这一”猜测和验证”的方法。
我们首先定义 Cobb–Douglas 效用函数
@jit
def U(Cy, Co, β):
return (Cy ** β) * (Co ** (1-β))
我们使用 Cy_val 来计算给定跨期预算约束下任意消费计划 \(C_y\) 的终身价值。
注意:这需要知道未来的价格 \(r_{t+1}\) 和税率 \(\tau_{t+1}\)。
@jit
def Cy_val(Cy, W, r_next, τ, τ_next, δy, δo_next, β):
# Co 由预算约束给出
Co = (W * (1 - τ) - δy - Cy) * (1 + r_next * (1 - τ_next)) - δo_next
return U(Cy, Co, β)
最优消费计划 \(C_y^*\) 可以通过最大化 Cy_val 来找到。
下面是一个计算稳态下最优消费 \(C_y^*=\hat{C}_y\) 的例子,其中 \(\delta_{yt}=\delta_{ot}=0\),就像我们之前研究的那样。
W, r_next, τ, τ_next = W_hat, r_hat, τ_hat, τ_hat
δy, δo_next = 0, 0
Cy_opt, U_opt, _ = brent_max(Cy_val, # 最大化的目标函数
1e-6, # 下界
W*(1-τ)-δy-1e-6, # 上界
args=(W, r_next, τ, τ_next, δy, δo_next, β))
Cy_opt, U_opt
(0.17694509514972878, 0.241135518231111)
接下来,我们定义一个Python类AK2,它可以使用不动点算法计算转型路径。
它可以处理非零一次性税收
class AK2():
"""
该类模拟一个经济体在给定初始稳态下,对财政政策变化的长度为T的转型路径。
转型路径通过采用不动点算法来满足均衡条件而得出。
"""
def __init__(self, α, β):
self.α, self.β = α, β
def simulate(self,
T, # 模拟的转型路径长度
init_ss, # 初始稳态
δy_seq, # 年轻人的一次性税收序列
δo_seq, # 老年人的一次性税收序列
τ_pol=None, # 税率序列
D_pol=None, # 政府债务水平序列
G_pol=None, # 政府购买序列
verbose=False,
max_iter=500,
tol=1e-5):
α, β = self.α, self.β
# 解包稳态变量
K_hat, Y_hat, Cy_hat, Co_hat = init_ss[:4]
W_hat, r_hat = init_ss[4:6]
τ_hat, D_hat, G_hat = init_ss[6:9]
# K, Y, Cy, Co
quant_seq = np.empty((T+2, 4))
# W, r
price_seq = np.empty((T+2, 2))
# τ, D, G
policy_seq = np.empty((T+2, 3))
policy_seq[:, 1] = D_pol
policy_seq[:, 2] = G_pol
# 价格的初始猜测
price_seq[:, 0] = np.ones(T+2) * W_hat
price_seq[:, 1] = np.ones(T+2) * r_hat
# 政策的初始猜测
policy_seq[:, 0] = np.ones(T+2) * τ_hat
# t=0, 从稳态开始
quant_seq[0, :2] = K_hat, Y_hat
if verbose:
# 准备绘制迭代直到收敛
fig, axs = plt.subplots(1, 3, figsize=(14, 4))
# 检查收敛的容器
price_seq_old = np.empty_like(price_seq)
policy_seq_old = np.empty_like(policy_seq)
# 开始迭代
i_iter = 0
while True:
if verbose:
# 在第i次迭代时绘制当前价格
for i, name in enumerate(['W', 'r']):
axs[i].plot(range(T+1), price_seq[:T+1, i])
axs[i].set_title(name)
axs[i].set_xlabel('t')
axs[2].plot(range(T+1), policy_seq[:T+1, 0],
label=f'第{i_iter}次迭代')
axs[2].legend(bbox_to_anchor=(1.05, 1), loc='upper left')
axs[2].set_title('τ')
axs[2].set_xlabel('t')
# 存储上一次迭代的旧价格
price_seq_old[:] = price_seq
policy_seq_old[:] = policy_seq
# 开始更新数量和价格
for t in range(T+1):
K, Y = quant_seq[t, :2]
W, r = price_seq[t, :]
r_next = price_seq[t+1, 1]
τ, D, G = policy_seq[t, :]
τ_next, D_next, G_next = policy_seq[t+1, :]
δy, δo = δy_seq[t], δo_seq[t]
δy_next, δo_next = δy_seq[t+1], δo_seq[t+1]
# 老年人的消费
Co = (1 + r * (1 - τ)) * (K + D) - δo
# 年轻人的最优消费
out = brent_max(Cy_val, 1e-6, W*(1-τ)-δy-1e-6,
args=(W, r_next, τ, τ_next,
δy, δo_next, β))
Cy = out[0]
quant_seq[t, 2:] = Cy, Co
τ_num = ((1 + r) * D + G - D_next - δy - δo)
τ_denom = (Y + r * D)
policy_seq[t, 0] = τ_num / τ_denom
# 年轻人的储蓄
A_next = W * (1 - τ) - δy - Cy
# K的传导
K_next = A_next - D_next
Y_next = K_to_Y(K_next, α)
# 隐含的下一期价格
W_imp, r_imp = K_to_W(K_next, α), K_to_r(K_next, α)
quant_seq[t+1, :2] = K_next, Y_next
price_seq[t+1, :] = W_imp, r_imp
i_iter += 1
if (np.max(np.abs(price_seq_old - price_seq)) < tol) & \
(np.max(np.abs(policy_seq_old - policy_seq)) < tol):
if verbose:
print(f"使用{i_iter}次迭代收敛")
break
if i_iter > max_iter:
if verbose:
print(f"使用{i_iter}次迭代未能收敛")
break
self.T, self.init_ss = T, init_ss
self.quant_seq = quant_seq
self.price_seq = price_seq
self.policy_seq = policy_seq
return quant_seq, price_seq, policy_seq
def plot(self):
T, init_ss = self.T, self.init_ss
quant_seq = self.quant_seq
price_seq = self.price_seq
policy_seq = self.policy_seq
fig, axs = plt.subplots(3, 3, figsize=(14, 10))
# 数量
for i, name in enumerate(['K', 'Y', 'Cy', 'Co']):
ax = axs[i//3, i%3]
ax.plot(range(T+1), quant_seq[:T+1, i], label=name)
ax.hlines(init_ss[i], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 价格
for i, name in enumerate(['W', 'r']):
ax = axs[(i+4)//3, (i+4)%3]
ax.plot(range(T+1), price_seq[:T+1, i], label=name)
ax.hlines(init_ss[i+4], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 政策
for i, name in enumerate(['τ', 'D', 'G']):
ax = axs[(i+6)//3, (i+6)%3]
ax.plot(range(T+1), policy_seq[:T+1, i], label=name)
ax.hlines(init_ss[i+6], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
我们用模型参数 \(\{\alpha, \beta\}\) 初始化一个 AK2 类的实例,然后用它来进行财政政策实验。
ak2 = AK2(α, β)
我们首先检验,当一次性税收被排除时,‘猜测和校验’方法所得的数值结果与封闭形式解所得到的结果一致。
δy_seq = np.ones(T+2) * 0.
δo_seq = np.ones(T+2) * 0.
D_pol = np.zeros(T+2)
G_pol = np.ones(T+2) * G_hat
# 减税
τ0 = τ_hat * (1 - 1/3)
D1 = D_hat * (1 + r_hat * (1 - τ0)) + G_hat - τ0 * Y_hat - δy_seq[0] - δo_seq[0]
D_pol[0] = D_hat
D_pol[1:] = D1
quant_seq3, price_seq3, policy_seq3 = ak2.simulate(T, init_ss,
δy_seq, δo_seq,
D_pol=D_pol, G_pol=G_pol,
verbose=True)
使用10次迭代收敛
findfont: Failed to find font weight normal, now using 600.
ak2.plot()
接下来,我们引入一次性税收。
让我们修改 实验1:减税 中的财政政策设定,假定政府同时对年轻人和老年人提高一次性税收 \(\delta_{yt}=\delta_{ot}=0.005, t\geq0\)。
δy_seq = np.ones(T+2) * 0.005
δo_seq = np.ones(T+2) * 0.005
D1 = D_hat * (1 + r_hat * (1 - τ0)) + G_hat - τ0 * Y_hat - δy_seq[0] - δo_seq[0]
D_pol[1:] = D1
quant_seq4, price_seq4, policy_seq4 = ak2.simulate(T, init_ss,
δy_seq, δo_seq,
D_pol=D_pol, G_pol=G_pol)
注意:”挤出效应”已经得到缓解。
fig, axs = plt.subplots(3, 3, figsize=(14, 10))
# 数量
for i, name in enumerate(['K', 'Y', 'Cy', 'Co']):
ax = axs[i//3, i%3]
ax.plot(range(T+1), quant_seq3[:T+1, i], label=rf"{name}, $\delta$s=0")
ax.plot(range(T+1), quant_seq4[:T+1, i], label=rf"{name}, $\delta$s=0.005")
ax.hlines(init_ss[i], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 价格
for i, name in enumerate(['W', 'r']):
ax = axs[(i+4)//3, (i+4)%3]
ax.plot(range(T+1), price_seq3[:T+1, i], label=rf"{name}, $\delta$s=0")
ax.plot(range(T+1), price_seq4[:T+1, i], label=rf"{name}, $\delta$s=0.005")
ax.hlines(init_ss[i+4], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
# 政策
for i, name in enumerate(['τ', 'D', 'G']):
ax = axs[(i+6)//3, (i+6)%3]
ax.plot(range(T+1), policy_seq3[:T+1, i], label=rf"{name}, $\delta$s=0")
ax.plot(range(T+1), policy_seq4[:T+1, i], label=rf"{name}, $\delta$s=0.005")
ax.hlines(init_ss[i+6], 0, T+1, color='r', linestyle='--')
ax.legend()
ax.set_xlabel('t')
findfont: Failed to find font weight normal, now using 600.
与 实验1:减税 相比,政府提高一次性税收以支付不断增加的债务利息支出,与提高资本所得税税率相比,这种做法的扭曲性更小。
122.12. 练习#
练习 122.1
本练习研究政府债务如何影响稳态资本存量。
解释为什么运动规律 (122.11) 中包含的是 \(D_{t+1}\) 而不是 \(D_t\)。
证明具有恒定债务水平 \(\hat D\) 的稳态满足
保持 \(\hat\tau = 0.15\) 不变,针对 \(\hat D \in \{0, 0.02, 0.05, 0.07\}\) 计算 \(\hat K\)。
求出存在稳态的最大 \(\hat D\),并在 \(0 < \hat D < \hat D_{\max}\) 时计算稳态的数目。
解答 练习 122.1
第1部分。 \(t\) 期的年轻人储蓄 \(A_{t+1} = (1-\beta)(1-\tau_t) W_t\)。
这些储蓄以实物资本 \(K_{t+1}\) 和在 \(t+1\) 期到期的政府债券 \(D_{t+1}\) 的形式持有,因此 \(K_{t+1} = A_{t+1} - D_{t+1}\)。
第2部分。 在 (122.11) 中令 \(K_{t+1} = K_t = \hat K\),\(\tau_t = \hat\tau\),\(D_{t+1} = \hat D\),并使用 \(W_t = (1-\alpha)\hat K^\alpha\)。
第3和第4部分。 函数 \(c K^\alpha - K\) 在 \(K\) 上是严格凹的,在 \(K=0\) 处等于零,并在 \(K^\star = (\alpha c)^{1/(1-\alpha)}\) 处达到最大值。
因此,稳态方程 \(c K^\alpha - K = \hat D\) 在 \(0 < \hat D < \hat D_{\max} \equiv c (K^\star)^{\alpha} - K^\star\) 时有两个解,在 \(\hat D = \hat D_{\max}\) 时有一个解,在 \(\hat D > \hat D_{\max}\) 时无解。
from scipy.optimize import brentq
c = (1 - τ_hat) * (1 - α) * (1 - β)
K_star = (α * c) ** (1 / (1 - α))
D_max = c * K_star ** α - K_star
def K_ss(D, high=True):
"Steady state K solving c K^α - D - K = 0."
f = lambda K: c * K ** α - D - K
return brentq(f, K_star, 10) if high else brentq(f, 1e-12, K_star)
print(f"D_max = {D_max:.5f} at K = {K_star:.5f}\n")
print(f"{'D':>6} {'K (high)':>9} {'K (low)':>9} {'r (high)':>9}")
for D in [0.0, 0.02, 0.05, 0.07]:
K_high = K_ss(D)
K_low = K_ss(D, high=False) if D > 0 else 0.0
print(f"{D:>6.2f} {K_high:>9.5f} {K_low:>9.5f} {K_to_r(K_high, α):>9.4f}")
D_max = 0.07393 at K = 0.03169
D K (high) K (low) r (high)
0.00 0.17695 0.00000 1.0084
0.02 0.14756 0.00013 1.1451
0.05 0.09837 0.00323 1.5210
0.07 0.05380 0.01593 2.3204
政府债务挤出资本:在 \(\hat D = 0.05\) 时,高资本稳态所持有的资本仅略多于 \(\hat D = 0\) 时的一半。
超过 \(\hat D_{\max} \approx 0.074\) 后,年轻人根本无法储蓄足够多来吸收该债务,因此不存在稳态。
实验1:减税 中减税所产生的债务水平 \(\bar D\) 远在此极限之内。
练习 122.2
在 实验2:政府资产积累 中,政府在保持 \(\tau_t = \hat\tau\) 的同时永久性地将其购买量减半,并积累资产。
计算 \(t=0\) 时代表性老年人的消费,以及在 \(t = 0, 1, \ldots, 7\) 时为年轻人的各世代的终生效用
每个值均相对于其初始稳态值进行衡量。
哪些世代获益,哪些世代受损,为什么?
解答 练习 122.2
G_seq_ex = τ_hat * 0.5 * Y_hat * np.ones(T+1)
τ_seq_ex = τ_hat * np.ones(T+1)
quant_ex, price_ex, policy_ex = closed.simulate(T, init_ss,
τ_pol=τ_seq_ex,
G_pol=G_seq_ex)
U = lambda Cy, Co: Cy ** β * Co ** (1 - β)
U_hat = U(Cy_hat, Co_hat)
print(f"initial old: Co_0 = {quant_ex[0, 3]:.5f}, "
f"steady state Co_hat = {Co_hat:.5f}\n")
print(f"{'cohort young at t':>18} {'Cy':>7} {'Co next':>8} {'r next':>7} {'U/U_hat - 1':>12}")
for t in range(8):
gain = U(quant_ex[t, 2], quant_ex[t+1, 3]) / U_hat - 1
print(f"{t:>18} {quant_ex[t, 2]:>7.4f} {quant_ex[t+1, 3]:>8.4f}"
f" {price_ex[t+1, 1]:>7.4f} {gain:>11.2%}")
initial old: Co_0 = 0.32861, steady state Co_hat = 0.32861
cohort young at t Cy Co next r next U/U_hat - 1
0 0.1769 0.3065 0.8616 -3.42%
1 0.1893 0.2971 0.6699 -1.66%
2 0.2108 0.3016 0.5062 4.57%
3 0.2377 0.3164 0.3894 13.75%
4 0.2660 0.3360 0.3096 23.99%
5 0.2935 0.3569 0.2540 34.22%
6 0.3195 0.3776 0.2139 44.04%
7 0.3439 0.3977 0.1839 53.37%
在 \(t=0\) 时代表性老年人完全不受影响,连最后一位数字都不变。
该人的消费为 \((1 + r_0(1-\tau_0))(K_0 + D_0)\),而该政策没有改变 \(K_0\)、\(r_0\)、\(\tau_0\) 或 \(D_0\) 中的任何一个。
在 \(t=0\) 和 \(t=1\) 时为年轻人的世代,其终生效用分别损失了约 \(3.4\) 和 \(1.7\) 个百分点。
他们从几乎没有因该政策而增加的工资中进行储蓄,并获得了由不断上升的资本存量所带来的低得多的利率,\(r\) 从 \(1.01\) 降至 \(0.86\),再降至 \(0.67\)。
从 \(t=2\) 开始,每一代都获益,先是 \(4.6\) 个百分点,之后获益持续增加,因为从那时起工资的增长超过了利率的下降。
这正是该政策将财富从早期世代重新分配给后期世代的意义所在。
练习 122.3
本练习使用一次性总付税来研究稳态下的现收现付社会保障体系,以补充 实验4:一个无基金的社会保障制度 中计算的过渡过程。
设对所有 \(t\),\(\delta_{yt} = -\delta_{ot} = d\),且 \(D_t = 0\),\(G_t = \hat G\)。
利用 (122.10) 证明
使用类
AK2,针对 \(d \in \{0,\ 0.05 \hat C_y,\ 0.1 \hat C_y,\ 0.2 \hat C_y\}\) 计算新的稳态,报告过渡结束时的 \(K\)、\(r\)、\(\tau\)、\(C_y\) 和 \(C_o\)。该转移支付方案是逐期平衡的。那么为什么它仍然会在稳态下降低两种消费?
解答 练习 122.3
第1部分。 将 \(\delta_{yt} = d\) 和 \(\delta_{o,t+1} = -d\) 代入 (122.10)。
第2部分。
D_pol_ex = np.zeros(T+2)
G_pol_ex = np.ones(T+2) * G_hat
print(f"{'d / Cy_hat':>10} {'K':>8} {'r':>7} {'τ':>7} {'Cy':>7} {'Co':>7}")
for frac in [0.0, 0.05, 0.1, 0.2]:
d = frac * Cy_hat
δy_ex, δo_ex = np.ones(T+2) * d, -np.ones(T+2) * d
q_ex, p_ex, pol_ex = ak2.simulate(T, init_ss, δy_ex, δo_ex,
D_pol=D_pol_ex, G_pol=G_pol_ex)
print(f"{frac:>10.2f} {q_ex[T, 0]:>8.5f} {p_ex[T, 1]:>7.4f}"
f" {pol_ex[T, 0]:>7.5f} {q_ex[T, 2]:>7.4f} {q_ex[T, 3]:>7.4f}")
d / Cy_hat K r τ Cy Co
0.00 0.17695 1.0084 0.15000 0.1769 0.3286
0.05 0.16637 1.0529 0.15280 0.1710 0.3236
0.10 0.15567 1.1030 0.15588 0.1648 0.3183
0.20 0.13376 1.2266 0.16313 0.1512 0.3064
第3部分。 该体系通过对年轻人征税来支付给老年人,它所承诺的老年收入是年轻人不必为获得它而储蓄的部分。
第1部分储蓄规则中的两项都随 \(d\) 的增加而减少:年轻人的税后收入减少了,并且老年时获得转移支付的前景降低了他们希望用剩余收入进行的储蓄。
储蓄的减少意味着资本存量的降低,这会压低工资并推高利率。
较低的产出随后需要更高的统一税率 \(\tau\) 来支付不变的购买量 \(\hat G\),这进一步压低了储蓄。