Suggestion for replication: Garstenauer and Siassi (2024)

This is a very interesting paper on married mothers labor supply, with a focus on the employment disincentives induced by child-related transfers.

Technically, it is a life-cycle, partial equilibrium model with two endogenous state variables: assets a and female human capital h. Households choose savings a', male and female labor supply l_m, l_f and next period human capital is given by h'=H(h,l_f). Fertility is exogenous and stochastic.
Unless I miss something, the model fits nicely into the setup of " Life-Cycle model 41: Female Labor Force Participation History (experienceasset)", codes available here:

The authors write in the appendix that they solve the model using value function iteration due to the many kinks and non-convexities induced by the detailed tax and transfer scheme. The toolkit then should perform quite well.

3 Likes

Very interesting paper, @aledinola

Do you happen to have a toolkit replication available?

1 Like

I don’t, but I think it can be done relatively easily, maybe with the help of AI (see my example on the neoclassical growth model with ChatGPT writing the code for the toolkit, which was of course much simpler).

The only thing I would change if you do try and replicate the paper:
“For both females and males, the idiosyncratic productivity component z evolves according to a random walk with innovation ϵ,”
Change this to a AR(1) with high persistence, discretized with Rouwenhorst method. In the VFI-Toolkit it would work better.

P.S. It makes things faster if you point your AI to a toolkit example that solves a vaguely similar model (see my older post above).

1 Like

Thanks @aledinola

I will try with chatgpt but I think I found already a blocker: how to model childcare cost shocks eta with the toolkit? If you give me a hint I can try myself. I doubt chatgpt can help on this specific aspect.

1 Like

I already did a replication code last year, but I wanted to wait for the paper to publish before making it public. If anyone wants a copy send me an email. Once it is published I will upload my codes, but felt it was polite to wait.

My experience with Claude-coding models from papers is first tell it “the plan is to replicatate paper X with VFI Toolkit, give it a copy of the paper and link to the github org saying it can find the toolkit and lots of examples and replications there, and ask it to explain how it will do the model action-space and state-space”. Note that the org means it not only sees the toolkit, but also all the examples and replications, and asking about the action-space and state-space is explicitly getting Claude to think in terms of how the model is represented in VFI Toolkit, this seems to work well as a warm up. Then ask it to “code the value fn iter problem”, now run and see it seems okay. Then get on with the rest.

“For both females and males, the idiosyncratic productivity component z evolves according to a random walk with innovation ϵ,”
The empirical evidience is clearly against random walks, but if you want to do one in VFI Toolkit you can just use “discretizeLifeCycleAR1_KFTT”. Technically what you should do for random walks is renormalize the model, but this is a pain in the arse and you can solve the Garstenauer & Siassi model without bothering (the advantage of the renormalization is to eliminate the variable from the state space, making solving it much faster).

The “eta (childcare characteristics)” is a markov.

Some comments from my code that might help provide the AI with guidance:

% Comment: eqn (3) that specifies the bellman eqn is 'wasteful' in the sense that k should not be part of the state space, we just need
% the 'number of children' which is a much smaller object [k can be found from 'number of children' together with model period]
%
% Comment: setting up eta grid is a bit involved, so can only use n_z(2)=3,5,7 (you could easy code more; GS2025 use 5)
%
% Comment: not quite sure why they don't just model eta as a permanent type (and then have childcare costs depend on eta and age of
% youngest child). Would make the computation much easier/faster, and does not seem like they actually want the ability to change eta for anything
% much (other than reducing it when youngest child turns 5 or 13 which would still happen). What current setting does allow that permanent type
% does not is that eta can go up/down when you have a second/third child, or that you can go from high/low cost 0-to-4-yr-old to a low/high cost
% 5-to-12-yr-old, but unclear why they want any of this (I don't think they actually do).

PS. Looking at my codes, it takes 30+ lines to set up eta (childcare characteristics) and is a bit convoluted. So the AI may well struggle. Again, if you want a copy of my code, just email me.

Here is the creation of the unit-root processes, as I don’t think this is way of doing them with discretizeLifeCycleAR1_KFTT() is documented anywhere.

% Male idiosyncratic earnings, zm
kfttoptions_m.initialj1sigmaz=Params.sigma_zm0;  % GS2025 use subscript 0, but appears to actually be about period 1???
[ln_zm_grid_J,pi_zm_J]=discretizeLifeCycleAR1_KFTT(0,1,Params.sigma_zm_epsilon,n_z(3),N_j,kfttoptions_m);
zm_grid_J=exp(ln_zm_grid_J);
% Female idiosyncratic earnings, zf
kfttoptions_f.initialj1sigmaz=Params.sigma_zf0; % GS2025 use subscript 0, but appears to actually be about period 1???
[ln_zf_grid_J,pi_zf_J]=discretizeLifeCycleAR1_KFTT(0,1,Params.sigma_zf_epsilon,n_z(4),N_j,kfttoptions_f);
zf_grid_J=exp(ln_zf_grid_J);
% Comment: from perspective of toolkit, it is silly to assume (as done here) that the idiosyncratic earnings shocks for male and female are
% independent. (Computationally costless to not assume this)