Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New model: endogenous labor supply (intensive margin) #113

Closed
mnwhite opened this issue May 19, 2017 · 9 comments
Closed

New model: endogenous labor supply (intensive margin) #113

mnwhite opened this issue May 19, 2017 · 9 comments
Assignees
Labels
Status: In Progress In Progress and NOT-OK to be merged. Tag: New Model

Comments

@mnwhite
Copy link
Contributor

mnwhite commented May 19, 2017

We want to move into models with labor supply choice soon. For starters, a model with choice over quantity of labor supplied is quite feasible. Consider the utility form:

u(C,\ell) = ((1-\ell)^\alpha C)^(1-\rho)/(1-\rho)

With transitory and permanent productivity shocks, this model can be solved in normalized form using EGM. State variables will be (bNrmNow,TranShkNow). In precomputation step, will construct a function that maps (EndOfPrdvP,TranShkNow) to (cNrmNow,LbrNow) solutions to the EGM-style FOCs. cFunc will be a LinearInterpOnInterp1D.

@mnwhite
Copy link
Contributor Author

mnwhite commented May 19, 2017

Posted this now because one of my students will be tackling this model for her course project.

@edmundcrawley
Copy link
Contributor

edmundcrawley commented May 19, 2017 via email

@mnwhite
Copy link
Contributor Author

mnwhite commented May 19, 2017

Yes, for very large values of mNrmNow, the agent would like to supply negative labor (if it were allowed). The (EndOfPrdvP,TranShkNow) to (cNrmNow,LbrNow) function will be allowed to return LbrNow < 0, but this will be constrained to LbrNow = 0 during solution when calculating bNrmNow = aNrmNow - WageRteTranShkNowLbrNow + cNrmNow. Interestingly, I think the correct approach is to store negative labor values in the interpolated policy function, but set them to zero when the function is called. That will result in the LbrNow=0 seam being identified correctly, rather than subject to quirks of gridpoint placement.

I actually have no problem with this model saying that very wealthy people should not / will not work. I mean, that's true. If you have $1M in the bank and have the capability to earn $5/hour, you shouldn't work at all: your wealth-to-productivity ratio is extremely high. This model can be normalized by permanent income (productivity in this case), so it does not predict that high income people should work less.

@mnwhite
Copy link
Contributor Author

mnwhite commented May 19, 2017

Ugh, a set of asterisks for multiplication because italicizations up there (around TranShkNow).

@mnwhite
Copy link
Contributor Author

mnwhite commented May 19, 2017

Addendum: When the (EndOfPrdvP,TranShkNow) to (cNrmNow,LbrNow) function returns LbrNow < 0, cNrmNow needs to be recalculated as cNrmNow = EndOfPrdvP**(-1./CRRA) before calculating the endogenous bNrmNow gridpoint.

@mnwhite
Copy link
Contributor Author

mnwhite commented Nov 2, 2017

The grad student (Tiphanie Magne) has now more or less completed the solver for this model. The module lacks simulation methods and needs to be tested at other parameter sets (and lifecycle testing), but it ostensibly works. For simplicity, I had her assume that there is always a positive probability of TranShk=0, so that the lower boundary of admissible states is easy to calculate.

I'll introduce Tiphanie to GitHub and try to get this into a PR soon-ish. One holdup is that I had her use file versions from the ConsAggMarkov branch, as they have functionality she required. Until that branch gets merged to master, this model can't / shouldn't be merged.

@mnwhite mnwhite added Status: In Progress In Progress and NOT-OK to be merged. Tag: New Model labels Nov 2, 2017
@mnwhite
Copy link
Contributor Author

mnwhite commented Sep 5, 2019

After sitting in my private fork of HARK for nearly two years, I finally put this model into public HARK, in the LaborIntMarg branch. The solver works correctly, and the comments for it have been cleaned up. I'm partway through cleaning other docstrings and comments. A couple tiny remaining items that anyone could do:

  1. Move the relevant example parameter dictionary from the temporary ConsumerParametersTM.py into the main ConsumerParameters.py, clean up comments and formatting, and delete the former file.

  2. Add a lifecycle example to the main block.

For the somewhat more ambitious, I think the model is still missing its simulation methods. I'm pretty sure the only ones that need to be written (and not just inherited) are getControls and getPostStates. The inherited IndShockConsumerType.getStates will do some wrong (but harmless) stuff, like calculate mNrmNow = bNrmNow + TranShkNow; that should be fixed in getPostStates as mNrmNow = bNrmNow + LbrNow*TranShkNow.

@llorracc
Copy link
Collaborator

llorracc commented Sep 5, 2019 via email

@mnwhite
Copy link
Contributor Author

mnwhite commented Sep 5, 2019 via email

JackShiqiLi added a commit to JackShiqiLi/HARK that referenced this issue Sep 16, 2019
Finished moving example parameters from ConsumerParametersTM.py into ConsumerParameters.py, and deleting ConsumerParametersTM.py.
Finished adding lifecycle example into main block (Just took the lifecycle example from ConsIndShockModel, as what I have interpreted).
Some attempts on fixing the simulation for the labor model, it works as it does simulate some results, but I do not know how to test whether it is correct or not.
@MridulS MridulS closed this as completed Aug 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: In Progress In Progress and NOT-OK to be merged. Tag: New Model
Projects
None yet
Development

No branches or pull requests

4 participants