Replication of Boar and Midrigan (2022)

Good spot. Just updated to fix.

1 Like

I think there is a typo in the assets plots. The policy function a'(a,z) for a given z should be convex in a since the policy for consumption is concave.

Moreover the policy for a’ given z1 should have a flat part for small values of assets, where the borrowing constraint binds.

Spotted: You are not using PolicyVals in the plots

Good spot! I have corrected the above assets plots to use PolicyVals, and corrected the code.

On the convexity, it is there, just hard to see as there is only a small amount of convexity. Here is a graph, same as the above but zoomed in at low assets (and dropping the ‘zsuper’ as it otherwise makes the graph hard to read),


you can see in the top panel that assets is convex (if you look really closely), but it is only a little bit convex and the bottom panel shows why, namely there is a fair bit of ‘precautionary labor supply’ which reduces the need for ‘precautionary savings’ (Pijoan-Mas, 2006).

Here is another graph, this time zooming in even more on low assets and only for the lowest worker productivity z1, which plots both next period assets (optimal policy) and a straight line connecting the two ends of the next period assets,


you can see that the straight line is above the next period asset optimal policy, illustrating that it is convex.

Here is code for these two additional graphs (that uses PolicyVals created in code in earlier post)

figure_c=figure_c+1;
figure(figure_c);
subplot(2,1,1); plot(a_grid(1:200),PolicyVals(2,1:200,1),a_grid(1:200),PolicyVals(2,1:200,6),a_grid(1:200),PolicyVals(2,1:200,11))
legend('z1','z6','z11')
xlabel('a')
ylabel('aprime')
title('Next period assets, zoomed in at low assets')
subplot(2,1,2); plot(a_grid(1:200),PolicyVals(1,1:200,1),a_grid(1:200),PolicyVals(1,1:200,6),a_grid(1:200),PolicyVals(1,1:200,11))
legend('z1','z6','z11')
xlabel('a')
ylabel('d')
title('Labour supply, zoomed in at low assets')


figure_c=figure_c+1;
figure(figure_c);
plot(a_grid(1:100),PolicyVals(2,1:100,1),a_grid(1:100),interp1([0,a_grid(100)],[PolicyVals(2,1,1),PolicyVals(2,100,1)],a_grid(1:100)'))
legend('z1','straight line between the ends')
xlabel('a')
ylabel('aprime')
title('Next period assets, zoomed in at very low assets')
1 Like