MacroModelling.jl

Author: Thore Kockerols (@thorek1)

MacroModelling.jl is a package for developing and solving dynamic stochastic general equilibrium (DSGE) models. The package provides functions for creating, calibrating, simulating and estimating discrete-time DSGE models. These kind of models are typically used to describe the behaviour of a macroeconomy and are particularly suited for counterfactual analysis (economic policy evaluation) and exploring/quantifying specific mechanisms (academic research). These models are difficult to work with because they consist of a nonlinear system of equations describing a stochastic control problem.

The goal of MacroModelling.jl is to reduce coding time and speed up model development.

As of now the package can:

  • parse a model written with user friendly syntax (variables are followed by time indices ...[2], [1], [0], [-1], [-2]..., or [x] for shocks)
  • (tries to) solve the model only knowing the model equations and parameter values (no steady state file needed)
  • calculate first, second, and third order perturbation solutions using (forward or reverse-mode) automatic differentiation (AD)
  • calculate (generalised) impulse response functions, simulate the model, or do conditional forecasts
  • calibrate parameters using (non stochastic) steady state relationships
  • match model moments
  • estimate the model on data (Kalman filter using first order perturbation)
  • differentiate (forward AD) the model solution (first order perturbation), Kalman filter loglikelihood (reverse-mode AD), model moments, steady state, with respect to the parameters

The package is not:

  • guaranteed to find the non stochastic steady state
  • the fastest package around if you already have a fast way to find the NSSS

The former has to do with the fact that solving systems of nonlinear equations is hard (an active area of research). Especially in cases where the values of the solution are far apart (have a high standard deviation - e.g. sol = [-46.324, .993457, 23523.3856]), the algorithms have a hard time finding a solution. The recommended way to tackle this is to set bounds in the @parameters part (e.g. r < 0.2), so that the initial points are closer to the final solution (think of steady state interest rates not being higher than 20% - meaning not being higher than 0.2 or 1.2 depending on the definition).

The latter has to do with the fact that julia code is fast once compiled, and that the package can spend more time finding the non stochastic steady state. This means that it takes more time from executing the code to define the model and parameters for the first time to seeing the first plots than with most other packages. But, once the functions are compiled and the non stochastic steady state has been found the user can benefit from the object oriented nature of the package and generate outputs or change parameters very fast.

The package contains the following models in the models folder:

Comparison with other packages

MacroModelling.jldynareRISENBTOOLBOXIRISDSGE.jlStateSpaceEcon.jlSolveDSGE.jldolo.pyDifferentiableStateSpaceModels.jlgEconGDSGETaylor Projection
Host languagejuliaMATLABMATLABMATLABMATLABjuliajuliajuliaPythonjuliaRMATLABMATLAB
Non stochastic steady state solversymbolic or numerical solver of independent blocks; symbolic removal of variables redundant in steady state; inclusion of calibration equations in problemnumerical solver of independent blocks or user-supplied values/functionsnumerical solver of independent blocks or user-supplied values/functionsuser-supplied steady state file or numerical solvernumerical solver of independent blocks or user-supplied values/functionsnumerical solver of independent blocks or user-supplied values/functionsnumerical solvernumerical solver or user supplied values/equationsnumerical solver or user supplied values/equationsnumerical solver; inclusion of calibration equations in problem
Automatic declaration of variables and parametersyes
Derivatives (Automatic Differentiation) wrt parametersyesyes - for all 1st, 2nd order perturbation solution related output if user supplied steady state equations
Perturbation solution order1, 2, 3k1 to 511111, 2, 31, 2, 31, 211 to 5
Automatic derivation of first order conditionsyes
Handles occasionally binding constraintsyesyesyesyesyesyes
Global solutionyesyesyes
Estimationyesyesyesyesyesyesyes
Balanced growth pathyesyesyesyesyesyes
Model inputmacro (julia)text filetext filetext filetext filetext filemodule (julia)text filetext filemacro (julia)text filetext filetext file
Timing conventionend-of-periodend-of-periodend-of-periodend-of-periodend-of-periodend-of-periodstart-of-periodend-of-periodstart-of-periodend-of-periodstart-of-periodstart-of-period

Bibliography

Andreasen, M. M., Fernández-Villaverde, J., and Rubio-Ramírez, J. F. (2018), "The pruned state-space system for non-linear DSGE models: Theory and empirical applications.", The Review of Economic Studies, 85.1, p. 1-49.

Durbin, J, and Koopman, S. J. (2012), "Time Series Analysis by State Space Methods, 2nd edn", Oxford University Press.

Levintal, O., (2017), "Fifth-Order Perturbation Solution to DSGE models", Journal of Economic Dynamics and Control, 80, pp. 1–-16.

Villemot, S., (2011), "Solving rational expectations models at first order: what Dynare does", Dynare Working Papers 2, CEPREMAP.