This page documents the changes between Dynare versions (including the unstable one). For previous versions of Dynare, please read the dedicated frozen page on the DynareWiki.
Dynare 4.7 (unstable)

Macroprocessor: variables can be defined without a value (they are assigned integer 1) (preprocessor#43)

New option
mh_tune_guess
for setting the initial value formh_tune_jscale
(!1717 (closed))
Dynare 4.6

Stochastic simulations

The perturbation method is now available at an arbitrary approximation order. In other words, the
order
option ofstoch_simul
accepts an arbitrary positive integer (of course, up to some modelspecific computational limit). (#217 (closed)) 
New option
filtered_theoretical_moments_grid
ofstoch_simul
, that supersedeshp_ngrid
.


Estimation

Nonlinear estimation is now also available at an arbitrary approximation order. In other words, the
order
option ofestimation
accepts an arbitrary positive integer (of course, up to some modelspecific computational limit). (#1673 (closed)) 
Various improvements to particle filters.

It is now possible to estimate models under optimal policy (see below).

Variance decomposition of observables now accounts for measurement error. (#1486 (closed))

New option
mh_tune_jscale
ofestimation
command for tuning the scale parameter of the proposal distribution of the Random Walk Metropolis Hastings. 
Added debugging info when parameters take a
NaN
orInf
value. (!1538 (closed)) 
Option
mode_compute=1
is now available under Octave.


Perfect foresight and extended path

A significant speed improvement should be noted on large models (when neither
bytecode
norblock
option is used). The stacked problem is now constructed using a dedicated machinecompiled library that greatly speeds up the process (in particular, the time spent in that step can become negligible when theuse_dll
option is used). 
New options
print
andnoprint
ofperfect_foresight_solver
command. (#1647 (closed)) 
Option
stack_solve_algo=2
is now available under Octave.


Steady state
 Option
solve_algo=7
is now available under Octave.
 Option

Optimal policy

The
ramsey_policy
command is now deprecated. It is superseded by successive calls toramsey_model
,stoch_simul
, andevaluate_planner_objective
(in this order). (#1678 (closed)) 
It is now possible to estimate a model under optimal policy (either Ramsey or discretionary) by running the
estimation
command after eitherramsey_model
ordiscretionary_policy
. It is however not yet possible to estimate parameters that appear in the discount factor of the social planner. (#1173) 
Discretionary policy returns a more informative error message when the objective has nonzero derivatives with respect to some variables. (!1468 (merged))


Identification (!1648 (merged), !1689 (merged), !1683 (merged), !1711 (merged))

Added minimal system identification check of Komunjer and Ng (2011).

Added spectrum identification check of Qu and Tkachenko (2012).

Identification is now also available for approximation orders 2 and 3 with either analytical or numerical parameter derivatives. The relevant moments and spectrum are computed from the pruned state space system as in Mutschler (2015).

All tests (moments, spectrum, minimal system, strength) can be turned off.

More numerical options can be changed by the user.

Improved printing and storage (same folder) of results.


Sensitivity analysis

New
diffuse_filter
option to thedynare_sensitivity
command. (!1562 (merged)) 
Arbitrary expressions can now be passed for the interval boundaries in
irf_calibration
andmoment_calibration
.⚠ This breaks the previous syntax, requiring that the lower/upper bounds be separated by commas. (preprocessor#12 (closed))


Forecasting and smoothing

In
conditional_forecast_paths
, it is no longer required that all constrained paths be of the same length. There may now be a different number of controlled variables at each period. In that case, the order of declaration of endogenous controlled variables and ofcontrolled_varexo
matters: if the second endogenous variable is controlled for less periods than the first one, the secondcontrolled_varexo
isn't set for the last periods. (#699 (closed)) 
New option
parameter_set
to thecalib_smoother
command (#1477 (closed)) 
⚠ The results ofconditional_forecast
command is now saved inoo_
(used to be in a file; see #1672 (closed))


Shock decomposition

Added
fast_realtime
option to real time shock decomposition (deactivated by default, runs the smoother only twice: once for the last insample and once for the last outofsample data point) (!1563 (closed)) and (!1552 (closed)) 
New
diff
,flip
,max_nrows
,plot_init_date
andplot_end_date
options toplot_shock_decomposition
(#1649 (closed), !1655 (merged), 74e7c12d) 
New
initial_decomposition_decomposition
command, for computing and plotting the decomposition of the effect of smoothed initial conditions of state variables (#1586 (closed)) 
New
squeeze_shock_decomposition
command, for removing decompositions of variables that are not of interest (!1655 (merged)) 
New
with_epilogue
option (common toshock_decomposition
,realtime_shock_decomposition
andinitial_condition_decomposition
) (!1688 (merged)) 
New
init2shocks
block to attribute initial conditions to shocks (#1650 (closed))


Macro processor

New object types: real (supersedes integers), boolean (distinct from integers), tuple, userdefined function.

New operators: various mathematical functions, set operations on arrays (union, intersection, difference, cartesian power and product), type checking and conversion.

Added support for comprehensions (e.g. the set containing the squares of all even numbers between 1 and 5 can be constructed with
[ i^2 for i in 1:5 when mod(i,2) == 0]
). 
Userdefined functions can be declared using the
@#define
operator (e.g.@#define f(x) = 2*x^2+3*x+5
). 
@#elseif
clauses are now supported in conditional statements. 
@#for
loops can iterate over several variables at the same time (e.g.@#for (i,j) in X
, whereX
is an array containing tuples of size 2). 
Added the possibility to exclude some elements when iterating over
@#for
loops (e.g.@#for i in 1:5 when mod(i,2) == 0
iterates over all even numbers between 1 and 5). 
A
defined()
function allows testing whether macro variables have been defined. 
Empty arrays (with the
[]
syntax) are now possible (#707 (closed)). 
Arrays of arrays are now supported.

New macro directives
@#echomacrovars
and@#echomacrovars(save)
for displaying or saving the values of all macrovariables. (#1564 (closed)) 
Inline comments are now supported.

⚠ All division operations are now done with doubles (as opposed to integers). To achieve the old functionality, use the newfloor
operator. 
⚠ Colon syntax used to require braces around it to create an array (e.g.[1:3]
would create[1,2,3]
). Now this is not necessary (1:3
creates[1,2,3]
while[1:3]
would create[[1,2,3]]
). 
⚠ Previously, printing a boolean would print1
or0
. Now, it printstrue
orfalse
. To achieve the old functionality, you must cast it to a real, e.g.@{(real)(1!=0)}
.


LaTeX output

New command
write_latex_steady_state_model
. (#1496 (closed)) 
New option
planner_discount_latex_name
oframsey_model
anddiscretionary_policy
. (#1686 (closed)) 
New command
model_local_variable
command for assigning a LaTeX name to modellocal variables. (#563 (closed)) 
The
write_latex_static_model
andwrite_latex_original_model
commands now support thewrite_equation_tags
option. (#1431 (closed))


Compilation of the model (
use_dll
option) made easier and faster
Under Windows, it is no longer necessary to manually install the compiler, since the latter is now shipped by the Dynare installer.

Under macOS, the Dynare installer now automatically downloads and installs the compiler.

It is no longer necessary to configure MATLAB to let it know where the compiler is, since the compilation is now done by the preprocessor.

The compilation phase is now faster on large models (this has been achieved by disabling a few timeconsuming and notsouseful optimization passes otherwise done by the compiler).

New
compilation_setup
block for specifying a custom compiler or custom compilation flags.


Model, variables and parameters declaration

New syntax to declare model variables and parameters onthefly in the
model
block. To do this, simply follow the symbol name with a vertical line (
, pipe character) and either ane
, anx
, or ap
. For example, to declare a parameter namedalpha
in the model block, you could writealphap
directly in an equation where it appears. Similarly, to declare an endogenous variablec
in the model block you could writece
. (#1386 (closed)) 
New syntax to declare model variable and parameters onthefly in equation tags. In the tag, simply state the type of variable to be declared (
endogenous
,exogenous
, orparameter
followed by an equal sign and the variable name in single quotes. Hence, to declare a variablec
as endogenous in an equation tag, you can type[endogenous='c']
. (see 01d5a130) 
New
epilogue
block for computing output variables of interest that may not be necessarily defined in the model (e.g. various kinds of real/nominal shares or relative prices, or annualized variables out of a quarterly model).


Commandline options

Added the possibility to declare Dynare commandline options in the
.mod
file. 
New option
nopreprocessoroutput
to disable printing of messages from the preprocessor. (#1390 (closed)) 
It is now possible to assign an arbitrary macroexpression to a macrovariable defined on the commandline, using the
D
syntax. (#1696 (closed)) 
New option
linemacro
to revert to the old format of the macroprocessed file (see below).


Preprocessor outputs and inputs

Added JSON output to the preprocessor. A representation of the model file and the whole content of the
.mod
file is saved in.json
files. These JSON files can be easily parsed from any language (C++, Fortran, Python, Julia, MATLAB, Octave…). This new feature opens the possibility to develop alternative backends for the Dynare language. 
⚠ Most files generated by the preprocessor are now grouped under two subdirectories. Assuming your file isFILENAME.mod
, then Mfiles and MEXfiles will be under+FILENAME/
, while other output (JSON, LaTeX, source code for the MEX files) will be underFILENAME/
. 
The macrogenerated output is now more readable (no more line numbers and empty lines). The old behaviour can be restored using the
linemacro
option (see above). 
Ability to call the preprocessor by passing the
.mod
file as a string argument from the macOS or GNU/Linux command line. (#1509 (closed))


dseries classes

New functionalities and efficiency improvements.

Complete rewrite using the new
classdef
syntax and exploiting in place modifications when possible. 
Integration of the
dates
classes withindseries
.


Reporting classes

Automatically create titlepage with page numbers/page titles.

Allow for the removal of headers and footers from a given page.

Allow user to set page number.

Split up report output. Create new files for the preamble, the body of the report, and each individual page of the report.

The classes have been converted to the new
classdef
syntax.


Misc

External functions can be located in MATLAB/Octave namespaces. (#1639 (closed))

Improvements to the balanced growth path test that is performed after Dynare has detrended the model (given the trends on variables declared by the user): the default tolerance has been raised, and a different value can be set with new option
balanced_growth_test_tol
to themodel
block; as a consequence, failing the test is now an error again. (#1389 (closed)) 
New collection of MATLAB/Octave utilities to retrieve and alter objects:
get_irf
,get_mean
,get_shock_stderr_by_name
,get_smooth
,get_update
,set_shock_stderr_value
. (!1686 (merged)) 
⚠ Previously, when some MEX files were missing, Dynare would automatically fall back to slower Mfile functional alternative; this is no longer the case. It is however still possible to manually add these alternatives in the MATLAB/Octave path (they are located undermatlab/missing/mex
; this only applies to themjdgges
,gensylv
,A_times_B_kronecker_C
,sparse_hessian_times_B_kronecker_C
andlocal_state_space_iteration_2
DLLs).


References

Komunjer, I. and S. Ng (2011), “Dynamic Identification of Dynamic Stochastic General Equilibrium Models,” Econometrica, 79(6), 1995–2032

Qu, Z. and D. Tkachenko (2012), “Identification and frequency domain quasi‐maximum likelihood estimation of linearized dynamic stochastic general equilibrium models,” Quantitative Economics, 3(1), 95–132

Mutschler, W. (2015), “Identification of DSGE models—The effect of higherorder approximation and pruning,” Journal of Economic Dynamics and Control, 56, 34–54

Dynare 4.5

Ramsey policy

Added command
ramsey_model
that builds the expanded model with FOC conditions for the planner's problem but doesn't perform any computation. Useful to compute Ramsey policy in a perfect foresight model and for estimation, 
ramsey_policy
accepts multipliers in its variable list and displays results for them (#1355 (closed)).


Perfect foresight models

New commands
perfect_foresight_setup
(for preparing the simulation) andperfect_foresight_solver
(for computing it). The oldsimul
command still exist and is now an alias forperfect_foresight_setup
+perfect_foresight_solver
. It is no longer possible to manipulate by hand the contents ofoo_.exo_simul
when usingsimul
. People who want to do it must first callperfect_foresight_setup
, then do the manipulations, then callperfect_foresight_solver
, 
By default, the perfect foresight solver will try a homotopy method if it fails to converge at the first try. The old behavior can be restored with the
no_homotopy
option, 
New option
stack_solve_algo=7
that allows specifying asolve_algo
solver for solving the model, 
New option
solve_algo
that allows specifying a solver for solving the model when usingstack_solve_algo=7
, 
New option
lmmcp
that solves the model via a LevenbergMarquardt mixed complementarity problem (LMMCP) solver, 
New option
robust_lin_solve
that triggers the use of a robust linear solver for the defaultsolve_algo=4
, 
New options
tolf
andtolx
to control termination criteria of solvers, 
New option
endogenous_terminal_period
tosimul
, 
Added the possibility to set the initial condition of the (stochastic) extended path simulations with the histval block.


Optimal simple rules

Saves the optimal value of parameters to
oo_.osr.optim_params
, 
New block
osr_params_bounds
allows specifying bounds for the estimated parameters, 
New option
opt_algo
allows selecting different optimizers while the new optionoptim
allows specifying the optimizer options, 
The
osr
command now saves the names, bounds, and indices for the estimated parameters as well as the indices and weights of the variables entering the objective function intoM_.osr
.


Forecasts and Smoothing

The smoother and forecasts take uncertainty about trends and means into account (#679 (closed)),

Forecasts accounting for measurement error are now saved in fields of the form
HPDinf_ME
andHPDsup_ME
(#853 (closed)), 
New fields
oo_.Smoother.Trend
andoo_.Smoother.Constant
that save the trend and constant parts of the smoothed variables, 
new field
oo_.Smoother.TrendCoeffs
that stores the trend coefficients. 
Rolling window forecasts allowed in
estimation
command by passing a vector tofirst_obs
, 
The
calib_smoother
command now accepts theloglinear
,prefilter
,first_obs
andfilter_decomposition
options.


Estimation

New options:
logdata
,consider_all_endogenous
,consider_only_observed
,posterior_max_subsample_draws
(#567 (closed)),mh_conf_sig
(#598 (closed)),diffuse_kalman_tol
(!865 (closed)),dirname
(#910 (closed)),nodecomposition

load_mh_file
andmh_recover
now try to load chain's proposal density (!1230 (merged)), 
New option
load_results_after_load_mh
that allows loading some posterior results from a previous run if no new MCMC draws are added (!1352 (merged)), 
New option
posterior_nograph
that suppresses the generation of graphs associated with Bayesian IRFs, posterior smoothed objects, and posterior forecasts, 
Saves the posterior density at the mode in
oo_.posterior.optimization.log_density
, 
The
filter_covariance
option now also works with posterior sampling like MetropolisHastings, 
New option
no_posterior_kernel_density
to suppress computation of kernel density of posterior objects, 
Recursive estimation and forecasting now provides the individual
oo_
structures for each sample inoo_recursive_
, 
The
trace_plot
command can now plot the posterior density, 
New command
generate_trace_plots
allows generating all trace plots for one chain (!1239 (closed)), 
New commands
prior_function
andposterior_function
that execute a userdefined function on parameter draws from the prior/posterior distribution (!871 (merged)), 
New option
huge_number
for replacement of infinite bounds with large number duringmode_compute
, 
New option
posterior_sampling_method
allows selecting the new posterior sampling options:tailored_random_block_metropolis_hastings
(Tailored randomized block (TaRB) MetropolisHastings),slice
(Slice sampler),independent_metropolis_hastings
(Independent MetropolisHastings), 
New option
posterior_sampler_options
that allow controlling the options of theposterior_sampling_method
; itsscale_file
option pair allows loading the_mh_scale.mat
file storing the tuned scale factor from a previous run ofmode_compute=6
(!1223 (closed)), 
New option
raftery_lewis_diagnostics
that computes Raftery/Lewis (1992) convergence diagnostics, 
New option
fast_kalman_filter
that provides fast Kalman filter using Chandrasekhar recursions as described in Ed Herbst (2015), 
The
dsge_var
option now saves results at the posterior mode intooo_.dsge_var
, 
New option
smoothed_state_uncertainty
to provide the uncertainty estimate for the smoothed state estimate from the Kalman smoother (!1324 (merged)), 
New prior density: generalized Weibull distribution,

Option
mh_recover
now allows continuing a crashed chain at the last save mhfile, 
New option
nonlinear_filter_initialization
for theestimation
command. Controls the initial covariance matrix of the state variables in nonlinear filters. 
The
conditional_variance_decomposition
option now displays output and stores it as a LaTeXtable when theTeX
option is invoked, 
The
use_calibration
toestimated_params_init
now also works with ML, 
Improved initial estimation checks.


Steady state

The default solver for finding the steady state is now a trustregion solver (can be triggered explicitly with option
solve_algo=4
), 
New options
tolf
andtolx
to control termination criteria of solver, 
The debugging mode now provides the termination values in steady state finding.


Stochastic simulations

New options
nodecomposition
, 
New option
bandpass_filter
to compute bandpassfiltered theoretical and simulated moments, 
New option
one_sided_hp_filter
to compute onesided HPfiltered simulated moments, 
stoch_simul
displays a simulated variance decomposition when simulated moments are requested, 
stoch_simul
saves skewness and kurtosis into respective fields ofoo_
when simulated moments have been requested, 
stoch_simul
saves the unconditional variance decomposition inoo_.variance_decomposition
, 
New option
dr_display_tol
that governs omission of small terms in display of decision rules, 
The
stoch_simul
command now prints the displayed tables as LaTeX code when the newTeX
option is enabled, 
The
loglinear
option now works with lagged and leaded exogenous variables like news shocks, 
New option
spectral_density
that allows displaying the spectral density of (filtered) endogenous variables, 
New option
contemporaneous_correlation
that allows saving contemporaneous correlations in addition to the covariances.


Identification

New options
diffuse_filter
andprior_trunc
, 
The
identification
command now supports correlations via simulated moments,


Sensitivity analysis

New blocks
irf_calibration
andmoment_calibration
, 
Outputs LaTeX tables if the new
TeX
option is used, 
New option
relative_irf
toirf_calibration
block.


Conditional forecast
 Command
conditional_forecast
now takes into accounthistval
block if present.
 Command

Shock decomposition

New option
colormap
toshocks_decomposition
for controlling the color map used in the shocks decomposition graphs, 
shocks_decomposition
now accepts thenograph
option, 
New command
realtime_shock_decomposition
that for each periodT= [presample,...,nobs]
allows computing the:
realtime historical shock decomposition
Y(tT)
, i.e. without observing data in[T+1,...,nobs]

forecast shock decomposition
Y(T+kT)

realtime conditional shock decomposition
Y(T+kT+k)Y(T+kT)


New block
shock_groups
that allows grouping shocks for theshock_decomposition
andrealtime_shock_decomposition
commands, 
New command
plot_shock_decomposition
that allows plotting the results fromshock_decomposition
andrealtime_shock_decomposition
for different vintages and shock groupings.


Macroprocessor

Can now pass a macrovariable to the
@#include
macro directive, 
New preprocessor flag
I
, macro directive@#includepath
, and dynare config file block[paths]
to pass a search path to the macroprocessor to be used for file inclusion via@#include
.


Command line

New option
onlyclearglobals
(do not clear JIT compiled functions with recent versions of Matlab), 
New option
minimal_workspace
to use fewer variables in the current workspace, 
New option
params_derivs_order
allows limiting the order of the derivatives with respect to the parameters that are calculated by the preprocessor, 
New command line option
mingw
to support the MinGWw64 C/C++ Compiler from TDMGCC foruse_dll
(#1226 (closed)).


dates/dseries/reporting classes

New methods
abs
,cumprod
andchain
, 
New option
tableRowIndent
toaddTable
, 
Reporting system revamped and made more efficient, dependency on matlab2tikz has been dropped.


Optimization algorithms

mode_compute=2
Uses the simulated annealing as described by Corana et al. (1987), 
mode_compute=101
Uses SOLVEOPT as described by Kuntsevich and Kappel (1997), 
mode_compute=102
Usessimulannealbnd
from Matlab's Global Optimization Toolbox (if available), 
New option
silent_optimizer
to shut off output from mode computing/optimization, 
New options
verbosity
andSaveFiles
to control output and saving of files during mode computing/optimization.


LaTeX output

New command
write_latex_original_model
, 
New option
write_equation_tags
towrite_latex_dynamic_model
that allows printing the specified equation tags to the generate LaTeX code (#477 (closed)), 
New command
write_latex_parameter_table
that writes the names and values of model parameters to a LaTeX table, 
New command
write_latex_prior_table
that writes the descriptive statistics about the prior distribution to a LaTeX table, 
New command
collect_latex_files
that creates one compilable LaTeX file containing all TeXoutput.


Misc.

Provides 64bit preprocessor,

Introduces new path management to avoid conflicts with other toolboxes,

Full compatibility with Matlab 2014b's new graphic interface,

When using
model(linear)
, Dynare automatically checks whether the model is truly linear, 
usedll
: themsvc
option now supportsnormcdf
,acosh
,asinh
, andatanh
(#1259 (closed)), 
New parallel option
NumberOfThreadsPerJob
for Windows nodes that sets the number of threads assigned to each remote MATLAB/Octave run (!1357 (merged)), 
Improved numerical performance of
schur_statespace_transformation
for very large models, 
The
all_values_required
option now also works withhistval
, 
Add missing
horizon
option toms_forecast
, 
BVAR now saves the marginal data density in
oo_.bvar.log_marginal_data_density
and stores prior and posterior information inoo_.bvar.prior
andoo_.bvar.posterior
.
