# TractableBufferStockModel¶

Defines and solves the Tractable Buffer Stock model described in lecture notes for “A Tractable Model of Buffer Stock Saving” (henceforth, TBS) available at https://www.econ2.jhu.edu/people/ccarroll/public/lecturenotes/consumption/TractableBufferStock The model concerns an agent with constant relative risk aversion utility making decisions over consumption and saving. He is subject to only a very particular sort of risk: the possibility that he will become permanently unemployed until the day he dies; barring this, his income is certain and grows at a constant rate.

The model has an infinite horizon, but is not solved by backward iteration in a traditional sense. Because of the very specific assumptions about risk, it is possible to find the agent’s steady state or target level of market resources when employed, as well as information about the optimal consumption rule at this target level. The full consumption function can then be constructed by “back- shooting”, inverting the Euler equation to find what consumption must have been in the previous period. The consumption function is thus constructed by repeat- edly adding “stable arm” points to either end of a growing list until specified bounds are exceeded.

Despite the non-standard solution method, the iterative process can be embedded in the HARK framework, as shown below.

class HARK.ConsumptionSaving.TractableBufferStockModel.TractableConsumerSolution(mNrm_list=None, cNrm_list=None, MPC_list=None, cFunc_U=<class 'HARK.utilities.NullFunc'>, cFunc=<class 'HARK.utilities.NullFunc'>)

A class representing the solution to a tractable buffer saving problem. Attributes include a list of money points mNrm_list, a list of consumption points cNrm_list, a list of MPCs MPC_list, a perfect foresight consumption function while employed, and a perfect foresight consumption function while unemployed. The solution includes a consumption function constructed from the lists.

Parameters: mNrm_list ([float]) – List of normalized market resources points on the stable arm. cNrm_list ([float]) – List of normalized consumption points on the stable arm. MPC_list ([float]) – List of marginal propensities to consume on the stable arm, corres- ponding to the (mNrm,cNrm) points. cFunc_U (function) – The (linear) consumption function when permanently unemployed. cFunc (function) – The consumption function when employed.
class HARK.ConsumptionSaving.TractableBufferStockModel.TractableConsumerType(cycles=0, **kwds)
Parameters: cycles (int) – Number of times the sequence of periods should be solved.
get_controls()

Calculate consumption for each agent this period.

Parameters: None – None
get_poststates()

Calculates end-of-period assets for each consumer of this type.

Parameters: None – None
get_shocks()

Determine which agents switch from employment to unemployment. All unemployed agents remain unemployed until death.

Parameters: None – None
post_solve()

This method adds consumption at m=0 to the list of stable arm points, then constructs the consumption function as a cubic interpolation over those points. Should be run after the backshooting routine is complete.

Parameters: none – none
pre_solve()

Calculates all of the solution objects that can be obtained before con- ducting the backshooting routine, including the target levels, the per- fect foresight solution, (marginal) consumption at m=0, and the small perturbations around the steady state.

Parameters: none – none
sim_birth(which_agents)

Makes new consumers for the given indices. Initialized variables include aNrm, as well as time variables t_age and t_cycle. Normalized assets are drawn from a lognormal distributions given by aLvlInitMean and aLvlInitStd.

Parameters: which_agents (np.array(Bool)) – Boolean array of size self.AgentCount indicating which agents should be “born”. None
sim_death()

Trivial function that returns boolean array of all False, as there is no death.

Parameters: None – which_agents – Boolean array of size AgentCount indicating which agents die. np.array(bool)
state_vars = ['bLvl', 'mLvl', 'aLvl']
transition()

Calculate market resources for all agents this period.

Parameters: None – None