Releases: econ-ark/HARK
Releases · econ-ark/HARK
0.15.1
0.15.0
Note: Due to major changes on this release, you may need to adjust how AgentTypes are instantiated in your projects using HARK. If you are manually constructing "complicated" objects like MrkvArray, they should be assigned to your instances after initialization, not passed as part of the parameter dictionary. See also the new constructor methodology for how to pass parameters for such constructed inputs.
This release drops support for Python 3.8 and 3.9, consistent with SPEC 0, and adds support for Python 3.11 and 3.12. We expect that all HARK features still work with the older versions, but they are no longer part of our testing regimen.
Major Changes
- Drop official support for Python 3.8 and 3.9, add support for 3.11 and 3.12. #1415
- Replace object-oriented solvers with single function versions. #1394
- Object-oriented solver code has been moved to /HARK/ConsumptionSaving/LegacyOOsolvers.py, for legacy support of downstream projects.
- AgentTypeMonteCarloSimulator now requires model shock, parameter, and dynamics information to be organized into 'blocks'. The DBlock object is introduced. #1411
- RBlock object allows for recursive composition of DBlocks in models, as demonstrated by the AgentTypeMonteCarloSimulator #1417
- Transtion, reward, state-rulle value function, decision value function, and arrival value function added to DBlock #1417
- All methods that construct inputs for solvers are now functions that are specified in the dictionary attribute
constructors
. #1410 - Such constructed inputs can use alternate parameterizations / formats by changing the
constructor
function and providing its arguments inparameters
. - Move
HARK.datasets
toHARK.Calibration
for better organization of data and calibration tools. #1430
Minor Changes
- Add option to pass pre-built grid to
LinearFast
. #1388 - Moves calculation of stable points out of ConsIndShock solver, into method called by post_solve #1349
- Adds cubic spline interpolation and value function construction to "warm glow bequest" models.
- Fixes cubic spline interpolation for ConsMedShockModel.
- Moves computation of "stable points" from inside of ConsIndShock solver to a post-solution method. #1349
- Corrects calculation of "human wealth" under risky returns, providing correct limiting linear consumption function. #1403
- Removed 'parameters' from new block definitions; these are now 'calibrations' provided separately.
- Create functions for well-known and repeated calculations in single-function solvers. 1395
- Re-work WealthPortfolioSolver to use approximate EGM method #1404
- Default parameter dictionaries for AgentType subclasses have been "flattened": all parameters appear in one place for each model, rather than inheriting from parent models' dictionaries. The only exception is submodels within a file when only 1 or 2 parameters are added or changed. #1425
- Fix minor bug in
HARK.distribution.Bernoulli
to allow conversion intoDiscreteDistributionLabeled
. #1432
0.14.1
0.14.0
Major Changes
- Adds
HARK.core.AgentPopulation
class to represent a population of agents with ex-ante heterogeneous parametrizations as distributions. #1237 - Adds
HARK.core.Parameters
class to represent a collection of time varying and time invariant parameters in a model. #1240 - Adds
HARK.simulation.monte_carlo
module for generic Monte Carlo simulation functions using Python model configurations. 1296
Minor Changes
- Adds option
sim_common_Rrisky
to control whether risky-asset models draw common or idiosyncratic returns in simulation. #1250,#1253 - Addresses #1255. Makes age-varying stochastic returns possible and draws from their discretized version. #1262
- Fixes bug in the metric that compares dictionaries with the same keys. #1260
- Fixes bug in the calc_jacobian method. #1342
- Fixes bug that prevented risky-asset consumer types from working with time-varying interest rates
Rfree
. 1343 - Overhauls and expands condition checking for the ConsIndShock model #1294. Condition values and a description of their interpretation is stored in the bilt dictionary of IndShockConsumerType.
- Creates a
models/
directory with Python model configurations for perfect foresight and Fisher 2-period models. 1347 - Fixes bug in AgentType simulations where 'who_dies' for period t was being recorded in period t-1 in the history Carlo simulation functions using Python model configurations.1296
- Removes unused
simulation.py
.1296 - Fixes bug that default seed was being used in the initializing of income shock distributions. 1380
0.13.0
Major Changes
- Updates the DCEGM tools to address the flaws identified in issue #1062. PR: 1100.
- Updates
IndexDstn
, introducing the option to use an existing RNG instead of creating a new one, and creating and storing all the conditional distributions at initialization. 1104 make_shock_history
andread_shocks == True
now store and use the random draws that determine newborn's initial states #1101.FrameModel
andFrameSet
classes introduced for more modular construction of framed models.FrameAgentType
dedicated to simulation. #1117- General control transitions based on decision rules in
FrameAgentType
. #1117 - Adds
distr_of_function
tool to calculate the distribution of a function of a discrete random variable. #1144 - Changes the
DiscreteDistribution
class to allow for arbitrary array-valued random variables. #1146 - Adds
IndShockRiskyAssetConsumerType
as agent which can invest savings all in safe asset, all in risky asset, a fixed share in risky asset, or optimize its portfolio. #1107 - Updates all HARK models to allow for age-varying interest rates. #1150
- Adds
DiscreteDistribution.expected
method which expects vectorized functions and is faster thanHARK.distribution.calc_expectation
. #1156 - Adds
DiscreteDistributionXRA
class which extendsDiscreteDistribution
to allow for underlying data to be stored in axarray.DataArray
object. #1156 - Adds keyword argument
labels
toexpected()
when usingDiscreteDistributionXRA
to allow for expressive functions that use labeled xarrays. #1156 - Adds a wrapper for
interpolation.py
for fast multilinear interpolation. #1151 - Adds support for the calculation of dreivatives in the
interpolation.py
wrappers. #1157 - Adds class
DecayInterp
toeconforgeinterp.py
. It implements interpolators that "decay" to some limiting function when extrapolating. #1165 - Add methods to non stochastically simulate an economy by computing transition matrices. Functions to compute transition matrices and ergodic distribution have been added #1155.
- Fixes a bug that causes
t_age
andt_cycle
to get out of sync when reading pre-computed mortality. #1181 - Adds Methods to calculate Heterogenous Agent Jacobian matrices. #1185
- Enhances
combine_indep_dstns
to work with labeled distributions (DiscreteDistributionLabeled
). #1191 - Updates the
numpy
random generator fromRandomState
toGenerator
. #1193 - Turns the income and income+return distributions into
DiscreteDistributionLabeled
objects. #1189 - Creates
UtilityFuncCRRA
which is an object oriented utility function with a coefficient of constant relative risk aversion and includes derivatives and inverses. Also createsUtilityFuncCobbDouglas
,UtilityFuncCobbDouglasCRRA
, andUtilityFuncConstElastSubs
. #1168 - Reorganizes
HARK.distribution
. All distributions now inherit all features fromscipy.stats
. NewContinuousFrozenDistribution
andDiscreteFrozenDistribution
to usescipy.stats
distributions not yet implemented in HARK. NewDistribution.discretize(N, method = "***")
replacesDistribution.approx(N)
. NewDiscreteDistribution.limit
attribute describes continuous origin and discretization method. #1197. - Creates new class of labeled models under
ConsLabeledModel
that use xarray for more expressive modeling of underlying mathematical and economics variables. #1177
Minor Changes
- Updates the lognormal-income-process constructor from
ConsIndShockModel.py
to useIndexDistribution
. #1024, #1115 - Allows for age-varying unemployment probabilities and replacement incomes with the lognormal income process constructor. #1112
- Option to have newborn IndShockConsumerType agents with a transitory income shock in the first period. Default is false, meaning they only have a permanent income shock in period 1 and permanent AND transitory in the following ones. #1126
- Adds
benchmark
utility to profile the performance ofHARK
solvers. #1131 - Fixes scaling bug in Normal equiprobable approximation method. 1139
- Removes the extra-dimension that was returned by
calc_expectations
in some instances. #1149 - Adds
HARK.distribution.expected
alias forDiscreteDistribution.expected
. #1156 - Renames attributes in
DiscreteDistribution
:X
toatoms
andpmf
topmv
. #1164, #1051, #1159. - Remove or replace automated tests that depend on brittle simulation results. #1148
- Updates asset grid constructor from
ConsIndShockModel.py
to allow for linearly-spaced grids whenaXtraNestFac == -1
. #1172 - Renames
DiscreteDistributionXRA
toDiscreteDistributionLabeled
and updates methods #1170 - Renames
HARK.numba
toHARK.numba_tools
#1183 - Adds the RNG seed as a property of
DiscreteDistributionLabeled
#1184 - Updates the
approx
method ofHARK.distributions.Uniform
to include the endpoints of the distribution with infinitesimally small (zero) probability mass. #1180 - Refactors tests to incorporate custom precision
HARK_PRECISION = 4
. #1193 - Cast
DiscreteDistribution.pmv
attribute as anp.ndarray
. #1199 - Update structure of dynamic interest rate. #1221
0.12.0
Major Changes
- FrameAgentType for modular definitions of agents #865 #1064
- Frame relationships with backward and forward references, with plotting example #1071
- PortfolioConsumerFrameType, a port of PortfolioConsumerType to use Frames #865
- Input parameters for cyclical models now indexed by t #1039
- A IndexDistribution class for representing time-indexed probability distributions #1018.
- Adds new consumption-savings-portfolio model
RiskyContrib
, which represents an agent who can save in risky and risk-free assets but faces
frictions to moving funds between them. To circumvent these frictions, he has access to an income-deduction scheme to accumulate risky assets.
PR: #832. See this forthcoming REMARK for the model's details. - 'cycles' agent property moved from constructor argument to parameter #1031
- Uses iterated expectations to speed-up the solution of
RiskyContrib
when income and returns are independent #1058. ConsPortfolioSolver
class for solving portfolio choice model replacessolveConsPortfolio
method #1047ConsPortfolioDiscreteSolver
class for solving portfolio choice model when allowed share is on a discrete grid #1047ConsPortfolioJointDistSolver
class for solving portfolio chioce model when the income and risky return shocks are not independent #1047
Minor Changes
- Using Lognormal.from_mean_std in the forward simulation of the RiskyAsset model #1019
- Fix bug in DCEGM's primary kink finder due to numpy no longer accepting NaN in integer arrays #990.
- Add a general class for consumers who can save using a risky asset #1012.
- Add Boolean attribute 'PerfMITShk' to consumption models. When true, allows perfect foresight MIT shocks to be simulated. #1013.
- Track and update start-of-period (pre-income) risky and risk-free assets as states in the
RiskyContrib
model 1046. - distribute_params now uses assign_params to create consistent output #1044
- The function that computes end-of-period derivatives of the value function was moved to the inside of
ConsRiskyContrib
's solver #1057 - Use
np.fill(np.nan)
to clear or initialize the arrays that store simulations. #1068 - Add Boolean attribute 'neutral_measure' to consumption models. When true, simulations are more precise by allowing permanent shocks to be drawn from a neutral measure (see Harmenberg 2021). #1069
- Fix mathematical limits of model example in
example_ConsPortfolioModel.ipynb
#1047 - Update
ConsGenIncProcessModel.py
to usecalc_expectation
method #1072 - Fix bug in
calc_normal_style_pars_from_lognormal_pars
due to math error. #1076 - Fix bug in
distribute_params
so thatAgentCount
parameter is updated. #1089
0.11.0
0.11.0
Release Data: March 4, 2021
Major Changes
- Converts non-mathematical code to PEP8 compliant form #953
- Adds a constructor for LogNormal distributions from mean and standard deviation #891
- Uses new LogNormal constructor in ConsPortfolioModel #891
- calcExpectations method for taking the expectation of a distribution over a function [#884](https://github.com/econ-ark/HARK/pull/884/] (#897)[https://github.com//pull/897/)
- Centralizes the definition of value, marginal value, and marginal marginal value functions that use inverse-space
interpolation for problems with CRRA utility. See #888. - MarkovProcess class used in ConsMarkovModel, ConsRepAgentModel, ConsAggShockModel #902 #929
- replace HARKobject base class with MetricObject and Model classes #903
- Add repr and eq methods to Model class #903
- Adds SSA life tables and methods to extract survival probabilities from them #986.
- Adds the U.S. CPI research series and tools to extract inflation adjustments from it #930.
- Adds a module for extracting initial distributions of permanent income (
pLvl
) and normalized assets (aNrm
) from the SCF #932. - Fix the return fields of
dcegm/calcCrossPoints
#909. - Corrects location of constructor documentation to class string for Sphinx rendering #908
- Adds a module with tools for parsing and using various income calibrations from the literature. It includes the option of using life-cycle profiles of income shock variances from Sabelhaus and Song (2010). See #921, #941, #980.
- remove "Now" from model variable names #936
- remove Model.call; use Model init in Market and AgentType init to standardize on parameters dictionary #947
- Moves state MrkvNow to shocks['Mrkv'] in AggShockMarkov and KrusellSmith models #935
- Replaces
ConsIndShock
'sinit_lifecycle
with an actual life-cycle calibration #951.
Minor Changes
- Move AgentType constructor parameters docs to class docstring so it is rendered by Sphinx.
- Remove uses of deprecated time.clock #887
- Change internal representation of parameters to Distributions to ndarray type
- Rename IncomeDstn to IncShkDstn
- AgentType simulate() method now returns history. #916
- Rename DiscreteDistribution.drawDiscrete() to draw()
- Update documentation and warnings around IncShkDstn #955
- Adds csv files to
MANIFEST.in
. 957
0.10.8
Release Date: Nov. 05 2020
Major Changes
- Namespace variables for the Market class #765
- We now have a Numba based implementation of PerfForesightConsumerType model available as PerfForesightConsumerTypeFast #774
- Namespace for exogenous shocks #803
- Namespace for controls #855
- State and poststate attributes replaced with state_now and state_prev namespaces #836
Minor Changes
- Use shock_history namespace for pre-evaluated shock history #812
- Fixes seed of PrefShkDstn on initialization and add tests for simulation output
- Reformat code style using black
0.10.7
0.10.7
Release Date: 08-08-2020
Major Changes
- Add a custom KrusellSmith Model #762
- Simulations now uses a dictionary
history
to store state history instead of_hist
attributes #674 - Removed time flipping and time flow state, "forward/backward time" through data access #570
- Simulation draw methods are now individual distributions like
Uniform
,Lognormal
,Weibull
#624
Minor Changes
- unpackcFunc is deprecated, use unpack(parameter) to unpack a parameter after solving the model #784
- Remove deprecated Solution Class, use HARKObject across the codebase #772
- Add option to find crossing points in the envelope step of DCEGM algorithm #758
- Fix reset bug in the behaviour of AgentType.resetRNG(), implemented individual resetRNG methods for AgentTypes #757
- Seeds are set at initialisation of a distribution object rather than draw method #691 #750, #729
- Deal with portfolio share of 'bad' assets #749
- Fix bug in make_figs utilities function #755
- Fix typo bug in Perfect Foresight Model solver #743
- Add initial support for logging in ConsIndShockModel #714
- Speed up simulation in AggShockMarkovConsumerType #702
- Fix logic bug in DiscreteDistribution draw method #715
- Implemented distributeParams to distributes heterogeneous values of one parameter to a set of agents #692
- NelderMead is now part of estimation #693
- Fix typo bug in parallel #682
- Fix DiscreteDstn to make it work with multivariate distributions #646
- BayerLuetticke removed from HARK, is now a REMARK #603
- cstwMPC removed from HARK, is now a REMARK #666
- SolvingMicroDSOPs removed from HARK, is now a REMARK #651
- constructLogNormalIncomeProcess is now a method of IndShockConsumerType #661
- Discretize continuous distributions #657
- Data used in cstwMPC is now in HARK.datasets #622
- Refactor checkConditions by adding a checkCondition method instead of writing custom checks for each condition #568
- Examples update #768, #759, #756, #727, #698, #697, #561, #654, #633, #775