stoch_simul — computes the solution and simulates the model
stoch_simul
[(OPTION
[, OPTION
...])] [VARIABLE_NAME
...] ;
ar
= INTEGER
Order of autocorrelation coefficients to compute and to print. Default: 5
drop
= INTEGER
Number of points dropped at the beginning of simulation before computing the summary statistics. Default: 100
hp_filter
= INTEGER
Uses HP filter with λ = INTEGER
before computing moments. Note that this option is currently not available when computing empirical moments (see periods
option). Default: no filter
hp_ngrid
= INTEGER
Number of points in the grid for the discrete Inverse Fast Fourier Transform used in the HP filter computation. It may be necessary to increase it for highly autocorrelated processes. Default: 512
irf
= INTEGER
Number of periods on which to compute the IRFs. Setting irf
=0, suppresses the plotting of IRF's. Default: 40
relative_irf
Requests the computation of normalized IRFs in percentage of the standard error of each shock
linear
Indicates that the original model is linear (put it rather in the model command)
nocorr
Don't print the correlation matrix (printing them is the default)
nofunctions
Don't print the coefficients of the approximated solution (printing them is the default)
nomoments
Don't print moments of the endogenous variables (printing them is the default)
nograph
Doesn't do the graphs. Useful for loops
noprint
Don't print anything. Useful for loops
print
Print results (opposite of the above)
order = INTEGER
Order of Taylor approximation. Acceptable values are 1
, 2
and 3
. Note that for third order, k_order_solver
option is implied (in particular, you must specify the use_dll
option on the model block and you need a working compilation environment, see Section 1, “Software requirements” for more details), and only empirical moments are available (you must provide a value for periods
option). Default: 2
k_order_solver
Use a k-order solver, implemented in C++, instead of the default Dynare solver. When using this option, you must specify the use_dll
option on the model block, and you need a working compilation environment, i.e. a working mex
command (see Section 1, “Software requirements” for more details). Default: disabled for order 1 and 2, enabled otherwise
periods
= INTEGER
If different from zero, empirical moments will be computed instead of theoretical moments. The value of the option specifies the number of periods to use in the simulations. Values of the initval block, possibly recomputed by steady, will be used as starting point for the simulation. The simulated endogenous variables are made available to the user in a vector for each variable and in the global matrix oo_.endo_simul
. The variables in the oo_.endo_simul
matrix, in their order of declaration (as in M_.endo_names
) Default: 0
qz_criterium
= DOUBLE
Value used to split stable from unstable eigenvalues in reordering the Generalized Schur decomposition used for solving 1st order problems. Default: 1.000001
replic
= INTEGER
Number of simulated series used to compute the IRFs. Default: 1
if order
=1
, and 50
otherwise
simul_seed
= INTEGER
Specifies a seed for the random generator so as to obtain the same random sample at each run of the program. Otherwise a different sample is used for each run. Default: seed not specified
simul_algo
= INTEGER
Obsolete. Use only the default = 0
solve_algo
= INTEGER
See there for the possible values and their meaning
aim_solver
Use the Anderson-Moore Algorithm (AIM) to compute the decision rules, instead of using Dynare's default method based on a generalized Schur decomposition. This option is only valid for first order approximation. See AIM website for more details on the algorithm.
conditional_variance_decomposition
= INTEGER
See below
conditional_variance_decomposition
= [INTEGER1
:INTEGER2
]See below
conditional_variance_decomposition
= [INTEGER1
INTEGER2
...]Computes a conditional variance decomposition for the specified period(s). Conditional variances are given by var(yt+k|t). For period 1, the conditional variance decomposition provides the decomposition of the effects of shocks upon impact.
stoch_simul computes a Taylor approximation of the decision and transition functions for the model, impulse response functions and various descriptive statistics (moments, variance decomposition, correlation and autocorrelation coefficients). For correlated shocks, the variance decomposition is computed as in the VAR literature through a Cholesky decomposition of the covariance matrix of the exogenous variables. When the shocks are correlated, the variance decomposition depends upon the order of the variables in the varexo command.
The Taylor approximation is computed around the steady state. If you know how to compute the steady state for your model, you can provide a MATLAB®/Octave function doing the computation instead of using the nonlinear solver. The function should be called with the name of the .mod
file followed by _steadystate
. See fs2000a_steadystate.m
in examples/fs2000
directory.
The IRFs are computed as the difference between the trajectory of a variable following a shock at the beginning of period 1 and its steady state value.
Variance decomposition, correlation, autocorrelation are only displayed for variables with positive variance. Impulse response functions are only plotted for variables with response larger than 10-10.
Variance decomposition is computed relative to the sum of the contribution of each shock. Normally, this is of course equal to aggregate variance, but if a model generates very large variances, it may happen that, due to numerical error, the two differ by a significant amount. Dynare issues a warning if the maximum relative difference between the sum of the contribution of each shock and aggregate variance is larger than 0.01 %.
Currently, the IRFs are only plotted for 12 variables. Select the ones you want to see, if your model contains more than 12 endogenous variables.
Currently, the HP filter is only available when computing theoretical moments, not for for moments of simulated variables.
The covariance matrix of the shocks is specified either with the shocks command or with the Sigma_e command.
When a list of VARIABLE_NAME
is specified, results are displayed only for these variables.
For a stochastic model, Dynare will perform a transformation of the model so that there is only one lead and one lag on endogenous, and no lead/lag on exogenous.
This transformation is achieved by the creation of auxiliary variables, and corresponding equations. For example, if x(+2)
exists in the model, Dynare will create one auxiliary variable AUX_ENDO_LEAD = x(+1)
, and replace x(+2)
by AUX_ENDO_LEAD(+1)
.
A similar transformation is done for lags greater than 2 on endogenous (auxiliary variables will have a name beginning with AUX_ENDO_LAG
), and for exogenous with leads and lags (auxiliary variables will have a name beginning with AUX_EXO_LEAG
or AUX_EXO_LAG
respectively).
Once created, all auxiliary variables are included in the set of endogenous variables. The output of decision rules (see below) is such that auxiliary variable names are replaced by the original variables they refer to.
The number of endogenous variables before the creation of auxiliary variables is stored in M_.orig_endo_nbr
, and the number of endogenous variables after the creation of auxiliary variables is stored in M_.endo_nbr
.
The approximated solution of a model takes the form of a set of decision
rules or transition equations expressing the current value of the endogenous
variables of the model as function of the previous state of the model and
shocks oberved at the beginning of the period. The decision rules are stored
in the structure oo_.dr
which is described below.
Dynare distinguishes four types of endogenous variables:
Those that appear only at current and past period in the model, but not
at future period (i.e. at
t
and t-1
but not
t+1
). The number of such variables is equal to
oo_.dr.npred - oo_.dr.nboth
.
Those that appear only at current and future period in the model, but
not at past period (i.e. at
t
and t+1
but not
t-1
). The number of such variables is stored in
oo_.dr.nfwrd
.
Those that appear at current, past and future period in the model
(i.e. at t
,
t+1
and t-1
). The number of such
variables is stored in oo_.dr.nboth
.
Those that appear only at current, not past and future period in the
model (i.e. only at
t
, not at t+1
or
t-1
). The number of such variables is stored in
oo_.dr.nstatic
.
Note that all endogenous variables fall into one of these four categories,
since after the creation of auxiliary
variables, all endogenous have at most one lead and one lag. We
therefore have the following identity: oo_.dr.npred + oo_.dr.nfwrd +
oo_.dr.nstatic = M_.endo_nbr
.
Internally, Dynare uses two orderings of the endogenous variables: the order
of declaration (which is reflected in M_.endo_names
), and
an order based on the four types described above, which we will call the
DR-order ("DR" stands for decision rules). Most of the time, the declaration
order is used, but for elements of the decision rules, the DR-order is used.
The DR-order is the following: static variables appear first, then purely backward variables, then mixed variables, and finally purely forward variables. Inside each category, variables are arranged according to the declaration order.
Variable oo_.dr.order_var
maps DR-order to declaration
order, and variable oo_.dr.inv_order_var
contains the
inverse map. In other words, the k-th variable in the DR-order corresponds
to the endogenous variable numbered oo_.dr_order_var(k)
in
declaration order. Conversely, k-th declared variable is numbered
oo_.dr.inv_order_var(k)
in DR-order.
Finally, the state variables of the model are the purely backward variables
and the mixed variables. They are orderer in DR-order when they appear in
decision rules elements. There are oo_.dr.npred
such
variables.
The approximation has the form:
yt = ys + A yht-1 + B ut
where ys is the steady state value of y and yht=yt-ys.
The coefficients of the decision rules are stored as follows:
ys is stored in oo_.dr.ys
. The vector rows
correspond to all endogenous in the declaration order.
A is stored in oo_.dr.ghx
. The matrix rows
correspond to all endogenous in DR-order. The matrix columns correspond
to state variables in DR-order.
B is stored oo_.dr.ghu
. The matrix rows correspond
to all endogenous in DR-order. The matrix columns correspond to
exogenous variables in declaration order.
The approximation has the form:
yt = ys + 0.5 Δ2 + A yht-1 + B ut + 0.5 C (yht-1⊗yht-1) + 0.5 D (ut⊗ut) + E (yht-1⊗ut)
where ys is the steady state value of y, yht=yt-ys, and Δ2 is the shift effect of the variance of future shocks.
The coefficients of the decision rules are stored in the variables described for first order approximation, plus the following variables:
Δ2 is stored in
oo_.dr.ghs2
. The vector rows correspond to all
endogenous in DR-order.
C is stored in oo_.dr.ghxx
. The matrix rows
correspond to all endogenous in DR-order. The matrix columns correspond
to the Kronecker product of the vector of state variables in DR-order.
D is stored in oo_.dr.ghuu
. The matrix rows
correspond to all endogenous in DR-order. The matrix columns correspond
to the Kronecker product of exogenous variables in declaration order.
E is stored in oo_.dr.ghxu
. The matrix rows
correspond to all endogenous in DR-order. The matrix columns correspond
to the Kronecker product of the vector of state variables (in DR-order)
by the vector of exogenous variables (in declaration order).
The approximation has the form:
yt = ys + G0 + G1 zt + G2 (zt⊗ zt) + G3 (zt⊗ zt ⊗ zt)
where ys is the steady state value of y, and zt is a
vector consisting of the deviation from the steady state of the state
variables (in DR-order) at date t-1 followed by the exogenous variables at
date t (in declaration order). The vector zt is
therefore of size nz = oo_.dr.npred +
M_.exo_nbr
.
The coefficients of the decision rules are stored as follows:
ys is stored in oo_.dr.ys
. The vector rows
correspond to all endogenous in the declaration order.
G0 is stored in oo_.dr.g_0
. The
vector rows correspond to all endogenous in DR-order.
G1 is stored in oo_.dr.g_1
. The
matrix rows correspond to all endogenous in DR-order. The matrix
columns correspond to state variables in DR-order, followed by
exogenous in declaration order.
G2 is stored in
oo_.dr.g_2
. The matrix rows correspond to all
endogenous in DR-order. The matrix columns correspond to the Kronecker
product of state variables (in DR-order), followed by exogenous (in
declaration order). Note that the Kronecker product is stored in a
folded way, i.e. symmetric elements are
stored only once, which implies that the matrix has
nz(nz+1)/2 columns. More
precisely, each column of this matrix corresponds to a pair
(i1, i2) where each index
represents an element of zt and is therefore
between 1 and nz. Only non-decreasing pairs are
stored, i.e. those for which
i1 ≤ i2. The columns
are arranged in the lexicographical order of non-decreasing pairs. Also
note that for those pairs where i1 ≠
i2, since the element is stored only once but
appears two times in the unfolded G2 matrix, it
must be multiplied by 2 when computing the decision rules.
G3 is stored in
oo_.dr.g_3
. The matrix rows correspond to all
endogenous in DR-order. The matrix columns correspond to the third
Kronecker power of state variables (in DR-order), followed by exogenous
(in declaration order). Note that the third Kronecker power is stored
in a folded way, i.e. symmetric elements
are stored only once, which implies that the matrix has
nz(nz+1)(nz+2)/6
columns. More precisely, each column of this matrix corresponds to a
tuple (i1, i2,
i3) where each index represents an element of
zt and is therefore between 1 and
nz. Only non-decreasing tuples are stored,
i.e. those for which
i1 ≤ i2 ≤
i3. The columns are arranged in the
lexicographical order of non-decreasing tuples. Also note that for
tuples that have three distinct indices
(i.e. i1 ≠
i2 and i1 ≠
i3 and i2 ≠
i3), since these elements are stored only once
but appears six times in the unfolded G3 matrix,
they must be multiplied by 6 when computing the decision
rules. Similarly, for those tuples that have two equal indices
(i.e. of the form (a,a,b) or (a,b,a) or
(b,a,a)), since these elements are stored only once but appears three
times in the unfolded G3 matrix, they must be
multiplied by 3 when computing the decision rules.
stoch_simul sets other fields in global variable oo_
. The descriptive statistics are theoretical moments when no simulation is requested and otherwise represent the moments of the simulated variables.
The mean of the endogenous variables is available in the vector oo_.mean
. The variables are arranged in declaration order.
The matrix of variance-covariance of the endogenous variables in the matrix oo_.var
. The variables are arranged in declaration order.
The matrix of autocorrelation of the endogenous variables are made available in cell array oo_.autocorr
. The element number of the matrix in the cell array corresponds to the order of autocorrelation. The option ar
specifies the number of autocorrelation matrices available.
Simulated variables, when they have been computed, are available in
MATLAB®/Octave vectors in the
global workspace with the same name as the endogenous variables. They
are also available in the oo_.endo_simul
matrix. The
series are arranged by row, in declaration order of the variable
names
Impulse responses, when they have been computed, are available in oo_.irfs
, with the following naming convention:
.VARIABLE_NAME
_SHOCK_NAME
(DEPRECATED) They are currently also available in MATLAB®/Octave vectors in the global workspace, however they will disappear there in a future version.
Example:
oo_.irfs.gnp_ea
contains the effect on gnp
of a one standard deviation shock on ea
.