From 1ac71362a66d563ce1267a358569817fb9e52ab3 Mon Sep 17 00:00:00 2001 From: sb Date: Tue, 26 Jan 2021 19:58:58 -0500 Subject: [PATCH 1/4] Removing 'Now' from model variables in ConsIndShock #920 --- HARK/ConsumptionSaving/ConsIndShockModel.py | 42 +++++++++---------- .../tests/test_IndShockConsumerType.py | 12 +++--- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/HARK/ConsumptionSaving/ConsIndShockModel.py b/HARK/ConsumptionSaving/ConsIndShockModel.py index c3545212b..a69abce5e 100644 --- a/HARK/ConsumptionSaving/ConsIndShockModel.py +++ b/HARK/ConsumptionSaving/ConsIndShockModel.py @@ -1392,7 +1392,7 @@ class PerfForesightConsumerType(AgentType): ) time_vary_ = ["LivPrb", "PermGroFac"] time_inv_ = ["CRRA", "Rfree", "DiscFac", "MaxKinks", "BoroCnstArt"] - state_vars = ['pLvlNow', 'PlvlAggNow', 'bNrmNow', 'mNrmNow', "aNrmNow"] + state_vars = ['pLvl', 'PlvlAgg', 'bNrm', 'mNrm', "aNrm"] shock_vars_ = [] def __init__(self, cycles=1, verbose=1, quiet=False, **kwds): @@ -1487,7 +1487,7 @@ def unpackcFunc(self): def initializeSim(self): self.PermShkAggNow = self.PermGroFacAgg # This never changes during simulation - self.state_now['PlvlAggNow'] = 1.0 + self.state_now['PlvlAgg'] = 1.0 AgentType.initializeSim(self) def simBirth(self, which_agents): @@ -1507,16 +1507,16 @@ def simBirth(self, which_agents): """ # Get and store states for newly born agents N = np.sum(which_agents) # Number of new consumers to make - self.state_now["aNrmNow"][which_agents] = Lognormal( + self.state_now['aNrm'][which_agents] = Lognormal( mu=self.aNrmInitMean, sigma=self.aNrmInitStd, seed=self.RNG.randint(0, 2 ** 31 - 1), ).draw(N) # why is a now variable set here? Because it's an aggregate. pLvlInitMeanNow = self.pLvlInitMean + np.log( - self.state_now["PlvlAggNow"] + self.state_now['PlvlAgg'] ) # Account for newer cohorts having higher permanent income - self.state_now["pLvlNow"][which_agents] = Lognormal( + self.state_now['pLvl'][which_agents] = Lognormal( pLvlInitMeanNow, self.pLvlInitStd, seed=self.RNG.randint(0, 2 ** 31 - 1) @@ -1570,10 +1570,10 @@ def getShocks(self): None """ PermGroFac = np.array(self.PermGroFac) - self.shocks["PermShkNow"] = PermGroFac[ + self.shocks['PermShk'] = PermGroFac[ self.t_cycle - 1 ] # cycle time has already been advanced - self.shocks["TranShkNow"] = np.ones(self.AgentCount) + self.shocks['TranShk'] = np.ones(self.AgentCount) def getRfree(self): """ @@ -1592,16 +1592,16 @@ def getRfree(self): return RfreeNow def transition(self): - pLvlPrev = self.state_prev['pLvlNow'] - aNrmPrev = self.state_prev['aNrmNow'] + pLvlPrev = self.state_prev['pLvl'] + aNrmPrev = self.state_prev['aNrm'] RfreeNow = self.getRfree() # Calculate new states: normalized market resources and permanent income level - pLvlNow = pLvlPrev*self.shocks['PermShkNow'] # Updated permanent income level - PlvlAggNow = self.state_prev['PlvlAggNow']*self.PermShkAggNow # Updated aggregate permanent productivity level - ReffNow = RfreeNow/self.shocks['PermShkNow'] # "Effective" interest factor on normalized assets + pLvlNow = pLvlPrev*self.shocks['PermShk'] # Updated permanent income level + PlvlAggNow = self.state_prev['PlvlAgg']*self.PermShkAggNow # Updated aggregate permanent productivity level + ReffNow = RfreeNow/self.shocks['PermShk'] # "Effective" interest factor on normalized assets bNrmNow = ReffNow*aNrmPrev # Bank balances before labor income - mNrmNow = bNrmNow + self.shocks['TranShkNow'] # Market resources after income + mNrmNow = bNrmNow + self.shocks['TranShk'] # Market resources after income return pLvlNow, PlvlAggNow, bNrmNow, mNrmNow, None @@ -1623,9 +1623,9 @@ def getControls(self): for t in range(self.T_cycle): these = t == self.t_cycle cNrmNow[these], MPCnow[these] = self.solution[t].cFunc.eval_with_derivative( - self.state_now['mNrmNow'][these] + self.state_now['mNrm'][these] ) - self.controls['cNrmNow'] = cNrmNow + self.controls['cNrm'] = cNrmNow # MPCnow is not really a control self.MPCnow = MPCnow @@ -1644,9 +1644,9 @@ def getPostStates(self): None """ # should this be "Now", or "Prev"?!? - self.state_now['aNrmNow'] = self.state_now['mNrmNow'] - self.controls['cNrmNow'] + self.state_now['aNrm'] = self.state_now['mNrm'] - self.controls['cNrm'] # Useful in some cases to precalculate asset level - self.state_now['aLvlNow'] = self.state_now['aNrmNow'] * self.state_now['pLvlNow'] + self.state_now['aLvl'] = self.state_now['aNrm'] * self.state_now['pLvl'] # moves now to prev super().getPostStates() @@ -1865,7 +1865,7 @@ class IndShockConsumerType(PerfForesightConsumerType): time_inv_.remove( "MaxKinks" ) # This is in the PerfForesight model but not ConsIndShock - shock_vars_ = ["PermShkNow", "TranShkNow"] + shock_vars_ = ['PermShk', 'TranShk'] def __init__(self, cycles=1, verbose=1, quiet=False, **kwds): params = init_idiosyncratic_shocks.copy() @@ -2014,8 +2014,8 @@ def getShocks(self): # Store the shocks in self self.EmpNow = np.ones(self.AgentCount, dtype=bool) self.EmpNow[TranShkNow == self.IncUnemp] = False - self.shocks["PermShkNow"] = PermShkNow - self.shocks["TranShkNow"] = TranShkNow + self.shocks['PermShk'] = PermShkNow + self.shocks['TranShk'] = TranShkNow def calcBoundingValues(self): """ @@ -2701,7 +2701,7 @@ def getRfree(self): Array of size self.AgentCount with risk free interest rate for each agent. """ RfreeNow = self.Rboro * np.ones(self.AgentCount) - RfreeNow[self.state_prev['aNrmNow'] > 0] = self.Rsave + RfreeNow[self.state_prev['aNrm'] > 0] = self.Rsave return RfreeNow def checkConditions(self): diff --git a/HARK/ConsumptionSaving/tests/test_IndShockConsumerType.py b/HARK/ConsumptionSaving/tests/test_IndShockConsumerType.py index f920e2f07..07c51efbe 100644 --- a/HARK/ConsumptionSaving/tests/test_IndShockConsumerType.py +++ b/HARK/ConsumptionSaving/tests/test_IndShockConsumerType.py @@ -23,9 +23,9 @@ def test_getShocks(self): self.agent.getShocks() - self.assertEqual(self.agent.shocks["PermShkNow"][0], 1.0427376294215103) - self.assertEqual(self.agent.shocks["PermShkNow"][1], 0.9278094171517413) - self.assertEqual(self.agent.shocks["TranShkNow"][0], 0.881761797501595) + self.assertEqual(self.agent.shocks['PermShk'][0], 1.0427376294215103) + self.assertEqual(self.agent.shocks['PermShk'][1], 0.9278094171517413) + self.assertEqual(self.agent.shocks['TranShk'][0], 0.881761797501595) def test_ConsIndShockSolverBasic(self): LifecycleExample = IndShockConsumerType(**init_lifecycle) @@ -89,7 +89,7 @@ def test_simulated_values(self): self.assertAlmostEqual(self.agent.MPCnow[1], 0.5711503906043797) - self.assertAlmostEqual(self.agent.state_now['aLvlNow'][1], 0.18438326264597635) + self.assertAlmostEqual(self.agent.state_now['aLvl'][1], 0.18438326264597635) class testBufferStock(unittest.TestCase): @@ -237,12 +237,12 @@ def test_infinite_horizon(self): IndShockExample.solution[0].cFunc.functions[0].x_list[0], -0.25017509 ) - IndShockExample.track_vars = ["aNrmNow", "mNrmNow", "cNrmNow", "pLvlNow"] + IndShockExample.track_vars = ['aNrm', "mNrm", "cNrm", 'pLvl'] IndShockExample.initializeSim() IndShockExample.simulate() self.assertAlmostEqual( - IndShockExample.history["mNrmNow"][0][0], 1.0170176090252379 + IndShockExample.history["mNrm"][0][0], 1.0170176090252379 ) From 8afd32f5d0919932006d8309c074c868f764daeb Mon Sep 17 00:00:00 2001 From: sb Date: Wed, 27 Jan 2021 13:41:32 -0500 Subject: [PATCH 2/4] removing "Now" from model variable names, see #920 --- .../ConsGenIncProcessModel.py | 30 +++++----- HARK/ConsumptionSaving/ConsLaborModel.py | 20 +++---- HARK/ConsumptionSaving/ConsMarkovModel.py | 36 ++++++------ HARK/ConsumptionSaving/ConsMedModel.py | 20 +++---- HARK/ConsumptionSaving/ConsPortfolioModel.py | 34 +++++------ HARK/ConsumptionSaving/ConsPrefShockModel.py | 8 +-- HARK/ConsumptionSaving/ConsRepAgentModel.py | 37 ++++++------ .../TractableBufferStockModel.py | 14 ++--- .../tests/test_ConsAggShockModel.py | 2 +- .../tests/test_ConsGenIncProcessModel.py | 4 +- .../tests/test_ConsLaborModel.py | 2 +- .../tests/test_ConsMarkovModel.py | 2 +- .../tests/test_ConsMedModel.py | 2 +- .../tests/test_ConsPortfolioModel.py | 56 +++++++++---------- .../tests/test_ConsPrefShockModel.py | 14 ++--- .../tests/test_ConsRepAgentModel.py | 4 +- .../tests/test_IndShockConsumerTypeFast.py | 12 ++-- .../tests/test_PerfForesightConsumerType.py | 12 ++-- .../tests/test_TractableBufferStockModel.py | 4 +- 19 files changed, 159 insertions(+), 154 deletions(-) diff --git a/HARK/ConsumptionSaving/ConsGenIncProcessModel.py b/HARK/ConsumptionSaving/ConsGenIncProcessModel.py index b41396367..7a958ce06 100644 --- a/HARK/ConsumptionSaving/ConsGenIncProcessModel.py +++ b/HARK/ConsumptionSaving/ConsGenIncProcessModel.py @@ -904,7 +904,7 @@ class GenIncProcessConsumerType(IndShockConsumerType): cFunc=cFunc_terminal_, mNrmMin=0.0, hNrm=0.0, MPCmin=1.0, MPCmax=1.0 ) - state_vars = ["pLvlNow","mLvlNow","aLvlNow"] + state_vars = ['pLvl',"mLvl",'aLvl'] def __init__(self, cycles=0, **kwds): params = init_explicit_perm_inc.copy() @@ -915,12 +915,12 @@ def __init__(self, cycles=0, **kwds): self.solveOnePeriod = makeOnePeriodOOSolver(ConsGenIncProcessSolver) # a poststate? - self.state_now["aLvlNow"] = None - self.state_prev["aLvlNow"] = None + self.state_now['aLvl'] = None + self.state_prev['aLvl'] = None # better way to do this... - self.state_now["mLvlNow"] = None - self.state_prev["mLvlNow"] = None + self.state_now["mLvl"] = None + self.state_prev["mLvl"] = None def preSolve(self): # AgentType.preSolve() @@ -1100,10 +1100,10 @@ def simBirth(self, which_agents): aNrmNow_new = Lognormal( self.aNrmInitMean, self.aNrmInitStd, seed=self.RNG.randint(0, 2 ** 31 - 1) ).draw(N) - self.state_now['pLvlNow'][which_agents] = Lognormal( + self.state_now['pLvl'][which_agents] = Lognormal( self.pLvlInitMean, self.pLvlInitStd, seed=self.RNG.randint(0, 2 ** 31 - 1) ).draw(N) - self.state_now['aLvlNow'][which_agents] = aNrmNow_new * self.state_now['pLvlNow'][which_agents] + self.state_now['aLvl'][which_agents] = aNrmNow_new * self.state_now['pLvl'][which_agents] self.t_age[which_agents] = 0 # How many periods since each agent was born self.t_cycle[ which_agents @@ -1124,7 +1124,7 @@ def transition(self): pLvlNow mLvlNow """ - aLvlPrev = self.state_prev['aLvlNow'] + aLvlPrev = self.state_prev['aLvl'] RfreeNow = self.getRfree() # Calculate new states: normalized market resources @@ -1134,8 +1134,8 @@ def transition(self): for t in range(self.T_cycle): these = t == self.t_cycle pLvlNow[these] = ( - self.pLvlNextFunc[t - 1](self.state_prev['pLvlNow'][these]) - * self.shocks["PermShkNow"][these] + self.pLvlNextFunc[t - 1](self.state_prev['pLvl'][these]) + * self.shocks['PermShk'][these] ) #state value @@ -1143,7 +1143,7 @@ def transition(self): # Market resources after income - state value mLvlNow = bLvlNow + \ - self.shocks["TranShkNow"] * \ + self.shocks['TranShk'] * \ pLvlNow return (pLvlNow, @@ -1168,12 +1168,12 @@ def getControls(self): for t in range(self.T_cycle): these = t == self.t_cycle cLvlNow[these] = self.solution[t].cFunc( - self.state_now["mLvlNow"][these], self.state_now["pLvlNow"][these] + self.state_now["mLvl"][these], self.state_now['pLvl'][these] ) MPCnow[these] = self.solution[t].cFunc.derivativeX( - self.state_now["mLvlNow"][these], self.state_now["pLvlNow"][these] + self.state_now["mLvl"][these], self.state_now['pLvl'][these] ) - self.controls["cLvlNow"] = cLvlNow + self.controls["cLvl"] = cLvlNow self.MPCnow = MPCnow def getPostStates(self): @@ -1189,7 +1189,7 @@ def getPostStates(self): ------- None """ - self.state_now['aLvlNow'] = self.state_now["mLvlNow"] - self.controls["cLvlNow"] + self.state_now['aLvl'] = self.state_now["mLvl"] - self.controls["cLvl"] # moves now to prev AgentType.getPostStates(self) diff --git a/HARK/ConsumptionSaving/ConsLaborModel.py b/HARK/ConsumptionSaving/ConsLaborModel.py index 3da55097e..f239e398c 100644 --- a/HARK/ConsumptionSaving/ConsLaborModel.py +++ b/HARK/ConsumptionSaving/ConsLaborModel.py @@ -479,7 +479,7 @@ def getStates(self): None """ IndShockConsumerType.getStates(self) - self.state_now['mNrmNow'][:] = np.nan # Delete market resource calculation + self.state_now['mNrm'][:] = np.nan # Delete market resource calculation def getControls(self): """ @@ -500,15 +500,15 @@ def getControls(self): for t in range(self.T_cycle): these = t == self.t_cycle cNrmNow[these] = self.solution[t].cFunc( - self.state_now['bNrmNow'][these], self.shocks["TranShkNow"][these] + self.state_now['bNrm'][these], self.shocks['TranShk'][these] ) # Assign consumption values MPCnow[these] = self.solution[t].cFunc.derivativeX( - self.state_now['bNrmNow'][these], self.shocks["TranShkNow"][these] + self.state_now['bNrm'][these], self.shocks['TranShk'][these] ) # Assign marginal propensity to consume values (derivative) LbrNow[these] = self.solution[t].LbrFunc( - self.state_now['bNrmNow'][these], self.shocks["TranShkNow"][these] + self.state_now['bNrm'][these], self.shocks['TranShk'][these] ) # Assign labor supply - self.controls['cNrmNow'] = cNrmNow + self.controls['cNrm'] = cNrmNow self.MPCnow = MPCnow self.controls['LbrNow'] = LbrNow @@ -529,12 +529,12 @@ def getPostStates(self): for t in range(self.T_cycle): these = t == self.t_cycle mNrmNow[these] = ( - self.state_now['bNrmNow'][these] - + self.controls['LbrNow'][these] * self.shocks["TranShkNow"][these] + self.state_now['bNrm'][these] + + self.controls['LbrNow'][these] * self.shocks['TranShk'][these] ) # mNrm = bNrm + yNrm - aNrmNow[these] = mNrmNow[these] - self.controls['cNrmNow'][these] # aNrm = mNrm - cNrm - self.state_now['mNrmNow'] = mNrmNow - self.state_now['aNrmNow'] = aNrmNow + aNrmNow[these] = mNrmNow[these] - self.controls['cNrm'][these] # aNrm = mNrm - cNrm + self.state_now['mNrm'] = mNrmNow + self.state_now['aNrm'] = aNrmNow # moves now to prev super().getPostStates() diff --git a/HARK/ConsumptionSaving/ConsMarkovModel.py b/HARK/ConsumptionSaving/ConsMarkovModel.py index 1b02d59fd..4408df460 100644 --- a/HARK/ConsumptionSaving/ConsMarkovModel.py +++ b/HARK/ConsumptionSaving/ConsMarkovModel.py @@ -844,9 +844,9 @@ class MarkovConsumerType(IndShockConsumerType): time_vary_ = IndShockConsumerType.time_vary_ + ["MrkvArray"] - # Is 'MrkvNow' a shock or a state? - shock_vars_ = IndShockConsumerType.shock_vars_ + ["MrkvNow"] - state_vars = IndShockConsumerType.state_vars + ["MrkvNow"] + # Is "Mrkv" a shock or a state? + shock_vars_ = IndShockConsumerType.shock_vars_ + ["Mrkv"] + state_vars = IndShockConsumerType.state_vars + ["Mrkv"] def __init__(self, cycles=1, **kwds): IndShockConsumerType.__init__(self, cycles=1, **kwds) @@ -954,17 +954,17 @@ def updateSolutionTerminal(self): self.solution_terminal.MPCmin = np.ones(StateCount) def initializeSim(self): - self.shocks["MrkvNow"] = np.zeros(self.AgentCount, dtype=int) + self.shocks["Mrkv"] = np.zeros(self.AgentCount, dtype=int) IndShockConsumerType.initializeSim(self) if ( self.global_markov ): # Need to initialize markov state to be the same for all agents base_draw = Uniform(seed=self.RNG.randint(0, 2 ** 31 - 1)).draw(1) Cutoffs = np.cumsum(np.array(self.MrkvPrbsInit)) - self.shocks["MrkvNow"] = np.ones(self.AgentCount) * np.searchsorted( + self.shocks["Mrkv"] = np.ones(self.AgentCount) * np.searchsorted( Cutoffs, base_draw ).astype(int) - self.shocks["MrkvNow"] = self.shocks["MrkvNow"].astype(int) + self.shocks["Mrkv"] = self.shocks["Mrkv"].astype(int) def resetRNG(self): """ @@ -1005,7 +1005,7 @@ def simDeath(self): """ # Determine who dies LivPrb = np.array(self.LivPrb)[ - self.t_cycle - 1, self.shocks["MrkvNow"] + self.t_cycle - 1, self.shocks["Mrkv"] ] # Time has already advanced, so look back one DiePrb = 1.0 - LivPrb DeathShks = Uniform(seed=self.RNG.randint(0, 2 ** 31 - 1)).draw( @@ -1040,7 +1040,7 @@ def simBirth(self, which_agents): N = np.sum(which_agents) base_draws = Uniform(seed=self.RNG.randint(0, 2 ** 31 - 1)).draw(N) Cutoffs = np.cumsum(np.array(self.MrkvPrbsInit)) - self.shocks["MrkvNow"][which_agents] = np.searchsorted( + self.shocks["Mrkv"][which_agents] = np.searchsorted( Cutoffs, base_draws ).astype(int) @@ -1065,7 +1065,7 @@ def getMarkovStates(self): # Determine which agents are in which states right now J = self.MrkvArray[0].shape[0] - MrkvPrev = self.shocks["MrkvNow"] + MrkvPrev = self.shocks["Mrkv"] MrkvNow = np.zeros(self.AgentCount, dtype=int) # Draw new Markov states for each agent @@ -1079,7 +1079,7 @@ def getMarkovStates(self): if not self.global_markov: MrkvNow[dont_change] = MrkvPrev[dont_change] - self.shocks["MrkvNow"] = MrkvNow.astype(int) + self.shocks["Mrkv"] = MrkvNow.astype(int) def getShocks(self): """ @@ -1095,7 +1095,7 @@ def getShocks(self): None """ self.getMarkovStates() - MrkvNow = self.shocks["MrkvNow"] + MrkvNow = self.shocks['Mrkv'] # Now get income shocks for each consumer, by cycle-time and discrete state PermShkNow = np.zeros(self.AgentCount) # Initialize shock arrays @@ -1121,8 +1121,8 @@ def getShocks(self): newborn = self.t_age == 0 PermShkNow[newborn] = 1.0 TranShkNow[newborn] = 1.0 - self.shocks["PermShkNow"] = PermShkNow - self.shocks["TranShkNow"] = TranShkNow + self.shocks['PermShk'] = PermShkNow + self.shocks['TranShk'] = TranShkNow def readShocks(self): """ @@ -1137,7 +1137,7 @@ def readShocks(self): None """ IndShockConsumerType.readShocks(self) - self.shocks["MrkvNow"] = self.shocks["MrkvNow"].astype(int) + self.shocks['Mrkv'] = self.shocks['Mrkv'].astype(int) def getRfree(self): """ @@ -1152,7 +1152,7 @@ def getRfree(self): RfreeNow : np.array Array of size self.AgentCount with risk free interest rate for each agent. """ - RfreeNow = self.Rfree[self.shocks["MrkvNow"]] + RfreeNow = self.Rfree[self.shocks['Mrkv']] return RfreeNow def getControls(self): @@ -1173,16 +1173,16 @@ def getControls(self): MrkvBoolArray = np.zeros((J, self.AgentCount), dtype=bool) for j in range(J): - MrkvBoolArray[j, :] = j == self.shocks["MrkvNow"] + MrkvBoolArray[j, :] = j == self.shocks['Mrkv'] for t in range(self.T_cycle): right_t = t == self.t_cycle for j in range(J): these = np.logical_and(right_t, MrkvBoolArray[j, :]) cNrmNow[these], MPCnow[these] = ( - self.solution[t].cFunc[j].eval_with_derivative(self.state_now['mNrmNow'][these]) + self.solution[t].cFunc[j].eval_with_derivative(self.state_now['mNrm'][these]) ) - self.controls["cNrmNow"] = cNrmNow + self.controls['cNrm'] = cNrmNow self.MPCnow = MPCnow def calcBoundingValues(self): diff --git a/HARK/ConsumptionSaving/ConsMedModel.py b/HARK/ConsumptionSaving/ConsMedModel.py index 7fd78995f..c940c0652 100644 --- a/HARK/ConsumptionSaving/ConsMedModel.py +++ b/HARK/ConsumptionSaving/ConsMedModel.py @@ -572,8 +572,8 @@ class MedShockConsumerType(PersistentShockConsumerType): Number of times the sequence of periods should be solved. """ - shock_vars_ = PersistentShockConsumerType.shock_vars_ + ["MedShkNow"] - state_vars = PersistentShockConsumerType.state_vars + ['mLvlNow'] + shock_vars_ = PersistentShockConsumerType.shock_vars_ + ["MedShk"] + state_vars = PersistentShockConsumerType.state_vars + ['mLvl'] def __init__(self, cycles=0, **kwds): params = init_medical_shocks.copy() @@ -823,8 +823,8 @@ def getShocks(self): if N > 0: MedShkNow[these] = self.MedShkDstn[t].draw(N) MedPriceNow[these] = self.MedPrice[t] - self.shocks["MedShkNow"] = MedShkNow - self.shocks["MedPriceNow"] = MedPriceNow + self.shocks["MedShk"] = MedShkNow + self.shocks["MedPrice"] = MedPriceNow def getControls(self): """ @@ -844,12 +844,12 @@ def getControls(self): for t in range(self.T_cycle): these = t == self.t_cycle cLvlNow[these], MedNow[these] = self.solution[t].policyFunc( - self.state_now['mLvlNow'][these], - self.state_now['pLvlNow'][these], - self.shocks["MedShkNow"][these], + self.state_now['mLvl'][these], + self.state_now['pLvl'][these], + self.shocks["MedShk"][these], ) - self.controls['cLvlNow'] = cLvlNow - self.controls['MedNow'] = MedNow + self.controls['cLvl'] = cLvlNow + self.controls['Med'] = MedNow return None def getPostStates(self): @@ -864,7 +864,7 @@ def getPostStates(self): ------- None """ - self.state_now['aLvlNow'] = self.state_now['mLvlNow'] - self.controls['cLvlNow'] - self.shocks["MedPriceNow"] * self.controls['MedNow'] + self.state_now['aLvl'] = self.state_now['mLvl'] - self.controls['cLvl'] - self.shocks["MedPrice"] * self.controls['Med'] # moves now to prev AgentType.getPostStates(self) diff --git a/HARK/ConsumptionSaving/ConsPortfolioModel.py b/HARK/ConsumptionSaving/ConsPortfolioModel.py index 1dfec5e8b..f2f2b75b6 100644 --- a/HARK/ConsumptionSaving/ConsPortfolioModel.py +++ b/HARK/ConsumptionSaving/ConsPortfolioModel.py @@ -143,7 +143,7 @@ def __init__(self, cycles=1, verbose=False, quiet=False, **kwds): self, cycles=cycles, verbose=verbose, quiet=quiet, **kwds ) - shock_vars = ["PermShkNow", "TranShkNow","AdjustNow","RiskyNow"] + shock_vars = ['PermShk', 'TranShk','Adjust','Risky'] # Set the solver for the portfolio model, and update various constructed attributes self.solveOnePeriod = solveConsPortfolio @@ -362,7 +362,7 @@ def getRisky(self): mu = np.log(RiskyAvg / (np.sqrt(1.0 + RiskyVar / RiskyAvgSqrd))) sigma = np.sqrt(np.log(1.0 + RiskyVar / RiskyAvgSqrd)) - self.shocks['RiskyNow'] = Lognormal( + self.shocks['Risky'] = Lognormal( mu, sigma, seed=self.RNG.randint(0, 2 ** 31 - 1) ).draw(1) @@ -380,7 +380,7 @@ def getAdjust(self): ------- None """ - self.shocks['AdjustNow'] = Bernoulli( + self.shocks['Adjust'] = Bernoulli( self.AdjustPrb, seed=self.RNG.randint(0, 2 ** 31 - 1) ).draw(self.AgentCount) @@ -402,8 +402,8 @@ def getRfree(self): return factor. Will be used by getStates() to calculate mNrmNow, where it will be mislabeled as "Rfree". """ - Rport = self.controls["ShareNow"] * self.shocks['RiskyNow'] + (1.0 - self.controls["ShareNow"]) * self.Rfree - self.RportNow = Rport + Rport = self.controls["Share"] * self.shocks['Risky'] + (1.0 - self.controls["Share"]) * self.Rfree + self.Rport = Rport return Rport def initializeSim(self): @@ -421,8 +421,8 @@ def initializeSim(self): """ # these need to be set because "post states", # but are a control variable and shock, respectively - self.controls["ShareNow"] = np.zeros(self.AgentCount) - self.shocks['AdjustNow'] = np.zeros(self.AgentCount, dtype=bool) + self.controls["Share"] = np.zeros(self.AgentCount) + self.shocks['Adjust'] = np.zeros(self.AgentCount, dtype=bool) IndShockConsumerType.initializeSim(self) def simBirth(self, which_agents): @@ -441,9 +441,9 @@ def simBirth(self, which_agents): """ IndShockConsumerType.simBirth(self, which_agents) - self.controls['ShareNow'][which_agents] = 0 + self.controls["Share"][which_agents] = 0 # here a shock is being used as a 'post state' - self.shocks['AdjustNow'][which_agents] = False + self.shocks['Adjust'][which_agents] = False def getShocks(self): """ @@ -484,24 +484,24 @@ def getControls(self): these = t == self.t_cycle # Get controls for agents who *can* adjust their portfolio share - those = np.logical_and(these, self.shocks['AdjustNow']) - cNrmNow[those] = self.solution[t].cFuncAdj(self.state_now['mNrmNow'][those]) - ShareNow[those] = self.solution[t].ShareFuncAdj(self.state_now['mNrmNow'][those]) + those = np.logical_and(these, self.shocks['Adjust']) + cNrmNow[those] = self.solution[t].cFuncAdj(self.state_now['mNrm'][those]) + ShareNow[those] = self.solution[t].ShareFuncAdj(self.state_now['mNrm'][those]) # Get Controls for agents who *can't* adjust their portfolio share those = np.logical_and( these, - np.logical_not(self.shocks['AdjustNow'])) + np.logical_not(self.shocks['Adjust'])) cNrmNow[those] = self.solution[t].cFuncFxd( - self.state_now['mNrmNow'][those], ShareNow[those] + self.state_now['mNrm'][those], ShareNow[those] ) ShareNow[those] = self.solution[t].ShareFuncFxd( - self.state_now['mNrmNow'][those], ShareNow[those] + self.state_now['mNrm'][those], ShareNow[those] ) # Store controls as attributes of self - self.controls["cNrmNow"] = cNrmNow - self.controls["ShareNow"] = ShareNow + self.controls['cNrm'] = cNrmNow + self.controls["Share"] = ShareNow # Define a non-object-oriented one period solver diff --git a/HARK/ConsumptionSaving/ConsPrefShockModel.py b/HARK/ConsumptionSaving/ConsPrefShockModel.py index f5ead3d10..24f4d1c3d 100644 --- a/HARK/ConsumptionSaving/ConsPrefShockModel.py +++ b/HARK/ConsumptionSaving/ConsPrefShockModel.py @@ -79,7 +79,7 @@ class PrefShockConsumerType(IndShockConsumerType): Number of times the sequence of periods should be solved. """ - shock_vars_ = IndShockConsumerType.shock_vars_ + ["PrefShkNow"] + shock_vars_ = IndShockConsumerType.shock_vars_ + ["PrefShk"] def __init__(self, cycles=1, **kwds): params = init_preference_shocks.copy() @@ -180,7 +180,7 @@ def getShocks(self): N = np.sum(these) if N > 0: PrefShkNow[these] = self.PrefShkDstn[t].draw(N) - self.shocks["PrefShkNow"] = PrefShkNow + self.shocks["PrefShk"] = PrefShkNow def getControls(self): """ @@ -198,9 +198,9 @@ def getControls(self): for t in range(self.T_cycle): these = t == self.t_cycle cNrmNow[these] = self.solution[t].cFunc( - self.state_now['mNrmNow'][these], self.shocks["PrefShkNow"][these] + self.state_now['mNrm'][these], self.shocks["PrefShk"][these] ) - self.controls['cNrmNow'] = cNrmNow + self.controls['cNrm'] = cNrmNow return None def calcBoundingValues(self): diff --git a/HARK/ConsumptionSaving/ConsRepAgentModel.py b/HARK/ConsumptionSaving/ConsRepAgentModel.py index 3fe35b884..06a64539e 100644 --- a/HARK/ConsumptionSaving/ConsRepAgentModel.py +++ b/HARK/ConsumptionSaving/ConsRepAgentModel.py @@ -266,30 +266,30 @@ def getStates(self): ------- None """ - pLvlPrev = self.state_prev['pLvlNow'] - aNrmPrev = self.state_prev['aNrmNow'] + pLvlPrev = self.state_prev['pLvl'] + aNrmPrev = self.state_prev['aNrm'] # Calculate new states: normalized market resources and permanent income level self.pLvlNow = ( - pLvlPrev * self.shocks["PermShkNow"] + pLvlPrev * self.shocks['PermShk'] ) # Same as in IndShockConsType - self.kNrmNow = aNrmPrev / self.shocks["PermShkNow"] - self.yNrmNow = self.kNrmNow ** self.CapShare * self.shocks["TranShkNow"] ** ( + self.kNrmNow = aNrmPrev / self.shocks['PermShk'] + self.yNrmNow = self.kNrmNow ** self.CapShare * self.shocks['TranShk'] ** ( 1.0 - self.CapShare ) self.Rfree = ( 1.0 + self.CapShare * self.kNrmNow ** (self.CapShare - 1.0) - * self.shocks["TranShkNow"] ** (1.0 - self.CapShare) + * self.shocks['TranShk'] ** (1.0 - self.CapShare) - self.DeprFac ) self.wRte = ( (1.0 - self.CapShare) * self.kNrmNow ** self.CapShare - * self.shocks["TranShkNow"] ** (-self.CapShare) + * self.shocks['TranShk'] ** (-self.CapShare) ) - self.mNrmNow = self.Rfree * self.kNrmNow + self.wRte * self.shocks["TranShkNow"] + self.mNrmNow = self.Rfree * self.kNrmNow + self.wRte * self.shocks['TranShk'] class RepAgentMarkovConsumerType(RepAgentConsumerType): @@ -313,6 +313,11 @@ def __init__(self, **kwds): def preSolve(self): self.updateSolutionTerminal() + def initializeSim(self): + #self.shocks["Mrkv"] = np.zeros(self.AgentCount, dtype=int) + RepAgentConsumerType.initializeSim(self) + self.shocks["Mrkv"] = self.Mrkv + def updateSolutionTerminal(self): """ Update the terminal period solution. This method should be run when a @@ -349,13 +354,13 @@ def getShocks(self): ------- None """ - self.MrkvNow = MarkovProcess( + self.shocks["Mrkv"] = MarkovProcess( self.MrkvArray, seed=self.RNG.randint(0, 2 ** 31 - 1) - ).draw(self.MrkvNow) + ).draw(self.shocks["Mrkv"]) t = self.t_cycle[0] - i = self.MrkvNow + i = self.shocks["Mrkv"] IncShkDstnNow = self.IncShkDstn[t - 1][i] # set current income distribution PermGroFacNow = self.PermGroFac[t - 1][i] # and permanent growth factor # Get random draws of income shocks from the discrete distribution @@ -364,8 +369,8 @@ def getShocks(self): IncShkDstnNow.X[0][EventDraw] * PermGroFacNow ) # permanent "shock" includes expected growth TranShkNow = IncShkDstnNow.X[1][EventDraw] - self.shocks["PermShkNow"] = np.array(PermShkNow) - self.shocks["TranShkNow"] = np.array(TranShkNow) + self.shocks['PermShk'] = np.array(PermShkNow) + self.shocks['TranShk'] = np.array(TranShkNow) def getControls(self): """ @@ -380,8 +385,8 @@ def getControls(self): None """ t = self.t_cycle[0] - i = self.MrkvNow - self.controls["cNrmNow"] = self.solution[t].cFunc[i](self.mNrmNow) + i = self.shocks["Mrkv"] + self.controls['cNrm'] = self.solution[t].cFunc[i](self.mNrmNow) # Define the default dictionary for a representative agent type @@ -395,4 +400,4 @@ def getControls(self): init_markov_rep_agent = init_rep_agent.copy() init_markov_rep_agent["PermGroFac"] = [[0.97, 1.03]] init_markov_rep_agent["MrkvArray"] = np.array([[0.99, 0.01], [0.01, 0.99]]) -init_markov_rep_agent["MrkvNow"] = 0 +init_markov_rep_agent["Mrkv"] = 0 diff --git a/HARK/ConsumptionSaving/TractableBufferStockModel.py b/HARK/ConsumptionSaving/TractableBufferStockModel.py index 812a69288..aa6fcdfe4 100644 --- a/HARK/ConsumptionSaving/TractableBufferStockModel.py +++ b/HARK/ConsumptionSaving/TractableBufferStockModel.py @@ -304,7 +304,7 @@ class TractableConsumerType(AgentType): Number of times the sequence of periods should be solved. """ - state_vars = ['bLvlNow', 'mLvlNow', "aLvlNow"] + state_vars = ['bLvl', 'mLvl', 'aLvl'] def __init__(self, cycles=0, **kwds): params = init_tractable.copy() @@ -327,7 +327,7 @@ def __init__(self, cycles=0, **kwds): "mUpperBnd", ] self.shock_vars = ["eStateNow"] - self.poststate_vars = ["aLvlNow", "eStateNow"] # For simulation + self.poststate_vars = ['aLvl', "eStateNow"] # For simulation self.solveOnePeriod = addToStableArmPoints # set correct solver def preSolve(self): @@ -584,7 +584,7 @@ def simBirth(self, which_agents): """ # Get and store states for newly born agents N = np.sum(which_agents) # Number of new consumers to make - self.state_now['aLvlNow'][which_agents] = Lognormal( + self.state_now['aLvl'][which_agents] = Lognormal( self.aLvlInitMean, sigma=self.aLvlInitStd, seed=self.RNG.randint(0, 2 ** 31 - 1), @@ -646,7 +646,7 @@ def transition(self): ------- None """ - bLvlNow = self.Rfree * self.state_prev['aLvlNow'] + bLvlNow = self.Rfree * self.state_prev['aLvl'] mLvlNow = bLvlNow + self.shocks["eStateNow"] return bLvlNow, mLvlNow @@ -666,8 +666,8 @@ def getControls(self): employed = self.shocks["eStateNow"] == 1.0 unemployed = np.logical_not(employed) cLvlNow = np.zeros(self.AgentCount) - cLvlNow[employed] = self.solution[0].cFunc(self.state_now['mLvlNow'][employed]) - cLvlNow[unemployed] = self.solution[0].cFunc_U(self.state_now['mLvlNow'][unemployed]) + cLvlNow[employed] = self.solution[0].cFunc(self.state_now['mLvl'][employed]) + cLvlNow[unemployed] = self.solution[0].cFunc_U(self.state_now['mLvl'][unemployed]) self.controls["cLvlNow"] = cLvlNow def getPostStates(self): @@ -682,7 +682,7 @@ def getPostStates(self): ------- None """ - self.state_now['aLvlNow'] = self.state_now['mLvlNow'] - self.controls["cLvlNow"] + self.state_now['aLvl'] = self.state_now['mLvl'] - self.controls["cLvlNow"] return None diff --git a/HARK/ConsumptionSaving/tests/test_ConsAggShockModel.py b/HARK/ConsumptionSaving/tests/test_ConsAggShockModel.py index a24bfa4fd..492f7babf 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsAggShockModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsAggShockModel.py @@ -263,6 +263,6 @@ def test_economy(self): self.assertAlmostEqual(self.economy.history["Aprev"][4], 11.009107526443584) - self.assertAlmostEqual(self.economy.history["MrkvNow"][40], 1) + self.assertAlmostEqual(self.economy.history['Mrkv'][40], 1) self.assertAlmostEqual(self.economy.history["Urate"][12], 0.040000000000000036) diff --git a/HARK/ConsumptionSaving/tests/test_ConsGenIncProcessModel.py b/HARK/ConsumptionSaving/tests/test_ConsGenIncProcessModel.py index 8067c4136..b4b77c473 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsGenIncProcessModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsGenIncProcessModel.py @@ -96,11 +96,11 @@ def test_simulation(self): # why does ,"bLvlNow" not work here? self.agent.track_vars = [ - "aLvlNow","mLvlNow", "cLvlNow", "pLvlNow" + 'aLvl',"mLvl", "cLvl", 'pLvl' ] self.agent.initializeSim() self.agent.simulate() self.assertAlmostEqual( - np.mean(self.agent.history["mLvlNow"]), 1.2043946738813716 + np.mean(self.agent.history["mLvl"]), 1.2043946738813716 ) diff --git a/HARK/ConsumptionSaving/tests/test_ConsLaborModel.py b/HARK/ConsumptionSaving/tests/test_ConsLaborModel.py index 2fa586c5a..3bba7dd1a 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsLaborModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsLaborModel.py @@ -16,6 +16,6 @@ def test_solution(self): self.model_finite_lifecycle.solve() self.model.T_sim = 120 - self.model.track_vars = ["bNrmNow", "cNrmNow"] + self.model.track_vars = ["bNrm", 'cNrm'] self.model.initializeSim() self.model.simulate() diff --git a/HARK/ConsumptionSaving/tests/test_ConsMarkovModel.py b/HARK/ConsumptionSaving/tests/test_ConsMarkovModel.py index 7e4af5c90..5e6f77a45 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsMarkovModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsMarkovModel.py @@ -107,7 +107,7 @@ def test_simulation(self): self.model.solve() self.model.T_sim = 120 self.model.MrkvPrbsInit = [0.25, 0.25, 0.25, 0.25] - self.model.track_vars = ["mNrmNow", "cNrmNow"] + self.model.track_vars = ["mNrm", 'cNrm'] self.model.makeShockHistory() # This is optional self.model.initializeSim() self.model.simulate() diff --git a/HARK/ConsumptionSaving/tests/test_ConsMedModel.py b/HARK/ConsumptionSaving/tests/test_ConsMedModel.py index 19bde0635..e5a785ebd 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsMedModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsMedModel.py @@ -14,7 +14,7 @@ def test_solution(self): self.agent.solve() self.agent.T_sim = 10 - self.agent.track_vars = ["mLvlNow", "cLvlNow", "MedNow"] + self.agent.track_vars = ["mLvl", "cLvl", "Med"] self.agent.makeShockHistory() self.agent.initializeSim() self.agent.simulate() diff --git a/HARK/ConsumptionSaving/tests/test_ConsPortfolioModel.py b/HARK/ConsumptionSaving/tests/test_ConsPortfolioModel.py index 48aefa5b2..4937fa462 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsPortfolioModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsPortfolioModel.py @@ -41,21 +41,21 @@ def test_simOnePeriod(self): self.pcct.T_sim = 30 self.pcct.AgentCount = 10 - self.pcct.track_vars += ['aNrmNow'] + self.pcct.track_vars += ['aNrm'] self.pcct.initializeSim() self.assertFalse( - np.any(self.pcct.shocks['AdjustNow']) + np.any(self.pcct.shocks['Adjust']) ) self.pcct.simOnePeriod() self.assertAlmostEqual( - self.pcct.controls["ShareNow"][0], + self.pcct.controls["Share"][0], 0.8627164488246847 ) self.assertAlmostEqual( - self.pcct.controls["cNrmNow"][0], + self.pcct.controls['cNrm'][0], 1.67874799 ) @@ -66,78 +66,78 @@ def test_simulation(self): self.pcct.T_sim = 30 self.pcct.AgentCount = 10 self.pcct.track_vars += [ - 'mNrmNow', - 'cNrmNow', - 'ShareNow', - 'aNrmNow', - 'RiskyNow', - 'RportNow', - 'AdjustNow', - 'PermShkNow', - 'bNrmNow' + 'mNrm', + 'cNrm', + 'Share', + 'aNrm', + 'Risky', + 'Rport', + 'Adjust', + 'PermShk', + 'bNrm' ] self.pcct.initializeSim() self.pcct.simulate() self.assertAlmostEqual( - self.pcct.history['mNrmNow'][0][0], 9.70233892 + self.pcct.history['mNrm'][0][0], 9.70233892 ) self.assertAlmostEqual( - self.pcct.history['cNrmNow'][0][0], 1.6787479894848298 + self.pcct.history['cNrm'][0][0], 1.6787479894848298 ) self.assertAlmostEqual( - self.pcct.history['ShareNow'][0][0], 0.8627164488246847 + self.pcct.history['Share'][0][0], 0.8627164488246847 ) self.assertAlmostEqual( - self.pcct.history['aNrmNow'][0][0], 8.023590930905383 + self.pcct.history['aNrm'][0][0], 8.023590930905383 ) self.assertAlmostEqual( - self.pcct.history['AdjustNow'][0][0], 1.0 + self.pcct.history['Adjust'][0][0], 1.0 ) # the next period self.assertAlmostEqual( - self.pcct.history['RiskyNow'][1][0], 0.8950304697526602 + self.pcct.history['Risky'][1][0], 0.8950304697526602 ) self.assertAlmostEqual( - self.pcct.history['RportNow'][1][0], 0.9135595661654792 + self.pcct.history['Rport'][1][0], 0.9135595661654792 ) self.assertAlmostEqual( - self.pcct.history['AdjustNow'][1][0], 1.0 + self.pcct.history['Adjust'][1][0], 1.0 ) self.assertAlmostEqual( - self.pcct.history['PermShkNow'][1][0], 1.0050166461586711 + self.pcct.history['PermShk'][1][0], 1.0050166461586711 ) self.assertAlmostEqual( - self.pcct.history['bNrmNow'][1][0], 7.293439643953855 + self.pcct.history['bNrm'][1][0], 7.293439643953855 ) self.assertAlmostEqual( - self.pcct.history['mNrmNow'][1][0], 8.287859049575047 + self.pcct.history['mNrm'][1][0], 8.287859049575047 ) self.assertAlmostEqual( - self.pcct.history['cNrmNow'][1][0], 1.5773607434989751 + self.pcct.history['cNrm'][1][0], 1.5773607434989751 ) self.assertAlmostEqual( - self.pcct.history['ShareNow'][1][0], 0.9337608822146805 + self.pcct.history['Share'][1][0], 0.9337608822146805 ) self.assertAlmostEqual( - self.pcct.history['aNrmNow'][1][0], 6.710498306076072 + self.pcct.history['aNrm'][1][0], 6.710498306076072 ) self.assertAlmostEqual( - self.pcct.history['aNrmNow'][15][0], 5.304746367434934 + self.pcct.history['aNrm'][15][0], 5.304746367434934 ) diff --git a/HARK/ConsumptionSaving/tests/test_ConsPrefShockModel.py b/HARK/ConsumptionSaving/tests/test_ConsPrefShockModel.py index 4861280c4..db9979bf8 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsPrefShockModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsPrefShockModel.py @@ -31,19 +31,19 @@ def test_solution(self): def test_simulation(self): self.agent.T_sim = 10 - self.agent.track_vars = ["cNrmNow", "PrefShkNow"] + self.agent.track_vars = ['cNrm', "PrefShk"] self.agent.makeShockHistory() # This is optional self.agent.initializeSim() self.agent.simulate() - self.assertAlmostEqual(self.agent.history["cNrmNow"][0][5], 0.7366020536567589) + self.assertAlmostEqual(self.agent.history['cNrm'][0][5], 0.7366020536567589) self.assertEqual( - self.agent.shock_history["PrefShkNow"][0][5], - self.agent.history["PrefShkNow"][0][5], + self.agent.shock_history["PrefShk"][0][5], + self.agent.history["PrefShk"][0][5], ) - self.assertEqual(self.agent.history["PrefShkNow"][0][5], 0.4909415933881665) + self.assertEqual(self.agent.history["PrefShk"][0][5], 0.4909415933881665) class testKinkyPrefConsumerType(unittest.TestCase): @@ -71,8 +71,8 @@ def test_solution(self): def test_simulation(self): self.agent.T_sim = 10 - self.agent.track_vars = ["cNrmNow", "PrefShkNow"] + self.agent.track_vars = ['cNrm', "PrefShk"] self.agent.initializeSim() self.agent.simulate() - self.assertAlmostEqual(self.agent.history["cNrmNow"][0][5], 0.7717096928111515) + self.assertAlmostEqual(self.agent.history['cNrm'][0][5], 0.7717096928111515) diff --git a/HARK/ConsumptionSaving/tests/test_ConsRepAgentModel.py b/HARK/ConsumptionSaving/tests/test_ConsRepAgentModel.py index a1c42c97c..ce2bba109 100644 --- a/HARK/ConsumptionSaving/tests/test_ConsRepAgentModel.py +++ b/HARK/ConsumptionSaving/tests/test_ConsRepAgentModel.py @@ -19,7 +19,7 @@ def test_solution(self): def test_simulation(self): # Simulate the representative agent model self.agent.T_sim = 100 - self.agent.track_vars = ["cNrmNow", "mNrmNow", "Rfree", "wRte"] + self.agent.track_vars = ['cNrm', "mNrm", "Rfree", "wRte"] self.agent.initializeSim() self.agent.simulate() @@ -38,6 +38,6 @@ def test_solution(self): def test_simulation(self): # Simulate the representative agent model self.agent.T_sim = 100 - self.agent.track_vars = ["cNrmNow", "mNrmNow", "Rfree", "wRte", "MrkvNow"] + self.agent.track_vars = ['cNrm', "mNrm", "Rfree", "wRte", "Mrkv"] self.agent.initializeSim() self.agent.simulate() diff --git a/HARK/ConsumptionSaving/tests/test_IndShockConsumerTypeFast.py b/HARK/ConsumptionSaving/tests/test_IndShockConsumerTypeFast.py index cf88297ab..e90f7ba24 100644 --- a/HARK/ConsumptionSaving/tests/test_IndShockConsumerTypeFast.py +++ b/HARK/ConsumptionSaving/tests/test_IndShockConsumerTypeFast.py @@ -27,9 +27,9 @@ def test_getShocks(self): self.agent.getShocks() - self.assertEqual(self.agent.shocks['PermShkNow'][0], 1.0427376294215103) - self.assertEqual(self.agent.shocks['PermShkNow'][1], 0.9278094171517413) - self.assertEqual(self.agent.shocks['TranShkNow'][0], 0.881761797501595) + self.assertEqual(self.agent.shocks['PermShk'][0], 1.0427376294215103) + self.assertEqual(self.agent.shocks['PermShk'][1], 0.9278094171517413) + self.assertEqual(self.agent.shocks['TranShk'][0], 0.881761797501595) def test_ConsIndShockSolverBasic(self): LifecycleExample = IndShockConsumerTypeFast(**init_lifecycle) @@ -58,7 +58,7 @@ def test_simulated_values(self): self.agent.simulate() self.assertAlmostEqual(self.agent.MPCnow[1], 0.5711503906043797) - self.assertAlmostEqual(self.agent.state_now['aLvlNow'][1], 0.18438326264597635) + self.assertAlmostEqual(self.agent.state_now['aLvl'][1], 0.18438326264597635) class testBufferStock(unittest.TestCase): @@ -165,12 +165,12 @@ def test_infinite_horizon(self): IndShockExample.solution[0].cFunc.functions[0].x_list[0], -0.25017509 ) - IndShockExample.track_vars = ["aNrmNow", "mNrmNow", "cNrmNow", "pLvlNow"] + IndShockExample.track_vars = ['aNrm', "mNrm", 'cNrm', 'pLvl'] IndShockExample.initializeSim() IndShockExample.simulate() self.assertAlmostEqual( - IndShockExample.history["mNrmNow"][0][0], 1.0170176090252379 + IndShockExample.history["mNrm"][0][0], 1.0170176090252379 ) diff --git a/HARK/ConsumptionSaving/tests/test_PerfForesightConsumerType.py b/HARK/ConsumptionSaving/tests/test_PerfForesightConsumerType.py index 8fe6c5577..a7105b1f6 100644 --- a/HARK/ConsumptionSaving/tests/test_PerfForesightConsumerType.py +++ b/HARK/ConsumptionSaving/tests/test_PerfForesightConsumerType.py @@ -65,17 +65,17 @@ def test_simulation(self): ) # This implicitly uses the assignParameters method of AgentType # Create PFexample object - self.agent_infinite.track_vars = ["mNrmNow"] + self.agent_infinite.track_vars = ["mNrm"] self.agent_infinite.initializeSim() self.agent_infinite.simulate() self.assertAlmostEqual( - np.mean(self.agent_infinite.history["mNrmNow"], axis=1)[40], + np.mean(self.agent_infinite.history["mNrm"], axis=1)[40], -23.008063500363942, ) self.assertAlmostEqual( - np.mean(self.agent_infinite.history["mNrmNow"], axis=1)[100], + np.mean(self.agent_infinite.history["mNrm"], axis=1)[100], -27.164608851546927, ) @@ -86,17 +86,17 @@ def test_simulation(self): # This actually does nothing because aNrmNow is # epiphenomenal. Probably should change mNrmNow instead - self.agent_infinite.state_now['aNrmNow'] += ( + self.agent_infinite.state_now['aNrm'] += ( -5.0 ) self.agent_infinite.simulate(40) self.assertAlmostEqual( - np.mean(self.agent_infinite.history["mNrmNow"], axis=1)[40], + np.mean(self.agent_infinite.history["mNrm"], axis=1)[40], -23.008063500363942, ) self.assertAlmostEqual( - np.mean(self.agent_infinite.history["mNrmNow"], axis=1)[100], + np.mean(self.agent_infinite.history["mNrm"], axis=1)[100], -29.140261331951606, ) diff --git a/HARK/ConsumptionSaving/tests/test_TractableBufferStockModel.py b/HARK/ConsumptionSaving/tests/test_TractableBufferStockModel.py index bc76a82c8..c6e97030c 100644 --- a/HARK/ConsumptionSaving/tests/test_TractableBufferStockModel.py +++ b/HARK/ConsumptionSaving/tests/test_TractableBufferStockModel.py @@ -16,8 +16,8 @@ def test_simulation(self): self.tct.aLvlInitMean = 0.0 # Mean of log initial assets for new agents self.tct.aLvlInitStd = 1.0 # stdev of log initial assets for new agents self.tct.T_cycle = 1 - self.tct.track_vars += ["mLvlNow"] + self.tct.track_vars += ["mLvl"] self.tct.initializeSim() self.tct.simulate() - self.assertAlmostEqual(self.tct.history["mLvlNow"][15][0], 5.820630251772332) + self.assertAlmostEqual(self.tct.history["mLvl"][15][0], 5.820630251772332) From ddf277b6e34fc2a35f613687c62588bd0e804a07 Mon Sep 17 00:00:00 2001 From: sb Date: Thu, 28 Jan 2021 18:50:06 -0500 Subject: [PATCH 3/4] changes to make ConsAggShockModel work without 'Now' in model variables, fixes #920 --- HARK/ConsumptionSaving/ConsAggShockModel.py | 55 ++++++++++--------- .../IndShockConsumerType.ipynb | 8 +-- .../ConsIndShockModel/IndShockConsumerType.py | 8 +-- .../ConsIndShockModel/KinkedRconsumerType.py | 4 +- .../PerfForesightConsumerType.py | 6 +- .../example_ConsGenIncProcessModel.py | 4 +- .../ConsumptionSaving/example_ConsIndShock.py | 10 ++-- .../example_ConsLaborModel.py | 2 +- .../example_ConsMarkovModel.py | 2 +- .../example_ConsPortfolioModel.ipynb | 2 +- .../example_ConsPortfolioModel.py | 2 +- .../example_ConsPrefShockModel.py | 4 +- .../example_ConsRepAgentModel.py | 4 +- .../GenIncProcessModel.ipynb | 4 +- .../GenIncProcessModel/GenIncProcessModel.py | 4 +- .../Quick_start_with_solution.ipynb | 12 ++-- examples/LifecycleModel/LifecycleModel.ipynb | 8 +-- examples/LifecycleModel/LifecycleModel.py | 8 +-- 18 files changed, 76 insertions(+), 71 deletions(-) diff --git a/HARK/ConsumptionSaving/ConsAggShockModel.py b/HARK/ConsumptionSaving/ConsAggShockModel.py index 0865fe454..cb0cc01c4 100644 --- a/HARK/ConsumptionSaving/ConsAggShockModel.py +++ b/HARK/ConsumptionSaving/ConsAggShockModel.py @@ -169,7 +169,7 @@ def reset(self): """ self.initializeSim() self.state_now['aLvlNow'] = self.kInit * np.ones(self.AgentCount) # Start simulation near SS - self.state_now['aNrmNow'] = self.state_now['aLvlNow'] / self.state_now['pLvlNow'] # ??? + self.state_now['aNrm'] = self.state_now['aLvlNow'] / self.state_now['pLvl'] # ??? def preSolve(self): # AgentType.preSolve() @@ -283,12 +283,12 @@ def simBirth(self, which_agents): None """ IndShockConsumerType.simBirth(self, which_agents) - if "aLvlNow" in self.state_now and self.state_now["aLvlNow"] is not None: - self.state_now["aLvlNow"][which_agents] = ( - self.state_now["aNrmNow"][which_agents] * self.state_now["pLvlNow"][which_agents] + if 'aLvl' in self.state_now and self.state_now['aLvl'] is not None: + self.state_now['aLvl'][which_agents] = ( + self.state_now['aNrm'][which_agents] * self.state_now['pLvl'][which_agents] ) else: - self.state_now["aLvlNow"] = self.state_now['aNrmNow'] * self.state_now['pLvlNow'] + self.state_now['aLvl'] = self.state_now['aNrm'] * self.state_now['pLvl'] def simDeath(self): """ @@ -323,11 +323,11 @@ def simDeath(self): # Divide up the wealth of those who die, giving it to those who survive who_lives = np.logical_not(who_dies) - wealth_living = np.sum(self.state_now["aLvlNow"][who_lives]) - wealth_dead = np.sum(self.state_now["aLvlNow"][who_dies]) + wealth_living = np.sum(self.state_now['aLvl'][who_lives]) + wealth_dead = np.sum(self.state_now['aLvl'][who_dies]) Ractuarial = 1.0 + wealth_dead / wealth_living - self.state_now['aNrmNow'][who_lives] = self.state_now['aNrmNow'][who_lives] * Ractuarial - self.state_now["aLvlNow"][who_lives] = self.state_now["aLvlNow"][who_lives] * Ractuarial + self.state_now['aNrm'][who_lives] = self.state_now['aNrm'][who_lives] * Ractuarial + self.state_now['aLvl'][who_lives] = self.state_now['aLvl'][who_lives] * Ractuarial return who_dies def getRfree(self): @@ -360,10 +360,10 @@ def getShocks(self): None """ IndShockConsumerType.getShocks(self) # Update idiosyncratic shocks - self.shocks["TranShkNow"] = ( - self.shocks["TranShkNow"] * self.TranShkAggNow * self.wRteNow + self.shocks['TranShk'] = ( + self.shocks['TranShk'] * self.TranShkAggNow * self.wRteNow ) - self.shocks["PermShkNow"] = self.shocks["PermShkNow"] * self.PermShkAggNow + self.shocks['PermShk'] = self.shocks['PermShk'] * self.PermShkAggNow def getControls(self): """ @@ -382,12 +382,12 @@ def getControls(self): MaggNow = self.getMaggNow() for t in range(self.T_cycle): these = t == self.t_cycle - cNrmNow[these] = self.solution[t].cFunc(self.state_now["mNrmNow"][these], MaggNow[these]) + cNrmNow[these] = self.solution[t].cFunc(self.state_now['mNrm'][these], MaggNow[these]) MPCnow[these] = self.solution[t].cFunc.derivativeX( - self.state_now["mNrmNow"][these], MaggNow[these] + self.state_now['mNrm'][these], MaggNow[these] ) # Marginal propensity to consume - self.controls["cNrmNow"] = cNrmNow + self.controls['cNrm'] = cNrmNow self.MPCnow = MPCnow return None @@ -599,8 +599,8 @@ def getShocks(self): # Store the shocks in self self.EmpNow = np.ones(self.AgentCount, dtype=bool) self.EmpNow[TranShkNow == self.IncUnemp] = False - self.shocks["TranShkNow"] = TranShkNow * self.TranShkAggNow * self.wRteNow - self.shocks["PermShkNow"] = PermShkNow * self.PermShkAggNow + self.shocks['TranShk'] = TranShkNow * self.TranShkAggNow * self.wRteNow + self.shocks['PermShk'] = PermShkNow * self.PermShkAggNow def getControls(self): """ @@ -632,15 +632,15 @@ def getControls(self): for i in range(StateCount): those = np.logical_and(these, MrkvBoolArray[i, :]) cNrmNow[those] = self.solution[t].cFunc[i]( - self.state_now["mNrmNow"][those], MaggNow[those] + self.state_now['mNrm'][those], MaggNow[those] ) # Marginal propensity to consume MPCnow[those] = ( self.solution[t] .cFunc[i] - .derivativeX(self.state_now["mNrmNow"][those], MaggNow[those]) + .derivativeX(self.state_now['mNrm'][those], MaggNow[those]) ) - self.controls["cNrmNow"] = cNrmNow + self.controls['cNrm'] = cNrmNow self.MPCnow = MPCnow return None @@ -1875,7 +1875,7 @@ def __init__(self, agents=None, tolerance=0.0001, act_T=1200, **kwds): Market.__init__( self, agents=agents, - reap_vars=["aLvlNow", "pLvlNow"], + reap_vars=['aLvl', 'pLvl'], track_vars=["MaggNow", "AaggNow"], dyn_vars=["AFunc"], tolerance=tolerance, @@ -1896,14 +1896,14 @@ def __init__(self, agents=None, tolerance=0.0001, act_T=1200, **kwds): if not hasattr(self, "verbose"): self.verbose = True - def millRule(self, aLvlNow, pLvlNow): + def millRule(self, aLvl, pLvl): """ Function to calculate the capital to labor ratio, interest factor, and wage rate based on each agent's current state. Just calls calcRandW(). See documentation for calcRandW for more information. """ - return self.calcRandW(aLvlNow, pLvlNow) + return self.calcRandW(aLvl, pLvl) def calcDynamics(self, MaggNow, AaggNow): """ @@ -2651,7 +2651,7 @@ def makeMrkvHist(self): self.MrkvNow_hist = MrkvNow_hist self.act_T = act_T - def millRule(self, aLvlNow, pLvlNow): + def millRule(self, aLvl, pLvl): """ Function to calculate the capital to labor ratio, interest factor, and wage rate based on each agent's current state. Just calls calcRandW() @@ -2659,6 +2659,11 @@ def millRule(self, aLvlNow, pLvlNow): See documentation for calcRandW for more information. + Params + ------- + aLvl : float + pLvl : float + Returns ------- Mnow : float @@ -2675,7 +2680,7 @@ def millRule(self, aLvlNow, pLvlNow): Binary indicator for bad (0) or good (1) macroeconomic state. """ MrkvNow = self.MrkvNow_hist[self.Shk_idx] - temp = self.calcRandW(aLvlNow, pLvlNow) + temp = self.calcRandW(aLvl, pLvl) return temp + (MrkvNow,) diff --git a/examples/ConsIndShockModel/IndShockConsumerType.ipynb b/examples/ConsIndShockModel/IndShockConsumerType.ipynb index 2b405c8ff..4d2f8f412 100644 --- a/examples/ConsIndShockModel/IndShockConsumerType.ipynb +++ b/examples/ConsIndShockModel/IndShockConsumerType.ipynb @@ -456,7 +456,7 @@ "metadata": {}, "outputs": [], "source": [ - "IndShockExample.track_vars = ['aNrmNow','mNrmNow','cNrmNow','pLvlNow']\n", + "IndShockExample.track_vars = ['aNrmNow','mNrm','cNrm','pLvl']\n", "IndShockExample.initializeSim()\n", "IndShockExample.simulate()" ] @@ -499,12 +499,12 @@ } ], "source": [ - "plt.plot(np.mean(IndShockExample.history['mNrmNow'],axis=1))\n", + "plt.plot(np.mean(IndShockExample.history['mNrm'],axis=1))\n", "plt.xlabel('Time')\n", "plt.ylabel('Mean market resources')\n", "plt.show()\n", "\n", - "plt.plot(np.mean(IndShockExample.history['cNrmNow'],axis=1))\n", + "plt.plot(np.mean(IndShockExample.history['cNrm'],axis=1))\n", "plt.xlabel('Time')\n", "plt.ylabel('Mean consumption')\n", "plt.show()" @@ -536,7 +536,7 @@ } ], "source": [ - "plt.plot(IndShockExample.history['cNrmNow'][:,0:5])\n", + "plt.plot(IndShockExample.history['cNrm'][:,0:5])\n", "plt.xlabel('Time')\n", "plt.ylabel('Individual consumption paths')\n", "plt.show()" diff --git a/examples/ConsIndShockModel/IndShockConsumerType.py b/examples/ConsIndShockModel/IndShockConsumerType.py index d4665e7c8..549f56525 100644 --- a/examples/ConsIndShockModel/IndShockConsumerType.py +++ b/examples/ConsIndShockModel/IndShockConsumerType.py @@ -243,7 +243,7 @@ # These example parameter values were already passed as part of the parameter dictionary that we used to create $\texttt{IndShockExample}$, so it is ready to simulate. We need to set the $\texttt{track_vars}$ attribute to indicate the variables for which we want to record a *history*. # %% -IndShockExample.track_vars = ['aNrmNow','mNrmNow','cNrmNow','pLvlNow'] +IndShockExample.track_vars = ['aNrmNow','mNrm','cNrm','pLvl'] IndShockExample.initializeSim() IndShockExample.simulate() @@ -251,12 +251,12 @@ # We can now look at the simulated data in aggregate or at the individual consumer level. Like in the perfect foresight model, we can plot average (normalized) market resources over time, as well as average consumption: # %% -plt.plot(np.mean(IndShockExample.history['mNrmNow'],axis=1)) +plt.plot(np.mean(IndShockExample.history['mNrm'],axis=1)) plt.xlabel('Time') plt.ylabel('Mean market resources') plt.show() -plt.plot(np.mean(IndShockExample.history['cNrmNow'],axis=1)) +plt.plot(np.mean(IndShockExample.history['cNrm'],axis=1)) plt.xlabel('Time') plt.ylabel('Mean consumption') plt.show() @@ -265,7 +265,7 @@ # We could also plot individual consumption paths for some of the consumers-- say, the first five: # %% -plt.plot(IndShockExample.history['cNrmNow'][:,0:5]) +plt.plot(IndShockExample.history['cNrm'][:,0:5]) plt.xlabel('Time') plt.ylabel('Individual consumption paths') plt.show() diff --git a/examples/ConsIndShockModel/KinkedRconsumerType.py b/examples/ConsIndShockModel/KinkedRconsumerType.py index 4e5cbd049..dfcacfcba 100644 --- a/examples/ConsIndShockModel/KinkedRconsumerType.py +++ b/examples/ConsIndShockModel/KinkedRconsumerType.py @@ -197,7 +197,7 @@ # These example parameter values were already passed as part of the parameter dictionary that we used to create $\texttt{KinkyExample}$, so it is ready to simulate. We need to set the $\texttt{track_vars}$ attribute to indicate the variables for which we want to record a *history*. # %% -KinkyExample.track_vars = ["mNrmNow", "cNrmNow", "pLvlNow"] +KinkyExample.track_vars = ['mNrm', 'cNrm', 'pLvl'] KinkyExample.initializeSim() KinkyExample.simulate() @@ -205,7 +205,7 @@ # We can plot the average (normalized) market resources in each simulated period: # %% -plt.plot(np.mean(KinkyExample.history["mNrmNow"], axis=1)) +plt.plot(np.mean(KinkyExample.history['mNrm'], axis=1)) plt.xlabel("Time") plt.ylabel("Mean market resources") plt.show() diff --git a/examples/ConsIndShockModel/PerfForesightConsumerType.py b/examples/ConsIndShockModel/PerfForesightConsumerType.py index e8cf2ea8a..67f9f311c 100644 --- a/examples/ConsIndShockModel/PerfForesightConsumerType.py +++ b/examples/ConsIndShockModel/PerfForesightConsumerType.py @@ -245,7 +245,7 @@ # Finally, the $\texttt{simulate}$ method can be called. # %% pycharm= {"name": "#%%\n"} -PFexample.track_vars = ["mNrmNow"] +PFexample.track_vars = ['mNrm'] PFexample.initializeSim() PFexample.simulate() @@ -253,7 +253,7 @@ # Each simulation variable $\texttt{X}$ named in $\texttt{track_vars}$ will have the *history* of that variable for each agent stored in the attribute $\texttt{X_hist}$ as an array of shape $(\texttt{T_sim},\texttt{AgentCount})$. To see that the simulation worked as intended, we can plot the mean of $m_t$ in each simulated period: # %% pycharm= {"name": "#%%\n"} -plt.plot(np.mean(PFexample.history["mNrmNow"], axis=1)) +plt.plot(np.mean(PFexample.history['mNrm'], axis=1)) plt.xlabel("Time") plt.ylabel("Mean normalized market resources") plt.show() @@ -288,7 +288,7 @@ PFexample.state_prev['aNrmNow'] += -5.0 # Adjust all simulated consumers' assets downward by 5 PFexample.simulate(40) -plt.plot(np.mean(PFexample.history["mNrmNow"], axis=1)) +plt.plot(np.mean(PFexample.history['mNrm'], axis=1)) plt.xlabel("Time") plt.ylabel("Mean normalized market resources") plt.show() diff --git a/examples/ConsumptionSaving/example_ConsGenIncProcessModel.py b/examples/ConsumptionSaving/example_ConsGenIncProcessModel.py index ea29c3239..5c187cfa3 100644 --- a/examples/ConsumptionSaving/example_ConsGenIncProcessModel.py +++ b/examples/ConsumptionSaving/example_ConsGenIncProcessModel.py @@ -121,7 +121,7 @@ def mystr(number): # Simulate some data if do_simulation: ExplicitExample.T_sim = 500 - ExplicitExample.track_vars = ["mLvlNow", "cLvlNow", "pLvlNow"] + ExplicitExample.track_vars = ["mLvlNow", "cLvlNow", 'pLvl'] ExplicitExample.makeShockHistory() # This is optional ExplicitExample.initializeSim() ExplicitExample.simulate() @@ -179,7 +179,7 @@ def mystr(number): # Simulate some data if do_simulation: PersistentExample.T_sim = 500 - PersistentExample.track_vars = ["mLvlNow", "cLvlNow", "pLvlNow"] + PersistentExample.track_vars = ["mLvlNow", "cLvlNow", 'pLvl'] PersistentExample.initializeSim() PersistentExample.simulate() plt.plot(np.mean(PersistentExample.mLvlNow_hist, axis=1)) diff --git a/examples/ConsumptionSaving/example_ConsIndShock.py b/examples/ConsumptionSaving/example_ConsIndShock.py index 3246b3bb1..f9952c796 100644 --- a/examples/ConsumptionSaving/example_ConsIndShock.py +++ b/examples/ConsumptionSaving/example_ConsIndShock.py @@ -35,7 +35,7 @@ if do_simulation: PFexample.T_sim = 120 # Set number of simulation periods - PFexample.track_vars = ["mNrmNow"] + PFexample.track_vars = ['mNrm'] PFexample.initializeSim() PFexample.simulate() @@ -80,7 +80,7 @@ # Simulate some data; results stored in mNrmNow_hist, cNrmNow_hist, and pLvlNow_hist if do_simulation: IndShockExample.T_sim = 120 - IndShockExample.track_vars = ["mNrmNow", "cNrmNow", "pLvlNow"] + IndShockExample.track_vars = ['mNrm', 'cNrm', 'pLvl'] IndShockExample.makeShockHistory() # This is optional, simulation will draw shocks on the fly if it isn't run. IndShockExample.initializeSim() IndShockExample.simulate() @@ -111,7 +111,7 @@ # Simulate some data; results stored in mNrmNow_hist, cNrmNow_hist, pLvlNow_hist, and t_age_hist if do_simulation: LifecycleExample.T_sim = 120 - LifecycleExample.track_vars = ["mNrmNow", "cNrmNow", "pLvlNow", "t_age"] + LifecycleExample.track_vars = ['mNrm', 'cNrm', 'pLvl', "t_age"] LifecycleExample.initializeSim() LifecycleExample.simulate() @@ -134,7 +134,7 @@ # Simulate some data; results stored in cHist, mHist, bHist, aHist, MPChist, and pHist if do_simulation: CyclicalExample.T_sim = 480 - CyclicalExample.track_vars = ["mNrmNow", "cNrmNow", "pLvlNow", "t_cycle"] + CyclicalExample.track_vars = ['mNrm', 'cNrm', 'pLvl', "t_cycle"] CyclicalExample.initializeSim() CyclicalExample.simulate() @@ -152,6 +152,6 @@ if do_simulation: KinkyExample.T_sim = 120 - KinkyExample.track_vars = ["mNrmNow", "cNrmNow", "pLvlNow"] + KinkyExample.track_vars = ['mNrm', 'cNrm', 'pLvl'] KinkyExample.initializeSim() KinkyExample.simulate() diff --git a/examples/ConsumptionSaving/example_ConsLaborModel.py b/examples/ConsumptionSaving/example_ConsLaborModel.py index 87bfa25dd..0d14e1e28 100644 --- a/examples/ConsumptionSaving/example_ConsLaborModel.py +++ b/examples/ConsumptionSaving/example_ConsLaborModel.py @@ -129,7 +129,7 @@ if do_simulation: t_start = process_time() LaborIntMargExample.T_sim = 120 # Set number of simulation periods - LaborIntMargExample.track_vars = ["bNrmNow", "cNrmNow"] + LaborIntMargExample.track_vars = ["bNrmNow", 'cNrm'] LaborIntMargExample.initializeSim() LaborIntMargExample.simulate() t_end = process_time() diff --git a/examples/ConsumptionSaving/example_ConsMarkovModel.py b/examples/ConsumptionSaving/example_ConsMarkovModel.py index c63e9368d..0534e6243 100644 --- a/examples/ConsumptionSaving/example_ConsMarkovModel.py +++ b/examples/ConsumptionSaving/example_ConsMarkovModel.py @@ -163,7 +163,7 @@ if do_simulation: SerialUnemploymentExample.T_sim = 120 SerialUnemploymentExample.MrkvPrbsInit = [0.25, 0.25, 0.25, 0.25] - SerialUnemploymentExample.track_vars = ["mNrmNow", "cNrmNow"] + SerialUnemploymentExample.track_vars = ['mNrm', 'cNrm'] SerialUnemploymentExample.makeShockHistory() # This is optional SerialUnemploymentExample.initializeSim() SerialUnemploymentExample.simulate() diff --git a/examples/ConsumptionSaving/example_ConsPortfolioModel.ipynb b/examples/ConsumptionSaving/example_ConsPortfolioModel.ipynb index 4235daa78..de0bd2c06 100644 --- a/examples/ConsumptionSaving/example_ConsPortfolioModel.ipynb +++ b/examples/ConsumptionSaving/example_ConsPortfolioModel.ipynb @@ -130,7 +130,7 @@ "outputs": [], "source": [ "# Now simulate this consumer type\n", - "MyType.track_vars = ['cNrmNow', 'aNrmNow', 't_age']\n", + "MyType.track_vars = ['cNrm', 'aNrmNow', 't_age']\n", "MyType.T_sim = 100\n", "MyType.initializeSim()\n", "MyType.simulate()" diff --git a/examples/ConsumptionSaving/example_ConsPortfolioModel.py b/examples/ConsumptionSaving/example_ConsPortfolioModel.py index 98573eee3..4b5e5b6ab 100644 --- a/examples/ConsumptionSaving/example_ConsPortfolioModel.py +++ b/examples/ConsumptionSaving/example_ConsPortfolioModel.py @@ -41,7 +41,7 @@ # %% # Now simulate this consumer type -MyType.track_vars = ['cNrmNow', 'ShareNow', 'aNrmNow', 't_age'] +MyType.track_vars = ['cNrm', 'ShareNow', 'aNrmNow', 't_age'] MyType.T_sim = 100 MyType.initializeSim() MyType.simulate() diff --git a/examples/ConsumptionSaving/example_ConsPrefShockModel.py b/examples/ConsumptionSaving/example_ConsPrefShockModel.py index 9f0b9f3be..7aabdc73c 100644 --- a/examples/ConsumptionSaving/example_ConsPrefShockModel.py +++ b/examples/ConsumptionSaving/example_ConsPrefShockModel.py @@ -112,7 +112,7 @@ # Test the simulator for the pref shock class if do_simulation: PrefShockExample.T_sim = 120 - PrefShockExample.track_vars = ["cNrmNow"] + PrefShockExample.track_vars = ['cNrm'] PrefShockExample.makeShockHistory() # This is optional PrefShockExample.initializeSim() PrefShockExample.simulate() @@ -180,6 +180,6 @@ # Test the simulator for the kinky preference class if do_simulation: KinkyPrefExample.T_sim = 120 - KinkyPrefExample.track_vars = ["cNrmNow", "PrefShkNow"] + KinkyPrefExample.track_vars = ['cNrm', "PrefShkNow"] KinkyPrefExample.initializeSim() KinkyPrefExample.simulate() diff --git a/examples/ConsumptionSaving/example_ConsRepAgentModel.py b/examples/ConsumptionSaving/example_ConsRepAgentModel.py index a23b8eb01..e1e11eaf2 100644 --- a/examples/ConsumptionSaving/example_ConsRepAgentModel.py +++ b/examples/ConsumptionSaving/example_ConsRepAgentModel.py @@ -55,7 +55,7 @@ # %% # Simulate the representative agent model RAexample.T_sim = 2000 -RAexample.track_vars = ["cNrmNow", "mNrmNow", "Rfree", "wRte"] +RAexample.track_vars = ['cNrm', 'mNrm', "Rfree", "wRte"] RAexample.initializeSim() t_start = time() RAexample.simulate() @@ -89,7 +89,7 @@ # %% # Simulate the two state representative agent model RAmarkovExample.T_sim = 2000 -RAmarkovExample.track_vars = ["cNrmNow", "mNrmNow", "Rfree", "wRte", "MrkvNow"] +RAmarkovExample.track_vars = ['cNrm', 'mNrm', "Rfree", "wRte", "MrkvNow"] RAmarkovExample.initializeSim() t_start = time() RAmarkovExample.simulate() diff --git a/examples/GenIncProcessModel/GenIncProcessModel.ipynb b/examples/GenIncProcessModel/GenIncProcessModel.ipynb index 54b3463aa..52979fadc 100644 --- a/examples/GenIncProcessModel/GenIncProcessModel.ipynb +++ b/examples/GenIncProcessModel/GenIncProcessModel.ipynb @@ -443,7 +443,7 @@ "source": [ "# Simulate many periods to get to the stationary distribution\n", "ExplicitExample.T_sim = 500\n", - "ExplicitExample.track_vars = ['mLvlNow','cLvlNow','pLvlNow']\n", + "ExplicitExample.track_vars = ['mLvlNow','cLvlNow','pLvl']\n", "ExplicitExample.initializeSim()\n", "ExplicitExample.simulate()\n", "plt.plot(np.mean(ExplicitExample.history['mLvlNow'],axis=1))\n", @@ -613,7 +613,7 @@ "source": [ "# Simulate some data\n", "PersistentExample.T_sim = 500\n", - "PersistentExample.track_vars = ['mLvlNow','cLvlNow','pLvlNow']\n", + "PersistentExample.track_vars = ['mLvlNow','cLvlNow','pLvl']\n", "PersistentExample.initializeSim()\n", "PersistentExample.simulate()\n", "plt.plot(np.mean(PersistentExample.history['mLvlNow'],axis=1))\n", diff --git a/examples/GenIncProcessModel/GenIncProcessModel.py b/examples/GenIncProcessModel/GenIncProcessModel.py index c93be9e25..a2beb8dbb 100644 --- a/examples/GenIncProcessModel/GenIncProcessModel.py +++ b/examples/GenIncProcessModel/GenIncProcessModel.py @@ -304,7 +304,7 @@ # %% # Simulate many periods to get to the stationary distribution ExplicitExample.T_sim = 500 -ExplicitExample.track_vars = ['mLvlNow','cLvlNow','pLvlNow'] +ExplicitExample.track_vars = ['mLvlNow','cLvlNow','pLvl'] ExplicitExample.initializeSim() ExplicitExample.simulate() plt.plot(np.mean(ExplicitExample.history['mLvlNow'],axis=1)) @@ -390,7 +390,7 @@ # %% # Simulate some data PersistentExample.T_sim = 500 -PersistentExample.track_vars = ['mLvlNow','cLvlNow','pLvlNow'] +PersistentExample.track_vars = ['mLvlNow','cLvlNow','pLvl'] PersistentExample.initializeSim() PersistentExample.simulate() plt.plot(np.mean(PersistentExample.history['mLvlNow'],axis=1)) diff --git a/examples/Journeys/Quickstart_tutorial/Quick_start_with_solution.ipynb b/examples/Journeys/Quickstart_tutorial/Quick_start_with_solution.ipynb index 71c32525f..e905155db 100644 --- a/examples/Journeys/Quickstart_tutorial/Quick_start_with_solution.ipynb +++ b/examples/Journeys/Quickstart_tutorial/Quick_start_with_solution.ipynb @@ -479,7 +479,7 @@ "metadata": {}, "outputs": [], "source": [ - "Example_agent_2.track_vars = ['aNrmNow','cNrmNow']\n", + "Example_agent_2.track_vars = ['aNrmNow','cNrm']\n", "Example_agent_2.initializeSim()\n", "Example_agent_2.simulate()" ] @@ -518,7 +518,7 @@ "source": [ "periods= np.linspace(0,1000,1000)\n", "asset_level = np.mean(Example_agent_2.history['aNrmNow'][0:1000], axis = 1)\n", - "cons_level = np.mean(Example_agent_2.history['cNrmNow'][0:1000], axis = 1)\n", + "cons_level = np.mean(Example_agent_2.history['cNrm'][0:1000], axis = 1)\n", "\n", "plt.figure(figsize=(5,5))\n", "plt.plot(periods,asset_level,label='Assets level')\n", @@ -818,7 +818,7 @@ "outputs": [], "source": [ "#Solution\n", - "Exercise_agent.track_vars = ['aNrmNow','cNrmNow']\n", + "Exercise_agent.track_vars = ['aNrmNow','cNrm']\n", "Exercise_agent.initializeSim()\n", "Exercise_agent.simulate()" ] @@ -895,7 +895,7 @@ "source": [ "#Solution\n", "periods= np.linspace(0,1000,1000)\n", - "cons_level = np.mean(Exercise_agent.history['cNrmNow'][0:1000], axis = 1)\n", + "cons_level = np.mean(Exercise_agent.history['cNrm'][0:1000], axis = 1)\n", "increase_cons = cons_level[1:1000]/cons_level[0:999]\n", "\n", "plt.figure(figsize=(5,5))\n", @@ -1219,7 +1219,7 @@ } ], "source": [ - "LC_agent.track_vars = ['aNrmNow','cNrmNow', 'aLvlNow']\n", + "LC_agent.track_vars = ['aNrmNow','cNrm', 'aLvlNow']\n", "LC_agent.initializeSim()\n", "LC_agent.simulate()\n", "\n", @@ -1550,7 +1550,7 @@ "for key,value in Simulation_dictionary.items():\n", " setattr(Ex_agent,key,value)\n", "\n", - "Ex_agent.track_vars = ['aNrmNow','cNrmNow', 'aLvlNow']\n", + "Ex_agent.track_vars = ['aNrmNow','cNrm', 'aLvlNow']\n", "Ex_agent.initializeSim()\n", "Ex_agent.simulate()\n", "\n", diff --git a/examples/LifecycleModel/LifecycleModel.ipynb b/examples/LifecycleModel/LifecycleModel.ipynb index ffa43a57b..9a0e324c2 100644 --- a/examples/LifecycleModel/LifecycleModel.ipynb +++ b/examples/LifecycleModel/LifecycleModel.ipynb @@ -105,7 +105,7 @@ "LifeCyclePop.unpack('cFunc') # Expose the consumption rules\n", "\n", "# Which variables do we want to track\n", - "LifeCyclePop.track_vars = ['aNrmNow','pLvlNow','mNrmNow','cNrmNow','TranShkNow']\n", + "LifeCyclePop.track_vars = ['aNrmNow','pLvl','mNrm','cNrm','TranShkNow']\n", "\n", "LifeCyclePop.T_sim = 120 # Nobody lives to be older than 145 years (=25+120)\n", "LifeCyclePop.initializeSim() # Construct the age-25 distribution of income and assets\n", @@ -206,7 +206,7 @@ " aLvlGroNow = np.log(LifeCyclePop.history['aNrmNow'][t]/LifeCyclePop.history['aNrmNow'][t-1]) # (10000,)\n", "\n", " # Call the saving rate function with test value for \n", - " SavingRate = savingRateFunc(LifeCyclePop, LifeCyclePop.history['mNrmNow'][t] )\n", + " SavingRate = savingRateFunc(LifeCyclePop, LifeCyclePop.history['mNrm'][t] )\n", " \n", " SavingRate_list.append(SavingRate)\n", "\n", @@ -214,7 +214,7 @@ " matrix_list = [0 for number in range(7)]\n", " matrix_list[0] = t\n", " matrix_list[1] = LifeCyclePop.history['aNrmNow'][t]\n", - " matrix_list[2] = LifeCyclePop.history['cNrmNow'][t]\n", + " matrix_list[2] = LifeCyclePop.history['cNrm'][t]\n", " matrix_list[3] = LifeCyclePop.history['TranShkNow'][t]\n", " matrix_list[4] = LifeCyclePop.history['TranShkNow'][t-1]\n", " matrix_list[5] = aLvlGroNow\n", @@ -238,7 +238,7 @@ "outputs": [], "source": [ "# Construct the level of assets A from a*p where a is the ratio to permanent income p\n", - "LifeCyclePop.history['aLvlNow'] = LifeCyclePop.history['aNrmNow']*LifeCyclePop.history['pLvlNow']\n", + "LifeCyclePop.history['aLvlNow'] = LifeCyclePop.history['aNrmNow']*LifeCyclePop.history['pLvl']\n", "aGro41=LifeCyclePop.history['aLvlNow'][41]/LifeCyclePop.history['aLvlNow'][40]\n", "aGro41NoU=aGro41[aGro41[:]>0.2] # Throw out extreme outliers" ] diff --git a/examples/LifecycleModel/LifecycleModel.py b/examples/LifecycleModel/LifecycleModel.py index 2357b2bb4..5dd8373cd 100644 --- a/examples/LifecycleModel/LifecycleModel.py +++ b/examples/LifecycleModel/LifecycleModel.py @@ -80,7 +80,7 @@ LifeCyclePop.unpack('cFunc') # Expose the consumption rules # Which variables do we want to track -LifeCyclePop.track_vars = ['aNrmNow','pLvlNow','mNrmNow','cNrmNow','TranShkNow'] +LifeCyclePop.track_vars = ['aNrmNow','pLvl','mNrm','cNrm','TranShkNow'] LifeCyclePop.T_sim = 120 # Nobody lives to be older than 145 years (=25+120) LifeCyclePop.initializeSim() # Construct the age-25 distribution of income and assets @@ -133,7 +133,7 @@ def savingRateFunc(SomeType, m): aLvlGroNow = np.log(LifeCyclePop.history['aNrmNow'][t]/LifeCyclePop.history['aNrmNow'][t-1]) # (10000,) # Call the saving rate function with test value for - SavingRate = savingRateFunc(LifeCyclePop, LifeCyclePop.history['mNrmNow'][t] ) + SavingRate = savingRateFunc(LifeCyclePop, LifeCyclePop.history['mNrm'][t] ) SavingRate_list.append(SavingRate) @@ -141,7 +141,7 @@ def savingRateFunc(SomeType, m): matrix_list = [0 for number in range(7)] matrix_list[0] = t matrix_list[1] = LifeCyclePop.history['aNrmNow'][t] - matrix_list[2] = LifeCyclePop.history['cNrmNow'][t] + matrix_list[2] = LifeCyclePop.history['cNrm'][t] matrix_list[3] = LifeCyclePop.history['TranShkNow'][t] matrix_list[4] = LifeCyclePop.history['TranShkNow'][t-1] matrix_list[5] = aLvlGroNow @@ -155,7 +155,7 @@ def savingRateFunc(SomeType, m): # %% {"code_folding": [0]} # Construct the level of assets A from a*p where a is the ratio to permanent income p -LifeCyclePop.history['aLvlNow'] = LifeCyclePop.history['aNrmNow']*LifeCyclePop.history['pLvlNow'] +LifeCyclePop.history['aLvlNow'] = LifeCyclePop.history['aNrmNow']*LifeCyclePop.history['pLvl'] aGro41=LifeCyclePop.history['aLvlNow'][41]/LifeCyclePop.history['aLvlNow'][40] aGro41NoU=aGro41[aGro41[:]>0.2] # Throw out extreme outliers From c260d40404c51c25348af5568b944853ab75d22e Mon Sep 17 00:00:00 2001 From: sb Date: Sun, 7 Feb 2021 17:53:41 -0500 Subject: [PATCH 4/4] changelog for #920 --- Documentation/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/CHANGELOG.md b/Documentation/CHANGELOG.md index 3b83b45d7..1ec956ebd 100644 --- a/Documentation/CHANGELOG.md +++ b/Documentation/CHANGELOG.md @@ -27,6 +27,8 @@ interpolation for problems with CRRA utility. See [#888](https://github.com/econ * Fix the return fields of `dcegm/calcCrossPoints`[#909](https://github.com/econ-ark/HARK/pull/909). * Corrects location of constructor documentation to class string for Sphinx rendering [#908](https://github.com/econ-ark/HARK/pull/908) * Adds a module for producing life-cycle profiles of income shock variances from [Sabelhaus and Song (2010)](https://www.sciencedirect.com/science/article/abs/pii/S0304393210000358). See [#921](https://github.com/econ-ark/HARK/pull/921). +* remove "Now" from model variable names [#936](https://github.com/econ-ark/HARK/pull/936) + #### Minor Changes * Move AgentType constructor parameters docs to class docstring so it is rendered by Sphinx.