入门:Krusell & Smith(1998)
该模型描述了一个生产经济,其中家庭面临无法保险的个体异质性劳动收入风险。总体冲击是对全要素生产率的冲击。工具包能够求解模型稳态,并且可以求解未预期的总体冲击发生后确定性的线性/非线性转移路径。根据 Boppart,Krusell & Mitman (2018) 和 Auclert 等,(2021),确定性转移路径刻画了总体冲击的一阶效应。
为便于比较,我们采用了 Den Haan,Judd & Juillard (2010) 中的模型设定及参数值。
模型
家庭具有异质性的就业状态 \(e\in\{0,1\}\) 及资本持有 \(a \in R^+\),并求解如下的贝尔曼方程:
其中 \(\bar{l}\) 是就业状态下的劳动供给,\(\tau\) 是劳动所得税率,\(\mu\) 是失业保险偿付率。\(r_t\) 和 \(w_t\) 分别为利率和工资。家庭面临无借贷约束 \(a'\geq 0\)。
代表性厂商使用资本与劳动进行生产:\(Y_t = Z_t K_t^{\alpha} L_t^{1-\alpha}\)。资本折旧率为 \(\delta\)。利率和工资由市场竞争决定。
给定家庭状态的初始分布 \(\Phi_0\),序列竞争均衡定义为:(1)家庭状态分布 \(\{\Phi_t\}_{t=0}^{\infty}\);(2)家庭值函数与策略函数 \(\{v_t,g_{c,t},g_{a',t}\}_{t=0}^{\infty}\);(3)总体数量与价格 \(\{K_t, L_t, r_t, w_t\}_{t=0}^{\infty}\) 的序列,使得:
\(\{v_t,g_{c,t},g_{a',t}\}\) 求解由 (1) 定义的家庭最优化问题;
市场出清: \(K_t=\int a \ \mathrm{d}\Phi_t(e,a)\), \(L_t=\int \bar{l} e \ \mathrm{d}\Phi_t(e,a)\)。商品市场出清满足瓦尔拉斯定律。
\(r_t\) 和 \(w_t\) 由 (2) 确定。
失业救济金来源于劳动所得税:\(w_t\int \bar{l} \tau e \ \mathrm{d}\Phi_t(e,a)=w_t\int (1-e)\mu \ \mathrm{d}\Phi_t(e,a)\)。
\(\{\Phi_t\}\) 与策略函数 \(g_{a',t}\) 和 \(e\) 的外生转移一致。
工具箱脚本(hmod)文件
模型可以由 KS_JEDC10.hmod
描述,如下所示:
1% The parameters are from from den Haan, Judd, Juillard, 2010, "Computational Suite of models with heterogeneous agents:
2% Incomplete markets and aggregate uncertainty" Journal of Economic Dynamics and Control, 34, pp 1 - 3.
3parameters beta r w;
4beta = 0.99; % subjective discount factor
5r = 0.009; % asset return
6w = 0.89; % wage rate
7labor = 1.0/0.9; % exogenous labor supply when working
8mu = 0.15; % unemployment insurance replacement ratio
9
10var_shock e;
11shock_trans = [0.600000, 0.400000;
12 0.044445, 0.955555];
13e = [0.00;1.00];
14shock_invariant_dist = [0.1;0.9];
15e_bar = shock_invariant_dist(:).'*e(:);
16L = labor*e_bar;
17unemp_rate = shock_invariant_dist(1); % unemployment rate
18tau = mu*unemp_rate/L; % labor income tax rate
19
20var_state a;
21a = exp(linspace(log(0.25), log(200 + 0.25), 500)) - 0.25;
22
23var_pre_vfi budget;
24budget = (1+r)*a + w*((1.0-tau)*e*labor + mu*(1- e));
25
26% var_policy defines the choice variable
27var_policy ap;
28initial ap 0.0;
29% var_aux defines varaibles that can be simply evaluated
30var_aux c;
31
32vfi;
33 c = budget - ap;
34 u = log(c);
35 Tv = u + beta*EXPECT(v(ap));
36 ap <= budget;
37 ap >= 0.0;
38end;
39
40var_agg K;
41K = 43.0; % initial guess
42alpha = 0.36; % capital share
43delta = 0.025; % depreciation
44
45var_agg_shock Z;
46Z = 1.0; % steady state value
47
48model;
49 % Aggregate conditions stated like Dynare
50 r = alpha * Z * K(-1)^(alpha-1) * L^(1-alpha) - delta;
51 w = (1-alpha) * Z * K(-1)^alpha * L^(-alpha);
52 K == ap; % asset demand = asset supply
53 % Allow box constraints for aggregate variables
54 K >= 38.0;
55 % post evaluation
56 Y = Z*(K(-1)^alpha)*(L^(1-alpha));
57 I = K - (1 - delta)*K(-1);
58 C = Y - I;
59end;
脚本文件的目标是定义一个 vfi(值函数迭代)模块,用于确定个体决策问题,并定义一个 model 模块,用于确定总体均衡条件。
在 vfi 模块之前需要定义用于求解个体问题所需的信息。模块中定义的信息将按照顺序进行解释。
1% The parameters are from from den Haan, Judd, Juillard, 2010, "Computational Suite of models with heterogeneous agents:
2% Incomplete markets and aggregate uncertainty" Journal of Economic Dynamics and Control, 34, pp 1 - 3.
3parameters beta r w;
4beta = 0.99; % subjective discount factor
5r = 0.009; % asset return
6w = 0.89; % wage rate
7labor = 1.0/0.9; % exogenous labor supply when working
8mu = 0.15; % unemployment insurance replacement ratio
该模块声明了 vfi 模块中使用的参数及其数值。
10var_shock e;
11shock_trans = [0.600000, 0.400000;
12 0.044445, 0.955555];
13e = [0.00;1.00];
14shock_invariant_dist = [0.1;0.9];
15e_bar = shock_invariant_dist(:).'*e(:);
16L = labor*e_bar;
17unemp_rate = shock_invariant_dist(1); % unemployment rate
18tau = mu*unemp_rate/L; % labor income tax rate
该模块在 var_shock 中声明了个体外生状态及其数值,这些状态需要被定义为具有联合转移矩阵 shock_trans 的离散马尔科夫过程。给定失业保险偿付率 \(\mu\) 的校准,平衡预算的劳动所得税率 \(\tau\) 可以预先确定。
20var_state a;
21a = exp(linspace(log(0.25), log(200 + 0.25), 500)) - 0.25;
该模块在 var_state 中声明了个体的内生状态,并且指定了用于近似值函数及策略函数的离散格点值。对于多维状态,函数将在离散状态值的张量积上进行近似。
23var_pre_vfi budget;
24budget = (1+r)*a + w*((1.0-tau)*e*labor + mu*(1- e));
该模块定义了一些简单变量,这些变量是外生状态和/或内生状态的函数,可以在求解决策问题之前确定。在这里,预算被视为按照特定价格(价格被定义为参数)计算的资本与劳动收入之和。该模块是可选的。
26% var_policy defines the choice variable
27var_policy ap;
28initial ap 0.0;
将需要优化的变量(此处为未来资本持有 \(a'\))在 var_policy 中声明。辅助变量(此处为消费 \(c\))可以直接作为 var_shock,var_state 和/或 var_policy 的简单函数进行计算,并被声明为 var_aux。
所有信息准备就绪之后,在 vfi 模块中的 vfi; 与 end; 之间定义个体问题。
32vfi;
33 c = budget - ap;
34 u = log(c);
35 Tv = u + beta*EXPECT(v(ap));
36 ap <= budget;
37 ap >= 0.0;
38end;
vfi 模块从 var_state(此处为 \((e,a)\))和 var_policy(此处为 \(a'\))的值开始,定义 Tv 中的目标(被标注的行)。如所示,这一行遵循贝尔曼方程的自然语法,其中未来值函数 v 被视为已知,并在未来的内生状态值上调用。EXPECT 操作符用于求解未来外生状态的积分。
var_policy 的约束(此处为 \(0 \leq a'\leq budget\))以及任意的等式或不等式约束可以在定义目标之后进行说明。
所有的 var_aux(此处为 \(c\))都需要被定义。
脚本文件可以在定义 vfi 块后停止,因此工具箱只生成用于解决自包含决策问题的代码。
为了求解均衡,需要在 model 模块中定义一个总体变量方程组,在模块前定义的全部所需信息将按照顺序解释。
40var_agg K;
41K = 43.0; % initial guess
42alpha = 0.36; % capital share
43delta = 0.025; % depreciation
均衡系统的未知数需要声明为 var_agg(此处为 \(K\)),并指定其初始值。定义总体系统时使用的任何参数值(此处为 \(\alpha,\delta\))也需要被明确指定。
45var_agg_shock Z;
46Z = 1.0; % steady state value
总体冲击被声明为 var_agg_shock。总体冲击本质上是模型参数,并允许随时间变化。此处为总体 TFP,\(Z\)。
所有信息准备就绪之后,总体均衡系统被定义为:
48model;
49 % Aggregate conditions stated like Dynare
50 r = alpha * Z * K(-1)^(alpha-1) * L^(1-alpha) - delta;
51 w = (1-alpha) * Z * K(-1)^alpha * L^(-alpha);
52 K == ap; % asset demand = asset supply
53 % Allow box constraints for aggregate variables
54 K >= 38.0;
55 % post evaluation
56 Y = Z*(K(-1)^alpha)*(L^(1-alpha));
57 I = K - (1 - delta)*K(-1);
58 C = Y - I;
59end;
model 模块的目标是定义表征总体均衡条件的方程系统。每个方程都用 “==” 定义,如代码块中突出显示的那样。在这里,系统由一个简单的方程组成,即资产市场出清条件 \(K_{t+1}=\int g_{a',t} d\Phi_t(e,a)\)。var_policy 可用于方程定义之中,表示在 \(t\) 时刻基于分布的个体策略函数加总,行中的 ap 表示 \(\int g_{a',t} d\Phi_t(e,a)\)(\(ap\) 被声明为 var_policy)。
在定义系统之前,需要按顺序计算中间变量 \(r,w\)。请注意,在定义方程之前,需要更新用于解决个体决策问题的参数(此处为 \(r\),\(w\)),以适应 var_agg 中的变化。对于变量的时间序列索引,符号遵循 Dynare 的惯例:将预先确定的总体变量作为滞后变量进行索引(此处使用 \(K(-1)\) 计算 \(r\) 和 \(w\))。
可以对 var_agg 施加约束。这里指定了 \(K \geq 38\) 使得 \(r\) 有界,以确保值函数迭代能够收敛。
定义方程后,可以定义其他的总体均衡变量(此处最后三行定义了 \(Y,I,C\))。求解系统后会返回这些变量值。
使用工具箱
解析脚本文件后,工具箱会生成 MATLAB 文件,包括:solve_vfi.m,solve_ss.m,solve_trans_linear.m,solve_trans_nonlinear.m 以及其他可以调用的函数,用于求解模型的稳态、平稳分布和转移路径。这些函数的使用方法如下所示。
解析 .hmod 文件
求解静态均衡
求解暂时性冲击后的转移路径
求解线性转移路径
求解非线性转移路径
求解永久性冲击后的转移路径
模拟个体样本
在平稳分布下模拟个体样本
在转移路径中模拟个体样本
接下来做什么?
了解工具箱算法的详细信息。
查看工具箱 API 参考。
更多示例:
McKay, Nakamura 和 Steinsson (2016): 包含异质性主体的新凯恩斯模型(HANK),用于定义复杂的均衡条件和处理非线性问题
一个用于处理投资组合选择的双资产 HANK 模型
Khan 和 Thomas (2008) : 处理非凸调整成本和随机状态转移