这里详细讨论下模型基准求解以及counterfactual。主要讨论算法,与文章经济内容关系不大。
在这里也在最基础的求解和counterfactual做个算法上的拓展,使其能够求解任意时期的均衡分布以及任意多时期的shock的影响。
1 Simulating the baseline economy
1.1 Solving forward
所有均衡条件如下
这里重复一下之前的求解过程:
给定初始的经济分布:人口 ,人口流动 ,工资 和所有时期的交通成本(假设其他基本因素保持不变),以下算法求解动态均衡:
初始条件: 计算初始均衡:
给定 ,使用公式 (2) 计算初始的市场准入。 在市场准入已知的情况下,使用公式 (1) 计算 ,并假设在后续时期保持不变。
1.2 Solving backward
以上可以根据初始年份分布算出之后所有年份分布。给定上述求出的均衡分布,我们也可以算出之前任意年份的分布:
我们可以将公式 (3) 和 (5) 重写为
这里 表示migration matrix的逆。
(6)式推导如下:
给定均衡变量 ,,,,,我们可以向之前年份求解模型:
从 开始 获取migration: 在给定 和 的情况下,使用公式 (6) 计算 。 获取劳动力分配: 在给定 和 的情况下,使用公式 (7) 计算 。 获取均衡的工资和价格: 在给定 的情况下,使用公式 (1) 和 (2) 计算 和 。 获取期望效用变化: 在给定 、、、、 和 的情况下,使用公式 (4) 计算 。 下一时期: 设定 并返回步骤 2。
2 信息集
将 定义为决策者在做出决策时面临未来所有年份fundamental的信息集。这表明forward looking决策者对未来fundamental的信念。他们将根据这些信念做出与信念一致的决策。
比如,假设决策者认为未来海平面不变,即交通成本不会上升,那么做出的决策就是在以上模型中把未来所有交通成本设置为不变的决策。即使实际上未来交通成本会改变。
这里就发现信息集对于决策的影响了。求解上述模型代入的fundamental是决策者的信息集而不是实际的值,尽管有时他俩是一样的。
在动态模型中,信息集非常重要,因为不同信息集下的期望效用会不同,以下两个情景将会得到不同的结果:
(a)决策者从一开始就知道未来海平面会上升会在五年后持续上升 (b)决策者在第五年才知道未来海平面会上升,之前一直以为不会上升 (c)在另一个世界里,决策者始终认为海平面不会上升
那么即使实际情况是,前四年海平面不变,第五年持续上升,a和b也会在每一年做出不同的决策,a前四年的决策会考虑到未来的海平面上升,可能就不会在海边太多投资。b决策者在前四年的决策将会与c的前四年完全相同,因为在前四年二者面临完全一样的初始条件和信息集。即使在五年后,a和b也不会是一样的决策,因为二者在第五年的初始分布已经不同,即使5年后有相同的信息集了,也不会是相同的决策。
定义在信息集 下做的决策对应的变量为 ,那么有
其中,
2.1 两个信息集之间的变量变化
给定两个任意的信息集 ,定义
然后我们可以得到以下修改后的公式来替代公式 (4) 和 (5):
以及
根据 的定义,我们还可以得到,对于任意的信息集 和 ,
当 时,方程 (11) 和 (12) 简化为方程 (4) 和 (5)。否则,它们是不同的。
每个式子推导为:
2.2 信息集的时间
记,在时间 ,决策者面临的信息集为 ,我们有
以及
3 Unexpected shock at time 0
假设Unexpected shock发生在时间 。信息集由以下公式给出:
这个情况就是文章的情况。即假设在最开始突然修路会怎么样。那么 就表示在初始年份决策者突然看到有新的路了,这是counterfactual。而 表示决策者一直以为没有新的路,这是基准情况,可以通过第一部分的算法求解这个baseline economy。
在这里,我们也对 之前的时间的信息集感兴趣,因为我们可以向前求解baseline economy,以获得 之前任何时期的均衡值。当在新信息集下求解均衡时会用到。
对于 我们有 ,因此带入之前的定义,我们有
对于 ,我们有
未知数是 ,因此我们仍然需要 作为模型中其他变量的函数来消掉他:
方程 (13) 给出
3.1 算法
给定 ,, 和 通过第一部分的算法得到的baseline economy,我们可以通过以下步骤求解新的信息集下的counterfactual:
初始猜测: 猜测一组 ,并假设 。 求解初始值变化: 给定 和 ,使用公式 (23) 求解 。 求解初始migration: 给定 和 ,使用公式 (21) 求解 。 求解所有migration: 对于 ,给定 和 ,使用公式 (20) 求解 。 求解每个时期的劳动力分配: 给定 和 ,使用公式 (16) 求解劳动力分配 。 求解每个时期的工资和价格: 给定每个时期的劳动力分配 ,使用公式 (17) 和 (18) 求解每个时期的工资和价格,并得到 。 求解新的期望效用变化: 给定 , 和 ,使用公式 (19) 和 (22) 求解新的 。 迭代直到 收敛。
3.2 代码
在使用算法进行模拟之前,我们需要首先使用第一部分的算法,通过公式 (7) 和 (4) ,求解 和 ,这里初始年份为2010,-1年份为2005,5年一个间隔:
L_2005 = linsolve(m_2010', L_2010);
eqMAwsub = @(MA_2005) eqMA_main(MA_2005, d_2005, (Rel_A_2010.^(eta - 1) .* MA_2005 ./ L_2005.^((eta - sigma)/(1 - sigma))).^(1/eta), L_2005, eta);
[MA_2005, eq17error_2005] = lsqnonlin(eqMAwsub, MA_temp0, lb, ub, options);
display(eq17error_2005)
w_2005 = (Rel_A_2010.^(eta - 1) .* MA_2005 ./ L_2005.^((eta - sigma)/(1 - sigma))).^(1/eta);
P_2005 = MA_2005.^(1/(1 - eta));
clear eqMAwsub;
Y_pre_bl = ones(N, 1);
Y_pre_bl = ((w_2010 ./ w_2005).^alpha ./ ((P_2010 ./ P_2005).^alpha .* ((L_2010 ./ L_2005)).^(1 - alpha))).^(1/nu) .* (m_2010 * (Y_path(:,1)).^beta);
这里用linsolve函数求解公式7的人口分布,用lsqnonlin来求解均衡价格和工资,再带入公式4求解期望效用变化Y_pre_bl。这部分代码也可以用其他函数或者循环迭代求解。
以下代码求解反事实经济。在代码中,migration的索引从 -1 开始,期望值变化的索引从 0 开始。m_prevperiod_path(:, 1) 对应 。
初始猜测: 猜测一组 ,并假设 。在代码中,这由 给出:
Y_path_bl = [Y_pre_bl Y_path];
Y_path = Y_path_bl;
求解初始反事实migration:
for s = 0
m_temp = vec2mat(m_prevperiod_path(:, s + 1), N)';
Y_temp = Y_path(:, s + 2);
Y_temp_pre = Y_path(:,s+1);
m_next = m_temp .* ((m_temp * ((Y_temp.*((Y_temp_pre)./(Y_pre_bl))).^beta)).^(-1) * (Y_temp.*((Y_temp_pre)./(Y_pre_bl)))'.^beta);
m_next_col = m_next(:);
m_prevperiod_path(:, s + 2) = m_next_col;
end
求解所有反事实migration:
for s = 1:T
m_temp = vec2mat(m_prevperiod_path(:, s + 1), N)';
Y_temp = Y_path(:, s + 2);
m_next = m_temp .* ((m_temp * (Y_temp.^beta)).^(-1) * Y_temp'.^beta);
m_next_col = m_next(:);
m_prevperiod_path(:, s + 2) = m_next_col;
end
求解每个时期的劳动力分配:
for s = 0:T-1
m_temp = vec2mat(m_prevperiod_path(:, s + 2), N)';
L_temp = L_path(:, s + 1);
L_next = m_temp' * L_temp;
L_path(:, s + 2) = L_next;
end
求解每个时期的工资和价格:
L_temp = L_path(:, s + 2);
MA_temp0 = MA_path(:, s + 1);
eqMAwsub = @(MA_temp) eqMA_main(MA_temp, d_2010, (Rel_A_2010.^(eta - 1) .* MA_temp ./ L_temp.^((eta - sigma)/(1 - sigma))).^(1/eta), L_temp, eta);
[MA_temp, eq17error_temp] = lsqnonlin(eqMAwsub, MA_temp0, lb, ub, options);
w_temp = (Rel_A_2010.^(eta - 1) .* MA_temp ./ L_temp.^((eta - sigma)/(1 - sigma))).^(1/eta);
MA_path(:, s + 2) = MA_temp;
w_path(:, s + 2) = w_temp;
P_path(:, s + 2) = MA_path(:, s + 2).^(1/(1 - eta));
求解新的值变化:
Y_path_new = ones(N,T+2);
for s = 0
m_temp = vec2mat(m_prevperiod_path(:, s + 1), N)';
Y_temp = Y_path(:, s + 2);
Y_temp_pre = Y_path(:,s+1);
Y_path_new(:,s+1) = ((w_path(:,s+1)./w_2005).^alpha ./ ((P_path(:,s+1)./P_2005).^alpha .* ((L_path(:,s+1)./L_2005)).^(1 - alpha))).^(1/nu) .* (m_temp * ((Y_temp.*((Y_temp_pre)./(Y_pre_bl))).^beta));
end
for s = 1:T
m_temp = vec2mat(m_prevperiod_path(:, s + 1), N)';
Y_temp = Y_path(:, s + 2);
Y_path_new(:,s+1) = ((w_path(:,s+1)./w_path(:,s)).^alpha ./ ((P_path(:,s+1)./P_path(:,s)).^alpha .* ((L_path(:,s+1)./L_path(:,s))./(H_path(:,s+1)./H_path(:,s))).^(1 - alpha))).^(1/nu) .* (m_temp * (Y_temp.^beta));
end
迭代: 仅需比较 Y_path(:t) 对于 即 :
should_be_zero_Y = abs(Y_path(:) - Y_path_new(:));
should_be_one_Y = should_be_zero_Y + 1;
int_should_be_100000_Y = round(should_be_one_Y.*100000);
if int_should_be_100000_Y(:) == 100000
converge = 1;
disp('>>> Y Converged <<<');
Y_iter = Y_iterations;
else
Y_path = Y_path + damp .* (Y_path_new - Y_path);
Y_iter = Y_iter + 1;
end
4 求解baseline economy的一般算法
在第一部分中,我们给出了在初始经济分布(即人口 和人口流动 )下的forward和backward求解算法。更一般地,我们不需要限制在同一时期,也不需要分别进行forward和backward求解。
对于任意两个时期 ,在相同的信息集 下,给定人口分布 和人口流动 ,即所有决策者在所有时期都有相同的信息集。然后,我们可以使用以下算法从任何时间 开始求解经济:
猜测期望效用变化: 猜测一组 ,并假设 。 获取migration: 给定 和 ,使用公式 计算迁移矩阵 $ {m_{in,t}}^{T-1}{t>t_m} 6 {m{in,t}}^{t_m-1}_{t\ge \bar{t}} $。 获取劳动力分配: 给定 $ {m_{in,t}}^{T-1}{t\ge \bar{t}} L{i,t_L} 7 {L_{i,t}}^{t_L-1}{t\ge \bar{t}} 3 {L{i,t}}^{T}_{t> t_L} $。 获取每一期均衡的工资和价格: 给定 ,使用公式 和 计算每个时期的工资 和价格 。 获取新的期望效用变化: 使用步骤 4 中计算的工资和价格,使用公式 计算新的 。 迭代: 与步骤 1 中的初始猜测进行比较,并迭代直到收敛。
5 任意时间 的Unexpected shock
假设Unexpected shock发生在时间 。信息集由以下公式给出:
求解算法几乎与从 0 开始的冲击相同。
对于 我们有 ,因此我们有
对于 ,我们有
方程 (13) 给出
给定 , 和 ,我们可以通过第三节中给出的算法求解均衡,只需将 替换为 0。
这将求解出 , 和 。
6 一连串unexpected shock
如果动态经济的每个时间的信息集由 给出,这意味着决策者在每个时间 做决策时的信息集在每个时期都会可能变化。这允许多个unexpected shock在不同时间发生。
目标是求解所有的 , 和 。
6.1 之后信息集保持不变
假设多个unexpected shock只发生在 之前,并且在时间 之后信息集保持不变。信息集由以下公式给出:
Proposition求解 、、 和 仅依赖于 、、、 而不需要其他信息集。并且可以使用第三节中的算法求解。
证明:
对于 ,我们有 ,因此我们有
对于 ,我们有
并且
这些方程组确定了 之后的均衡,且 之前的任何信息集都不重要。通过将 替换为 , 替换为 , 替换为 ,这个问题就转化为第三节中的问题。
多个unexpected shock的求解算法
假设经济在不同的时间段经历了多次unexpected shock,使得时间 的信息集由 给出。这些可能是决策者在做决策时未预料到的实际冲击,或者是经济学家的counterfactual analysis。
信息集 表以baseline信息集 开。如果unexpected shock发生在时间 0,我们仍然可以将初始信息集写为 ,因为我们总是可以向前求解并找到没有发生冲击的时间段。从该时间段开始,并将该时间段的信息集表示为baseline信息集。
以下算法在 下求解均衡:
由于信息集从 开始,使用第一节中的算法求解baseline economy。得到 、、 和 。
对于 ,在给定 、、 和 的情况下,使用第三节中的算法求解 、、 和 。
重复步骤 2,直到最终信息集不再变化。然后,最后一次迭代也给出了未来时间段在最终信息集下的解。