From 335c4f54318adc08c45c92e25cf80fa37d2bbf62 Mon Sep 17 00:00:00 2001 From: MichelJuillard Date: Tue, 19 Dec 2023 22:18:53 +0100 Subject: [PATCH] reorganize documentation --- {doc => docs}/Project.toml | 0 .../development/algorighms_derivatives.aux | 6 + docs/build/development/derivative_UQME.aux | 2 + .../development/derivativs_eigenvalue.aux | 2 + .../development/derivativs_eigenvalue.pdf | Bin 0 -> 35396 bytes .../development/derivativs_eigenvalue.tex | 22 + docs/build/development/distributions.aux | 4 + docs/build/development/distributions.pdf | Bin 0 -> 132679 bytes .../development}/distributions.tex | 0 .../development/lre_solution_derivatives.aux | 6 + docs/build/orig/the-model-file.md.new | 10384 ++++++++++++++++ {doc => docs}/make.jl | 0 docs/src/development/Outputs.md | 17 + .../src/development/RecursiveBlocks.blocks.md | 286 + docs/src/{ => development}/RecursiveBlocks.md | 0 .../development/algorighms_derivatives.aux | 6 + docs/src/development/derivative_UQME.aux | 2 + .../src/development/derivativs_eigenvalue.aux | 2 + .../src/development/derivativs_eigenvalue.pdf | Bin 0 -> 35396 bytes .../src/development/derivativs_eigenvalue.tex | 22 + docs/src/development/distributions.aux | 4 + docs/src/development/distributions.pdf | Bin 0 -> 132679 bytes docs/src/development/distributions.tex | 94 + docs/src/{ => development}/example1.md | 0 .../development/lre_solution_derivatives.aux | 6 + .../src/{ => development}/perfectforesight.md | 0 {doc => docs}/src/index.md | 0 .../src/installation-and-configuration.md | 0 {doc => docs}/src/introduction.md | 0 {doc => docs}/src/macroprocessor.md | 0 .../model-file/deterministic-simulations.md | 0 {doc => docs}/src/model-file/estimation.md | 0 .../src/model-file/filtersmoother.md | 0 {doc => docs}/src/model-file/forecasting.md | 0 .../model-file/initial-terminal-conditions.md | 0 .../src/model-file/local-approxiation.md | 0 .../src/model-file/model-declaration.md | 0 .../src/model-file/optimal-policy.md | 0 {doc => docs}/src/model-file/shocks.md | 0 {doc => docs}/src/model-file/steady-state.md | 0 .../src/model-file/syntax-elements.md | 0 .../src/model-file/variable-declarations.md | 0 {doc => docs}/src/orig/bibliography.md | 0 .../src/orig/dynare-misc-commands.md | 0 {doc => docs}/src/orig/examples.md | 0 {doc => docs}/src/orig/index.md | 0 .../orig/installation-and-configuration.md | 0 {doc => docs}/src/orig/introduction.md | 0 {doc => docs}/src/orig/reporting.md | 0 {doc => docs}/src/orig/running-dynare.md | 0 .../src/orig/the-configuration-file.md | 0 {doc => docs}/src/orig/the-model-file.md | 0 docs/src/orig/the-model-file.md.new | 10384 ++++++++++++++++ {doc => docs}/src/orig/time-series.md | 0 {doc => docs}/src/running-dynare.md | 0 {doc => docs}/src/the-model-file.md | 0 56 files changed, 21249 insertions(+) rename {doc => docs}/Project.toml (100%) create mode 100644 docs/build/development/algorighms_derivatives.aux create mode 100644 docs/build/development/derivative_UQME.aux create mode 100644 docs/build/development/derivativs_eigenvalue.aux create mode 100644 docs/build/development/derivativs_eigenvalue.pdf create mode 100644 docs/build/development/derivativs_eigenvalue.tex create mode 100644 docs/build/development/distributions.aux create mode 100644 docs/build/development/distributions.pdf rename docs/{src => build/development}/distributions.tex (100%) create mode 100644 docs/build/development/lre_solution_derivatives.aux create mode 100644 docs/build/orig/the-model-file.md.new rename {doc => docs}/make.jl (100%) create mode 100644 docs/src/development/Outputs.md create mode 100644 docs/src/development/RecursiveBlocks.blocks.md rename docs/src/{ => development}/RecursiveBlocks.md (100%) create mode 100644 docs/src/development/algorighms_derivatives.aux create mode 100644 docs/src/development/derivative_UQME.aux create mode 100644 docs/src/development/derivativs_eigenvalue.aux create mode 100644 docs/src/development/derivativs_eigenvalue.pdf create mode 100644 docs/src/development/derivativs_eigenvalue.tex create mode 100644 docs/src/development/distributions.aux create mode 100644 docs/src/development/distributions.pdf create mode 100644 docs/src/development/distributions.tex rename docs/src/{ => development}/example1.md (100%) create mode 100644 docs/src/development/lre_solution_derivatives.aux rename docs/src/{ => development}/perfectforesight.md (100%) rename {doc => docs}/src/index.md (100%) rename {doc => docs}/src/installation-and-configuration.md (100%) rename {doc => docs}/src/introduction.md (100%) rename {doc => docs}/src/macroprocessor.md (100%) rename {doc => docs}/src/model-file/deterministic-simulations.md (100%) rename {doc => docs}/src/model-file/estimation.md (100%) rename {doc => docs}/src/model-file/filtersmoother.md (100%) rename {doc => docs}/src/model-file/forecasting.md (100%) rename {doc => docs}/src/model-file/initial-terminal-conditions.md (100%) rename {doc => docs}/src/model-file/local-approxiation.md (100%) rename {doc => docs}/src/model-file/model-declaration.md (100%) rename {doc => docs}/src/model-file/optimal-policy.md (100%) rename {doc => docs}/src/model-file/shocks.md (100%) rename {doc => docs}/src/model-file/steady-state.md (100%) rename {doc => docs}/src/model-file/syntax-elements.md (100%) rename {doc => docs}/src/model-file/variable-declarations.md (100%) rename {doc => docs}/src/orig/bibliography.md (100%) rename {doc => docs}/src/orig/dynare-misc-commands.md (100%) rename {doc => docs}/src/orig/examples.md (100%) rename {doc => docs}/src/orig/index.md (100%) rename {doc => docs}/src/orig/installation-and-configuration.md (100%) rename {doc => docs}/src/orig/introduction.md (100%) rename {doc => docs}/src/orig/reporting.md (100%) rename {doc => docs}/src/orig/running-dynare.md (100%) rename {doc => docs}/src/orig/the-configuration-file.md (100%) rename {doc => docs}/src/orig/the-model-file.md (100%) create mode 100644 docs/src/orig/the-model-file.md.new rename {doc => docs}/src/orig/time-series.md (100%) rename {doc => docs}/src/running-dynare.md (100%) rename {doc => docs}/src/the-model-file.md (100%) diff --git a/doc/Project.toml b/docs/Project.toml similarity index 100% rename from doc/Project.toml rename to docs/Project.toml diff --git a/docs/build/development/algorighms_derivatives.aux b/docs/build/development/algorighms_derivatives.aux new file mode 100644 index 00000000..64146fde --- /dev/null +++ b/docs/build/development/algorighms_derivatives.aux @@ -0,0 +1,6 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {1}Derivatives of the steady state}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2}Derivatives of the coefficents of the linear approximation of the model}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3}Derivatives of the solution of the UQME}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {4}Derivatives of the coefficients of response to the shocks}{3}{}\protected@file@percent } +\gdef \@abspage@last{3} diff --git a/docs/build/development/derivative_UQME.aux b/docs/build/development/derivative_UQME.aux new file mode 100644 index 00000000..b6401217 --- /dev/null +++ b/docs/build/development/derivative_UQME.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{1} diff --git a/docs/build/development/derivativs_eigenvalue.aux b/docs/build/development/derivativs_eigenvalue.aux new file mode 100644 index 00000000..b6401217 --- /dev/null +++ b/docs/build/development/derivativs_eigenvalue.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{1} diff --git a/docs/build/development/derivativs_eigenvalue.pdf b/docs/build/development/derivativs_eigenvalue.pdf new file mode 100644 index 0000000000000000000000000000000000000000..47f5e1339b39441f0de52a494ef7617409699815 GIT binary patch literal 35396 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
SGjPMfs6E4U%B?INl-3 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

SGjPMfs6E4U%B?INl-3 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

c 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 literal 0 HcmV?d00001 diff --git a/docs/src/development/distributions.tex b/docs/src/development/distributions.tex new file mode 100644 index 00000000..7c00243b --- /dev/null +++ b/docs/src/development/distributions.tex @@ -0,0 +1,94 @@ +\documentclass{article} +\usepackage{amsmath,amssymb} + +\begin{document} + +Main results on distributions used in Dynare. We use the +parametrization used in Distrubtions.jl + +\section{Inverse gamma} +\begin{itemize} +\item AKA inverse gamma type 2 +\item shape: $\alpha$ +\item scale: $\theta$ +\end{itemize} +\begin{align*} +\alpha &= \frac{\nu}{2}\\ +\theta &= \frac{s}{2}\\ +X \sim IG_2(\alpha, \theta) &\Leftrightarrow Z = X^{-1} \sim G(\alpha, \theta)\\ +\mathbb{E}(X) &= \frac{\theta}{\alpha - 1}\\ +\mathbb{V}ar(X) &= \frac{1}{\alpha - 2}[\mathbb{E}(X)]^2 \mbox{ for + }\alpha > 2\\ + \alpha &= 2+\frac{[\mathbb{E}(X)]^2}{\mathbb{V}ar(X)}\\ + \theta &= (\alpha - 1)\mathbb{E}(X)\\ +f_{IG_2}(x, \alpha, \theta) &= + \frac{\theta^\alpha}{\Gamma(\alpha)}x^{-(\alpha+1)}e^{-\frac{\theta}{x}}\\ +\end{align*} + +\section{Inverse gamma type I} +\begin{align*} + X \sim IG_2(\alpha, \theta) &\Leftrightarrow Y = \sqrt{X} \sim IG_1(\alpha, \theta)\\ + & \Leftrightarrow Z = X^{-1} \sim G(\alpha, \theta)\\ +\mathbb{E}(Y) &= \sqrt{\theta}\frac{\Gamma(\alpha-\frac{1}{2})}{\Gamma(\alpha)} \mbox{ for }\alpha > \frac{1}{2} \\ +\mathbb{V}ar(Y) &= \frac{\theta}{\alpha - 1} - [\mathbb{E}(Y)]^2 \mbox{ for }\alpha > 1\\ +\mbox{mode }Y &= \sqrt{\frac{\theta}{\alpha + \frac{1}{2}}}\\ + f_{IG_1}(y, \alpha, \theta) &= f_{IG_2}(y^2, \alpha, \theta)|2y|\\ + &= 2\frac{\theta^\alpha}{\Gamma(\alpha)}y^{-(2\alpha+1)}e^{-\frac{\theta}{y^2}}\\ +\end{align*} +$\alpha$ solves +\[ +(\alpha - 1)\left(\mathbb{V}ar(Y) + [\mathbb{E}(Y)]^2\right)- +\left[\mathbb{E}(Y)\right]^2\frac{\Gamma(\alpha)}{\Gamma(\alpha-\frac{1}{2})} =0 +\] +and $\theta = (\alpha - 1)(\mathbb{V}ar(Y) + [\mathbb{E}(Y)]^2)$ + +\section*{Appendices} +\subsection*{Bauwens et (1999)} + +\begin{align*} +X \sim IG_2(s, \nu) &\Leftrightarrow Y = \sqrt{X} \sim IG_1(s, \nu)\\ +& \Leftrightarrow Z = X^{-1} \sim G(\frac{\nu}{2}, \frac{2}{s})\\ +\mathbb{E}(X) &= \frac{s}{\nu - 2}\\ +\mathbb{V}ar(X) &= \frac{2}{\nu - 4}[\mathbb{E}(X)]^2 \mbox{ for }\nu > 4\\ +\mathbb{E}(Y) &= \sqrt{\frac{s}{2}}\frac{\Gamma\left(\frac{\nu +-1}{2}\right)}{\Gamma\left(\frac{\nu}{2}\right)} \mbox{ for }\nu > 1 \\ +\mathbb{V}ar(Y) &= \frac{s}{\nu - 2} - [\mathbb{E}(Y)]^2 \mbox{ for }\nu > 2\\ +f_{IG_2}(x|\frac{\nu}{2}, \frac{2}{s}) &= \frac{1}{\Gamma(\frac{\nu}{2})\left(\frac{2}{s}\right)^{\frac{\nu}{2}}}x^{-\frac{1}{2}(\nu+2)}e^{-\frac{s}{2x}} \\ +f_{IG_2}(x|\alpha,\theta) &= + \frac{1}{\Gamma(\alpha)\theta^\alpha} + x^{-(\alpha+1)}e^{-\frac{1}{sx}} +\end{align*} + +\subsection*{Inverse gamma type I} +\subsubsection*{Mode derivation} +\begin{align*} + \max_x y &= + 2\frac{\theta^\alpha}{\Gamma(\alpha)}x^{-(2\alpha+1)}e^{-\frac{\theta}{x^2}}\\ + \frac{dy}{dx} &= -\left[(2\alpha+1)x^{-1}-2\theta x^{-3}\right]y\\ + &= 0\\ + x^\star &= \sqrt{\frac{\theta}{\alpha + \frac{1}{2}}} +\end{align*} +\subsubsection*{Obtaining $\alpha$ and $\theta$ from mean and + variance} +\begin{align*} + \theta &= + \left[\mathbb{E}(Y)\right]^2\left(\frac{\Gamma(\alpha)}{\Gamma(\alpha-\frac{1}{2})}\right)^2\\ + \theta &= (\alpha - 1)\left(\mathbb{V}ar(Y) + [\mathbb{E}(Y)]^2\right) +\end{align*} +Solve numerically +\[ +(\alpha - 1)\left(\mathbb{V}ar(Y) + [\mathbb{E}(Y)]^2\right)- +\left[\mathbb{E}(Y)\right]^2\left(\frac{\Gamma(\alpha)}{\Gamma(\alpha-\frac{1}{2})}\right)^2 =0 +\] +or taking the logarithm for numerical stabilitye: +\[ +\ln(\alpha - 1) + \ln\left(\mathbb{V}ar(Y) + [\mathbb{E}(Y)]^2\right)- +\ln\left[\mathbb{E}(Y)\right]^2 - 2*\ln\left(\frac{\Gamma(\alpha)}{\Gamma(\alpha-\frac{1}{2})}\right) =0 +\] + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/docs/src/example1.md b/docs/src/development/example1.md similarity index 100% rename from docs/src/example1.md rename to docs/src/development/example1.md diff --git a/docs/src/development/lre_solution_derivatives.aux b/docs/src/development/lre_solution_derivatives.aux new file mode 100644 index 00000000..753dc682 --- /dev/null +++ b/docs/src/development/lre_solution_derivatives.aux @@ -0,0 +1,6 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {1}Derivatives of the steady state}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2}Derivatives of the coefficents of the linear approximation of the model}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3}Derivatives of the solution of the UQME}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {4}Derivatives of the coefficients of response to the shocks}{2}{}\protected@file@percent } +\gdef \@abspage@last{3} diff --git a/docs/src/perfectforesight.md b/docs/src/development/perfectforesight.md similarity index 100% rename from docs/src/perfectforesight.md rename to docs/src/development/perfectforesight.md diff --git a/doc/src/index.md b/docs/src/index.md similarity index 100% rename from doc/src/index.md rename to docs/src/index.md diff --git a/doc/src/installation-and-configuration.md b/docs/src/installation-and-configuration.md similarity index 100% rename from doc/src/installation-and-configuration.md rename to docs/src/installation-and-configuration.md diff --git a/doc/src/introduction.md b/docs/src/introduction.md similarity index 100% rename from doc/src/introduction.md rename to docs/src/introduction.md diff --git a/doc/src/macroprocessor.md b/docs/src/macroprocessor.md similarity index 100% rename from doc/src/macroprocessor.md rename to docs/src/macroprocessor.md diff --git a/doc/src/model-file/deterministic-simulations.md b/docs/src/model-file/deterministic-simulations.md similarity index 100% rename from doc/src/model-file/deterministic-simulations.md rename to docs/src/model-file/deterministic-simulations.md diff --git a/doc/src/model-file/estimation.md b/docs/src/model-file/estimation.md similarity index 100% rename from doc/src/model-file/estimation.md rename to docs/src/model-file/estimation.md diff --git a/doc/src/model-file/filtersmoother.md b/docs/src/model-file/filtersmoother.md similarity index 100% rename from doc/src/model-file/filtersmoother.md rename to docs/src/model-file/filtersmoother.md diff --git a/doc/src/model-file/forecasting.md b/docs/src/model-file/forecasting.md similarity index 100% rename from doc/src/model-file/forecasting.md rename to docs/src/model-file/forecasting.md diff --git a/doc/src/model-file/initial-terminal-conditions.md b/docs/src/model-file/initial-terminal-conditions.md similarity index 100% rename from doc/src/model-file/initial-terminal-conditions.md rename to docs/src/model-file/initial-terminal-conditions.md diff --git a/doc/src/model-file/local-approxiation.md b/docs/src/model-file/local-approxiation.md similarity index 100% rename from doc/src/model-file/local-approxiation.md rename to docs/src/model-file/local-approxiation.md diff --git a/doc/src/model-file/model-declaration.md b/docs/src/model-file/model-declaration.md similarity index 100% rename from doc/src/model-file/model-declaration.md rename to docs/src/model-file/model-declaration.md diff --git a/doc/src/model-file/optimal-policy.md b/docs/src/model-file/optimal-policy.md similarity index 100% rename from doc/src/model-file/optimal-policy.md rename to docs/src/model-file/optimal-policy.md diff --git a/doc/src/model-file/shocks.md b/docs/src/model-file/shocks.md similarity index 100% rename from doc/src/model-file/shocks.md rename to docs/src/model-file/shocks.md diff --git a/doc/src/model-file/steady-state.md b/docs/src/model-file/steady-state.md similarity index 100% rename from doc/src/model-file/steady-state.md rename to docs/src/model-file/steady-state.md diff --git a/doc/src/model-file/syntax-elements.md b/docs/src/model-file/syntax-elements.md similarity index 100% rename from doc/src/model-file/syntax-elements.md rename to docs/src/model-file/syntax-elements.md diff --git a/doc/src/model-file/variable-declarations.md b/docs/src/model-file/variable-declarations.md similarity index 100% rename from doc/src/model-file/variable-declarations.md rename to docs/src/model-file/variable-declarations.md diff --git a/doc/src/orig/bibliography.md b/docs/src/orig/bibliography.md similarity index 100% rename from doc/src/orig/bibliography.md rename to docs/src/orig/bibliography.md diff --git a/doc/src/orig/dynare-misc-commands.md b/docs/src/orig/dynare-misc-commands.md similarity index 100% rename from doc/src/orig/dynare-misc-commands.md rename to docs/src/orig/dynare-misc-commands.md diff --git a/doc/src/orig/examples.md b/docs/src/orig/examples.md similarity index 100% rename from doc/src/orig/examples.md rename to docs/src/orig/examples.md diff --git a/doc/src/orig/index.md b/docs/src/orig/index.md similarity index 100% rename from doc/src/orig/index.md rename to docs/src/orig/index.md diff --git a/doc/src/orig/installation-and-configuration.md b/docs/src/orig/installation-and-configuration.md similarity index 100% rename from doc/src/orig/installation-and-configuration.md rename to docs/src/orig/installation-and-configuration.md diff --git a/doc/src/orig/introduction.md b/docs/src/orig/introduction.md similarity index 100% rename from doc/src/orig/introduction.md rename to docs/src/orig/introduction.md diff --git a/doc/src/orig/reporting.md b/docs/src/orig/reporting.md similarity index 100% rename from doc/src/orig/reporting.md rename to docs/src/orig/reporting.md diff --git a/doc/src/orig/running-dynare.md b/docs/src/orig/running-dynare.md similarity index 100% rename from doc/src/orig/running-dynare.md rename to docs/src/orig/running-dynare.md diff --git a/doc/src/orig/the-configuration-file.md b/docs/src/orig/the-configuration-file.md similarity index 100% rename from doc/src/orig/the-configuration-file.md rename to docs/src/orig/the-configuration-file.md diff --git a/doc/src/orig/the-model-file.md b/docs/src/orig/the-model-file.md similarity index 100% rename from doc/src/orig/the-model-file.md rename to docs/src/orig/the-model-file.md diff --git a/docs/src/orig/the-model-file.md.new b/docs/src/orig/the-model-file.md.new new file mode 100644 index 00000000..a488f595 --- /dev/null +++ b/docs/src/orig/the-model-file.md.new @@ -0,0 +1,10384 @@ +::: {.default-domain} +dynare +::: + +The model file {#model-file} +============== + +Conventions {#conv} +----------- + +A model file contains a list of commands and of blocks. Each command and +each element of a block is terminated by a semicolon (;). Blocks are +terminated by `end;`. + +If Dynare encounters an unknown expression at the beginning of a line or +after a semicolon, it will parse the rest of that line as native MATLAB +code, even if there are more statements separated by semicolons present. +To prevent cryptic error messages, it is strongly recommended to always +only put one statement/command into each line and start a new line after +each semicolon.[^1] + +Lines of codes can be commented out line by line or as a block. +Single-line comments begin with `//` and stop at the end of the line. +Multiline comments are introduced by `/*` and terminated by `*/`. + +*Examples* + +> // This is a single line comment +> +> var x; // This is a comment about x +> +> /* This is another inline comment about alpha */ alpha = 0.3; +> +> /* +> This comment is spanning +> two lines. +> */ + +Note that these comment marks should not be used in native MATLAB code +regions where the [%]{.title-ref} should be preferred instead to +introduce a comment. In a `verbatim` block, see +`verbatim`{.interpreted-text role="ref"}, this would result in a crash +since `//` is not a valid MATLAB statement). + +Most Dynare commands have arguments and several accept options, +indicated in parentheses after the command keyword. Several options are +separated by commas. + +In the description of Dynare commands, the following conventions are +observed: + +- Optional arguments or options are indicated between square brackets: + '\[\]'; +- Repeated arguments are indicated by ellipses: "\..."; +- Mutually exclusive arguments are separated by vertical bars: '\|'; +- INTEGER indicates an integer number; +- INTEGER\_VECTOR indicates a vector of integer numbers separated by + spaces, enclosed by square brackets; +- DOUBLE indicates a double precision number. The following syntaxes + are valid: `1.1e3`, `1.1E3`, `1.1d3`, `1.1D3`. In some places, + infinite Values `Inf` and `-Inf` are also allowed; +- NUMERICAL\_VECTOR indicates a vector of numbers separated by spaces, + enclosed by square brackets; +- EXPRESSION indicates a mathematical expression valid outside the + model description (see `expr`{.interpreted-text role="ref"}); +- MODEL\_EXPRESSION (sometimes MODEL\_EXP) indicates a mathematical + expression valid in the model description (see + `expr`{.interpreted-text role="ref"} and + `model-decl`{.interpreted-text role="ref"}); +- MACRO\_EXPRESSION designates an expression of the macro processor + (see `macro-exp`{.interpreted-text role="ref"}); +- VARIABLE\_NAME (sometimes VAR\_NAME) indicates a variable name + starting with an alphabetical character and can't contain: + '()+-\*/\^=!;:@\#.' or accentuated characters; +- PARAMETER\_NAME (sometimes PARAM\_NAME) indicates a parameter name + starting with an alphabetical character and can't contain: + '()+-\*/\^=!;:@\#.' or accentuated characters; +- LATEX\_NAME (sometimes TEX\_NAME) indicates a valid LaTeX expression + in math mode (not including the dollar signs); +- FUNCTION\_NAME indicates a valid MATLAB function name; +- FILENAME indicates a filename valid in the underlying operating + system; it is necessary to put it between quotes when specifying the + extension or if the filename contains a non-alphanumeric character; +- QUOTED\_STRING indicates an arbitrary string enclosed between + (single) quotes. + +Variable declarations {#var-decl} +--------------------- + +While Dynare allows the user to choose their own variable names, there +are some restrictions to be kept in mind. First, variables and +parameters must not have the same name as Dynare commands or built-in +functions. In this respect, Dynare is not case-sensitive. For example, +do not use `Ln` or `Sigma_e` to name your variable. Not conforming to +this rule might yield hard-to-debug error messages or crashes. Second, +when employing user-defined steady state files it is recommended to +avoid using the name of MATLAB functions as this may cause conflicts. In +particular, when working with user-defined steady state files, do not +use correctly-spelled greek names like [alpha]{.title-ref}, because +there are MATLAB functions of the same name. Rather go for `alppha` or +`alph`. Lastly, please do not name a variable or parameter `i`. This may +interfere with the imaginary number i and the index in many loops. +Rather, name investment `invest`. Using `inv` is also not recommended as +it already denotes the inverse operator. Commands for declaring +variables and parameters are described below. + +::: {.command} +var VAR\_NAME \[\$TEX\_NAME\$\] +\[(long\_name=QUOTED\_STRINGNAME=QUOTED\_STRING)\]\...; +var(deflator=MODEL\_EXPR) VAR\_NAME (\... same options apply) var(log, +deflator=MODEL\_EXPR) VAR\_NAME (\... same options apply) +var(log\_deflator=MODEL\_EXPR) VAR\_NAME (\... same options apply) + +This required command declares the endogenous variables in the model. +See `conv`{.interpreted-text role="ref"} for the syntax of *VAR\_NAME* +and *MODEL\_EXPR*. Optionally it is possible to give a LaTeX name to the +variable or, if it is nonstationary, provide information regarding its +deflator. The variables in the list can be separated by spaces or by +commas. `var` commands can appear several times in the file and Dynare +will concatenate them. Dynare stores the list of declared parameters, in +the order of declaration, in a column cell array `M_.endo_names`. + +If the model is nonstationary and is to be written as such in the +`model` block, Dynare will need the trend deflator for the appropriate +endogenous variables in order to stationarize the model. The trend +deflator must be provided alongside the variables that follow this +trend. + +*Options* + +::: {.option} +log + +In addition to the endogenous variable(s) thus declared, this option +also triggers the creation of auxiliary variable(s) equal to the log of +the corresponding endogenous variable(s). For example, given a +`var(log) y` statement, two endogenous will be created (`y` and +`LOG_y`), and an auxiliary equation linking the two will also be added +(equal to `LOG_y = log(y)`). Moreover, every occurence of `y` in the +model will be replaced by `exp(LOG_y)`. This option is for example +useful when one wants to perform a loglinear approximation of some +variable(s) in the context of a first-order stochastic approximation; or +when one wants to ensure the variable(s) stay(s) in the definition +domain of the function defining the steady state or the dynamic +residuals when the nonlinear solver is used. +::: + +::: {.option} +deflator = MODEL\_EXPR + +The expression used to detrend an endogenous variable. All trend +variables, endogenous variables and parameters referenced in MODEL\_EXPR +must already have been declared by the `trend_var, log_trend_var, var` +and `parameters` commands. The deflator is assumed to be multiplicative; +for an additive deflator, use `log_deflator`. This option can be used +together with the `log` option (the latter must come first). +::: + +::: {.option} +log\_deflator = MODEL\_EXPR + +Same as `deflator`, except that the deflator is assumed to be additive +instead of multiplicative (or, to put it otherwise, the declared +variable is equal to the log of a variable with a multiplicative trend). +This option cannot be used together with the `log` option, because it +would not make much sense from an economic point of view (the +corresponding auxiliary variable would correspond to the log taken two +times on a variable with a multiplicative trend). +::: + +::: {#long-name} +::: {.option} +long\_name = QUOTED\_STRING + +This is the long version of the variable name. Its value is stored in +`M_.endo_names_long` (a column cell array, in the same order as +`M_.endo_names`). In case multiple `long_name` options are provided, the +last one will be used. Default: `VAR_NAME`. +::: +::: + +::: {#partitioning} +::: {.option} +NAME = QUOTED\_STRING + +This is used to create a partitioning of variables. It results in the +direct output in the `.m` file analogous to: +`M_.endo_partitions.NAME = QUOTED_STRING`;. +::: +::: + +*Example (variable partitioning)* + +> var c gnp cva (country=`US', state=`VA') +> cca (country=`US', state=`CA', long_name=`Consumption CA'); +> var(deflator=A) i b; +> var c $C$ (long_name=`Consumption'); +::: + +::: {.command} +varexo\_det VAR\_NAME \[\$TEX\_NAME\$\] +\[(long\_name=QUOTED\_STRING\|NAME=QUOTED\_STRING)\...\]; + +This optional command declares exogenous deterministic variables in a +stochastic model. See `conv`{.interpreted-text role="ref"} for the +syntax of VARIABLE\_NAME. Optionally it is possible to give a LaTeX name +to the variable. The variables in the list can be separated by spaces or +by commas. `varexo_det` commands can appear several times in the file +and Dynare will concatenate them. + +It is possible to mix deterministic and stochastic shocks to build +models where agents know from the start of the simulation about future +exogenous changes. In that case `stoch_simul` will compute the rational +expectation solution adding future information to the state space +(nothing is shown in the output of `stoch_simul`) and forecast will +compute a simulation conditional on initial conditions and future +information. + +Note that exogenous deterministic variables cannot appear with a lead or +a lag in the model. + +*Options* + +::: {.option} +long\_name = QUOTED\_STRING + +Like `long_name `{.interpreted-text role="ref"} but value +stored in `M_.exo_det_names_long`. +::: + +::: {.option} +NAME = QUOTED\_STRING + +Like `partitioning `{.interpreted-text role="ref"} but +QUOTED\_STRING stored in `M_.exo_det_partitions.NAME`. +::: + +*Example* + +> varexo m gov; +> varexo_det tau; +::: + +::: {.command} +var\_remove VAR\_NAME \| PARAM\_NAME\...; + +Removes the listed variables (or parameters) from the model. Removing a +variable that has already been used in a model equation or elsewhere +will lead to an error. +::: + +::: {.command} +predetermined\_variables VAR\_NAME\...; + +In Dynare, the default convention is that the timing of a variable +reflects when this variable is decided. The typical example is for +capital stock: since the capital stock used at current period is +actually decided at the previous period, then the capital stock entering +the production function is `k(-1)`, and the law of motion of capital +must be written: + + k = i + (1-delta)*k(-1) + +Put another way, for stock variables, the default in Dynare is to use a +"stock at the end of the period" concept, instead of a "stock at the +beginning of the period" convention. + +The `predetermined_variables` is used to change that convention. The +endogenous variables declared as predetermined variables are supposed to +be decided one period ahead of all other endogenous variables. For stock +variables, they are supposed to follow a "stock at the beginning of the +period" convention. + +Note that Dynare internally always uses the "stock at the end of the +period" concept, even when the model has been entered using the +`predetermined_variables` command. Thus, when plotting, computing or +simulating variables, Dynare will follow the convention to use variables +that are decided in the current period. For example, when generating +impulse response functions for capital, Dynare will plot `k`, which is +the capital stock decided upon by investment today (and which will be +used in tomorrow's production function). This is the reason that capital +is shown to be moving on impact, because it is `k` and not the +predetermined `k(-1)` that is displayed. It is important to remember +that this also affects simulated time series and output from smoother +routines for predetermined variables. Compared to non-predetermined +variables they might otherwise appear to be falsely shifted to the +future by one period. + +*Example* + +> The following two program snippets are strictly equivalent. +> +> Using default Dynare timing convention: +> +> var y, k, i; +> ... +> model; +> y = k(-1)^alpha; +> k = i + (1-delta)*k(-1); +> ... +> end; +> +> Using the alternative timing convention: +> +> var y, k, i; +> predetermined_variables k; +> ... +> model; +> y = k^alpha; +> k(+1) = i + (1-delta)*k; +> ... +> end; +::: + +::: {.command} +trend\_var (growth\_factor = MODEL\_EXPR) VAR\_NAME +\[\$LATEX\_NAME\$\]\...; + +This optional command declares the trend variables in the model. See +`conv`{.interpreted-text role="ref"} for the syntax of MODEL\_EXPR and +VAR\_NAME. Optionally it is possible to give a LaTeX name to the +variable. + +The variable is assumed to have a multiplicative growth trend. For an +additive growth trend, use `log_trend_var` instead. + +Trend variables are required if the user wants to be able to write a +nonstationary model in the `model` block. The `trend_var` command must +appear before the var command that references the trend variable. + +`trend_var` commands can appear several times in the file and Dynare +will concatenate them. + +If the model is nonstationary and is to be written as such in the +`model` block, Dynare will need the growth factor of every trend +variable in order to stationarize the model. The growth factor must be +provided within the declaration of the trend variable, using the +`growth_factor` keyword. All endogenous variables and parameters +referenced in MODEL\_EXPR must already have been declared by the var and +parameters commands. + +*Example* + +> trend_var (growth_factor=gA) A; +::: + +::: {.command} +model\_local\_variable VARIABLE\_NAME \[LATEX\_NAME\]\... ; + +This optional command declares a model local variable. See +`conv`{.interpreted-text role="ref"} for the syntax of VARIABLE\_NAME. +As you can create model local variables on the fly in the model block +(see `model-decl`{.interpreted-text role="ref"}), the interest of this +command is primarily to assign a LATEX\_NAME to the model local +variable. + +*Example* + +> model_local_variable GDP_US $GDPUS$; +::: + +### On-the-fly Model Variable Declaration {#on-the-fly-declaration} + +Endogenous variables, exogenous variables, and parameters can also be +declared inside the model block. You can do this in two different ways: +either via the equation tag or directly in an equation. + +To declare a variable on-the-fly in an equation tag, simply state the +type of variable to be declared (`endogenous`, `exogenous`, or +`parameter` followed by an equal sign and the variable name in single +quotes. Hence, to declare a variable `c` as endogenous in an equation +tag, you can type `[endogenous='c']`. + +To perform on-the-fly variable declaration in an equation, simply follow +the symbol name with a vertical line (`|`, pipe character) and either an +`e`, an `x`, or a `p`. For example, to declare a parameter named +`alphaa` in the model block, you could write `alphaa|p` directly in an +equation where it appears. Similarly, to declare an endogenous variable +`c` in the model block you could write `c|e`. Note that in-equation +on-the-fly variable declarations must be made on contemporaneous +variables. + +On-the-fly variable declarations do not have to appear in the first +place where this variable is encountered. + +*Example* + +> The following two snippets are equivalent: +> +> > model; +> > [endogenous='k',name='law of motion of capital'] +> > k(+1) = i|e + (1-delta|p)*k; +> > y|e = k^alpha|p; +> > ... +> > end; +> > delta = 0.025; +> > alpha = 0.36; +> > +> > var k, i, y; +> > parameters delta, alpha; +> > delta = 0.025; +> > alpha = 0.36; +> > ... +> > model; +> > [name='law of motion of capital'] +> > k(1) = i|e + (1-delta|p)*k; +> > y|e = k|e^alpha|p; +> > ... +> > end; + +Expressions {#expr} +----------- + +Dynare distinguishes between two types of mathematical expressions: +those that are used to describe the model, and those that are used +outside the model block (e.g. for initializing parameters or variables, +or as command options). In this manual, those two types of expressions +are respectively denoted by MODEL\_EXPRESSION and EXPRESSION. + +Unlike MATLAB or Octave expressions, Dynare expressions are necessarily +scalar ones: they cannot contain matrices or evaluate to matrices.[^2] + +Expressions can be constructed using integers (INTEGER), floating point +numbers (DOUBLE), parameter names (PARAMETER\_NAME), variable names +(VARIABLE\_NAME), operators and functions. + +The following special constants are also accepted in some contexts: + +::: {.constant} +inf + +Represents infinity. +::: + +::: {.constant} +nan + +"Not a number": represents an undefined or unrepresentable value. +::: + +### Parameters and variables + +Parameters and variables can be introduced in expressions by simply +typing their names. The semantics of parameters and variables is quite +different whether they are used inside or outside the model block. + +#### Inside the model + +Parameters used inside the model refer to the value given through +parameter initialization (see `param-init`{.interpreted-text +role="ref"}) or `homotopy_setup` when doing a simulation, or are the +estimated variables when doing an estimation. + +Variables used in a MODEL\_EXPRESSION denote current period values when +neither a lead or a lag is given. A lead or a lag can be given by +enclosing an integer between parenthesis just after the variable name: a +positive integer means a lead, a negative one means a lag. Leads or lags +of more than one period are allowed. For example, if `c` is an +endogenous variable, then `c(+1)` is the variable one period ahead, and +`c(-2)` is the variable two periods before. + +When specifying the leads and lags of endogenous variables, it is +important to respect the following convention: in Dynare, the timing of +a variable reflects when that variable is decided. A control variable +--- which by definition is decided in the current period --- must have +no lead. A predetermined variable --- which by definition has been +decided in a previous period --- must have a lag. A consequence of this +is that all stock variables must use the "stock at the end of the +period" convention. + +Leads and lags are primarily used for endogenous variables, but can be +used for exogenous variables. They have no effect on parameters and are +forbidden for local model variables (see Model declaration). + +#### Outside the model + +When used in an expression outside the model block, a parameter or a +variable simply refers to the last value given to that variable. More +precisely, for a parameter it refers to the value given in the +corresponding parameter initialization (see +`param-init`{.interpreted-text role="ref"}); for an endogenous or +exogenous variable, it refers to the value given in the most recent +`initval` or `endval` block. + +### Operators + +The following operators are allowed in both MODEL\_EXPRESSION and +EXPRESSION: + +- Binary arithmetic operators: `+`, `-`, `*`, `/`, `^` +- Unary arithmetic operators: `+`, `-` +- Binary comparison operators (which evaluate to either 0 or 1): `<`, + `>`, `<=`, `>=`, `==`, `!=` + +Note the binary comparison operators are differentiable everywhere +except on a line of the 2-dimensional real plane. However for +facilitating convergence of Newton-type methods, Dynare assumes that, at +the points of non-differentiability, the partial derivatives of these +operators with respect to both arguments is equal to 0 (since this is +the value of the partial derivatives everywhere else). + +The following special operators are accepted in MODEL\_EXPRESSION (but +not in EXPRESSION): + +::: {.operator} +STEADY\_STATE (MODEL\_EXPRESSION) + +This operator is used to take the value of the enclosed expression at +the steady state. A typical usage is in the Taylor rule, where you may +want to use the value of GDP at steady state to compute the output gap. + +Exogenous and exogenous deterministic variables may not appear in +MODEL\_EXPRESSION. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +The concept of a steady state is ambiguous in a perfect foresight +context with permament and potentially anticipated shocks occuring. +Dynare will use the contents of `oo_.steady_state` as its reference for +calls to the `STEADY_STATE()`-operator. In the presence of `endval`, +this implies that the terminal state provided by the user is used. This +may be a steady state computed by Dynare (if `endval` is followed by +`steady`) or simply the terminal state provided by the user (if `endval` +is not followed by `steady`). Put differently, Dynare will not +automatically compute the steady state conditional on the specificed +value of the exogenous variables in the respective periods. +::: +::: + +::: {.operator} +EXPECTATION (INTEGER) (MODEL\_EXPRESSION) + +This operator is used to take the expectation of some expression using a +different information set than the information available at current +period. For example, `EXPECTATION(-1)(x(+1))` is equal to the expected +value of variable x at next period, using the information set available +at the previous period. See `aux-variables`{.interpreted-text +role="ref"} for an explanation of how this operator is handled +internally and how this affects the output. +::: + +### Functions + +#### Built-in functions + +The following standard functions are supported internally for both +MODEL\_EXPRESSION and EXPRESSION: + +::: {.function} +exp(x) + +Natural exponential. +::: + +::: {.function} +log(x) +::: + +::: {.function} +ln(x) + +Natural logarithm. +::: + +::: {.function} +log10(x) + +Base 10 logarithm. +::: + +::: {.function} +sqrt(x) + +Square root. +::: + +::: {.function} +cbrt(x) + +Cube root. +::: + +::: {.function} +sign(x) + +Signum function, defined as: + +> $$\begin{aligned} +> \textrm{sign}(x) = +> \begin{cases} +> -1 &\quad\text{if }x<0\\ +> 0 &\quad\text{if }x=0\\ +> 1 &\quad\text{if }x>0 +> \end{cases} +> \end{aligned}$$ + +Note that this function is not continuous, hence not differentiable, at +$x=0$. However, for facilitating convergence of Newton-type methods, +Dynare assumes that the derivative at $x=0$ is equal to $0$. This +assumption comes from the observation that both the right- and +left-derivatives at this point exist and are equal to $0$, so we can +remove the singularity by postulating that the derivative at $x=0$ is +$0$. +::: + +::: {.function} +abs(x) + +Absolute value. + +Note that this continuous function is not differentiable at $x=0$. +However, for facilitating convergence of Newton-type methods, Dynare +assumes that the derivative at $x=0$ is equal to $0$ (even if the +derivative does not exist). The rational for this mathematically +unfounded definition, rely on the observation that the derivative of +$\mathrm{abs}(x)$ is equal to $\mathrm{sign}(x)$ for any $x\neq 0$ in +$\mathbb R$ and from the convention for the value of $\mathrm{sign}(x)$ +at $x=0$). +::: + +::: {.function} +sin(x) +::: + +::: {.function} +cos(x) +::: + +::: {.function} +tan(x) +::: + +::: {.function} +asin(x) +::: + +::: {.function} +acos(x) +::: + +::: {.function} +atan(x) + +Trigonometric functions. +::: + +::: {.function} +sinh(x) +::: + +::: {.function} +cosh(x) +::: + +::: {.function} +tanh(x) +::: + +::: {.function} +asinh(x) +::: + +::: {.function} +acosh(x) +::: + +::: {.function} +atanh(x) + +Hyperbolic functions. +::: + +::: {.function} +max(a, b) +::: + +::: {.function} +min(a, b) + +Maximum and minimum of two reals. + +Note that these functions are differentiable everywhere except on a line +of the 2-dimensional real plane defined by $a=b$. However for +facilitating convergence of Newton-type methods, Dynare assumes that, at +the points of non-differentiability, the partial derivative of these +functions with respect to the first (resp. the second) argument is equal +to $1$ (resp. to $0$) (i.e. the derivatives at the kink are equal to the +derivatives observed on the half-plane where the function is equal to +its first argument). +::: + +::: {.function} +normcdf(x) normcdf(x, mu, sigma) + +Gaussian cumulative density function, with mean *mu* and standard +deviation *sigma*. Note that `normcdf(x)` is equivalent to +`normcdf(x,0,1)`. +::: + +::: {.function} +normpdf(x) normpdf(x, mu, sigma) + +Gaussian probability density function, with mean *mu* and standard +deviation *sigma*. Note that `normpdf(x)` is equivalent to +`normpdf(x,0,1)`. +::: + +::: {.function} +erf(x) + +Gauss error function. +::: + +::: {.function} +erfc(x) + +Complementary error function, *i.e.* +$\mathrm{erfc}(x) = 1-\mathrm{erf}(x)$. +::: + +#### External functions + +Any other user-defined (or built-in) MATLAB or Octave function may be +used in both a MODEL\_EXPRESSION and an EXPRESSION, provided that this +function has a scalar argument as a return value. + +To use an external function in a MODEL\_EXPRESSION, one must declare the +function using the `external_function` statement. This is not required +for external functions used in an EXPRESSION outside of a `model` block +or `steady_state_model` block. + +::: {.command} +external\_function (OPTIONS\...); + +This command declares the external functions used in the model block. It +is required for every unique function used in the model block. + +`external_function` commands can appear several times in the file and +must come before the model block. + +*Options* + +::: {.option} +name = NAME + +The name of the function, which must also be the name of the Julia file +implementing it. This option is mandatory. +::: + +::: {.option} +nargs = INTEGER + +The number of arguments of the function. If this option is not provided, +Dynare assumes `nargs = 1`. +::: + +::: {.option} +first\_deriv\_provided \[= NAME\] + +If NAME is provided, this tells Dynare that the Jacobian is provided as +the only output of the Julia file given as the option argument. If NAME +is not provided, this tells Dynare that the Julia file specified by the +argument passed to NAME returns the Jacobian as its second output +argument. When this option is not provided, Dynare will use finite +difference approximations for computing the derivatives of the function, +whenever needed. +::: + +::: {.option} +second\_deriv\_provided \[= NAME\] + +If NAME is provided, this tells Dynare that the Hessian is provided as +the only output of the Julia file given as the option argument. If NAME +is not provided, this tells Dynare that the Julia file specified by the +argument passed to NAME returns the Hessian as its third output +argument. NB: This option can only be used if the `first_deriv_provided` +option is used in the same `external_function` command. When this option +is not provided, Dynare will use finite difference approximations for +computing the Hessian derivatives of the function, whenever needed. +::: + +*Example* + +> external_function(name = funcname); +> external_function(name = otherfuncname, nargs = 2, first_deriv_provided, second_deriv_provided); +> external_function(name = yetotherfuncname, nargs = 3, first_deriv_provided = funcname_deriv); +::: + +### A few words of warning in stochastic context + +The use of the following functions and operators is strongly discouraged +in a stochastic context: `max`, `min`, `abs`, `sign`, `<`, `>`, `<=`, +`>=`, `==`, `!=`. + +The reason is that the local approximation used by `stoch_simul` or +`estimation` will by nature ignore the non-linearities introduced by +these functions if the steady state is away from the kink. And, if the +steady state is exactly at the kink, then the approximation will be +bogus because the derivative of these functions at the kink is bogus (as +explained in the respective documentations of these functions and +operators). + +Note that `extended_path` is not affected by this problem, because it +does not rely on a local approximation of the mode. + +Parameter initialization {#param-init} +------------------------ + +When using Dynare for computing simulations, it is necessary to +calibrate the parameters of the model. This is done through parameter +initialization. + +The syntax is the following: + + PARAMETER_NAME = EXPRESSION; + +Here is an example of calibration: + + parameters alpha, beta; + + beta = 0.99; + alpha = 0.36; + A = 1-alpha*beta; + +Internally, the parameter values are stored in `M_.params`: + +::: {.matvar} +[M]().params + +Contains the values of model parameters. The parameters are in the order +that was used in the `parameters` command, hence ordered as in +`M_.param_names`. +::: + +The parameter names are stored in `M_.param_names`: + +::: {.matvar} +[M]().param\_names + +Cell array containing the names of the model parameters. +::: + +::: {.matcomm} +get\_param\_by\_name (\'PARAMETER\_NAME\'); + +Given the name of a parameter, returns its calibrated value as it is +stored in `M_.params`. +::: + +::: {.matcomm} +set\_param\_value (\'PARAMETER\_NAME\', MATLAB\_EXPRESSION); + +Sets the calibrated value of a parameter to the provided expression. +This does essentially the same as the parameter initialization syntax +described above, except that it accepts arbitrary MATLAB/Octave +expressions, and that it works from MATLAB/Octave scripts. +::: + +Model declaration {#model-decl} +----------------- + +The model is declared inside a `model` block: + +::: {.block} +model ; model (OPTIONS\...); + +The equations of the model are written in a block delimited by `model` +and `end` keywords. + +There must be as many equations as there are endogenous variables in the +model, except when computing the unconstrained optimal policy with +`ramsey_model`, `ramsey_policy` or `discretionary_policy`. + +The syntax of equations must follow the conventions for +MODEL\_EXPRESSION as described in `expr`{.interpreted-text role="ref"}. +Each equation must be terminated by a semicolon (';'). A normal equation +looks like: + +> MODEL\_EXPRESSION = MODEL\_EXPRESSION; + +When the equations are written in homogenous form, it is possible to +omit the '=0' part and write only the left hand side of the equation. A +homogenous equation looks like: + +> MODEL\_EXPRESSION; + +Inside the model block, Dynare allows the creation of *model-local +variables*, which constitute a simple way to share a common expression +between several equations. The syntax consists of a pound sign (\#) +followed by the name of the new model local variable (which must **not** +be declared as in `var-decl`{.interpreted-text role="ref"}, but may have +been declared by `model_local_variable`{.interpreted-text role="comm"}), +an equal sign, and the expression for which this new variable will +stand. Later on, every time this variable appears in the model, Dynare +will substitute it by the expression assigned to the variable. Note that +the scope of this variable is restricted to the model block; it cannot +be used outside. To assign a LaTeX name to the model local variable, use +the declaration syntax outlined by +`model_local_variable`{.interpreted-text role="comm"}. A model local +variable declaration looks like: + +> \#VARIABLE\_NAME = MODEL\_EXPRESSION; + +It is possible to tag equations written in the model block. A tag can +serve different purposes by allowing the user to attach arbitrary +informations to each equation and to recover them at runtime. For +instance, it is possible to name the equations with a `name`-tag, using +a syntax like: + + model; + + [name = 'Budget constraint']; + c + k = k^theta*A; + + end; + +Here, `name` is the keyword indicating that the tag names the equation. +If an equation of the model is tagged with a name, the `resid` command +will display the name of the equations (which may be more informative +than the equation numbers) in addition to the equation number. Several +tags for one equation can be separated using a comma: + + model; + + [name='Taylor rule',mcp = 'r > -1.94478'] + r = rho*r(-1) + (1-rho)*(gpi*Infl+gy*YGap) + e; + + end; + +More information on tags is available at +. + +There can be several `model` blocks, in which case they are simply +concatenated. The set of effective options is also the concatenation of +the options declared in all the blocks, but in that case you may rather +want to use the `model_options`{.interpreted-text role="comm"} command. + +*Options* + +::: {.option} +linear + +Declares the model as being linear. It spares oneself from having to +declare initial values for computing the steady state of a stationary +linear model. This option can't be used with non-linear models, it will +NOT trigger linearization of the model. +::: + +::: {.option} +no\_static + +Don't create the static model file. This can be useful for models which +don't have a steady state. +::: + +::: {.option} +differentiate\_forward\_vars differentiate\_forward\_vars = ( +VARIABLE\_NAME \[VARIABLE\_NAME \...\] ) + +Tells Dynare to create a new auxiliary variable for each endogenous +variable that appears with a lead, such that the new variable is the +time differentiate of the original one. More precisely, if the model +contains `x(+1)`, then a variable `AUX_DIFF_VAR` will be created such +that `AUX_DIFF_VAR=x-x(-1)`, and `x(+1)` will be replaced with +`x+AUX_DIFF_VAR(+1)`. + +The transformation is applied to all endogenous variables with a lead if +the option is given without a list of variables. If there is a list, the +transformation is restricted to endogenous with a lead that also appear +in the list. + +This option can useful for some deterministic simulations where +convergence is hard to obtain. Bad values for terminal conditions in the +case of very persistent dynamics or permanent shocks can hinder correct +solutions or any convergence. The new differentiated variables have +obvious zero terminal conditions (if the terminal condition is a steady +state) and this in many cases helps convergence of simulations. +::: + +::: {.option} +parallel\_local\_files = ( FILENAME \[, FILENAME\]\... ) + +Declares a list of extra files that should be transferred to follower +nodes when doing a parallel computation (see +`paral-conf`{.interpreted-text role="ref"}). +::: + +::: {.option} +balanced\_growth\_test\_tol = DOUBLE + +Tolerance used for determining whether cross-derivatives are zero in the +test for balanced growth path (the latter is documented on +). Default: +`1e-6` +::: + +*Example* (Elementary RBC model) + +> var c k; +> varexo x; +> parameters aa alph bet delt gam; +> +> model; +> c = - k + aa*x*k(-1)^alph + (1-delt)*k(-1); +> c^(-gam) = (aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam)/(1+bet); +> end; + +*Example* (Use of model local variables) + +> The following program: +> +> model; +> # gamma = 1 - 1/sigma; +> u1 = c1^gamma/gamma; +> u2 = c2^gamma/gamma; +> end; +> +> \...is formally equivalent to: +> +> model; +> u1 = c1^(1-1/sigma)/(1-1/sigma); +> u2 = c2^(1-1/sigma)/(1-1/sigma); +> end; + +*Example* (A linear model) + +> model(linear); +> x = a*x(-1)+b*y(+1)+e_x; +> y = d*y(-1)+e_y; +> end; +::: + +::: {.command} +model\_options (OPTIONS\...); + +This command accepts the same options as the `model`{.interpreted-text +role="bck"} block. + +The purpose of this statement is to specify the options that apply to +the whole model, when there are several `model` blocks, so as to restore +the symmetry between those blocks (since otherwise one `model` block +would typically bear the options, while the other ones would typically +have no option). +::: + +::: {.command} +model\_remove (TAGS\...); + +This command removes equations that appeared in a previous +`model`{.interpreted-text role="bck"} block. + +The equations must be specified by a list of tag values, separated by +commas. Each element of the list is either a simple quoted string, in +which case it designates an equation by its `name` tag; or a tag name +(without quotes), followed by an equal sign, then by the tag value +(within quotes). + +Each removed equation must either have an `endogenous` tag, or have a +left hand side containing a single endogenous variable. The +corresponding endogenous variable will be either turned into an +exogenous (if it is still used in somewhere in the model at that point), +otherwise it will be removed from the model. + +*Example* + +> var c k dummy1 dummy2; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1) + dummy1; +> c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> [ name = 'eq:dummy1', endogenous = 'dummy1' ] +> c*k = dummy1; +> [ foo = 'eq:dummy2' ] +> log(dummy2) = k + 2; +> end; +> +> model_remove('eq:dummy1', foo = 'eq:dummy2'); +> +> In the above example, the last two equations will be removed, `dummy1` +> will be turned into an exogenous, and `dummy2` will be removed. +::: + +::: {.block} +model\_replace (TAGS\...); + +This block replaces several equations in the model. It removes the +equations given by the tags list (with the same syntax as in +`model_remove`{.interpreted-text role="comm"}), and it adds equations +given within the block (with the same syntax as +`model`{.interpreted-text role="bck"}). + +No variable is removed or has its type changed in the process. + +*Example* + +> var c k; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); +> [ name = 'dummy' ] +> c*k = 1; +> end; +> +> model_replace('dummy'); +> c^(-gam) = (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> end; +> +> In the above example, the dummy equation is replaced by a proper Euler +> equation. +::: + +Dynare has the ability to output the original list of model equations to +a LaTeX file, using the `write_latex_original_model` command, the list +of transformed model equations using the +`write_latex_dynamic_model command`, and the list of static model +equations using the `write_latex_static_model` command. + +::: {.command} +write\_latex\_original\_model (OPTIONS); + +This command creates two LaTeX files: one containing the model as +defined in the model block and one containing the LaTeX document header +information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/original.tex`, which includes a file called +`FILENAME/latex/original_content.tex` (also created by Dynare) +containing the list of all the original model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Time subscripts (`t`, `t+1`, `t-1`, \...) will be appended to the +variable names, as LaTeX subscripts. + +Compiling the TeX file requires the following LaTeX packages: +`geometry, fullpage, breqn`. + +*Options* + +::: {.option} +write\_equation\_tags + +Write the equation tags in the LaTeX output. The equation tags will be +interpreted with LaTeX markups. +::: +::: + +::: {.command} +write\_latex\_dynamic\_model ; write\_latex\_dynamic\_model (OPTIONS); + +This command creates two LaTeX files: one containing the dynamic model +and one containing the LaTeX document header information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/dynamic.tex`, which includes a file called +`FILENAME/latex/dynamic_content.tex` (also created by Dynare) containing +the list of all the dynamic model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Time subscripts (`t`, `t+1`, `t-1`, \...) will be appended to the +variable names, as LaTeX subscripts. + +Note that the model written in the TeX file will differ from the model +declared by the user in the following dimensions: + +> - The timing convention of predetermined variables (see +> `predetermined_variables`{.interpreted-text role="comm"}) will +> have been changed to the default Dynare timing convention; in +> other words, variables declared as predetermined will be lagged on +> period back, +> - The `EXPECTATION` operators will have been removed, replaced by +> auxiliary variables and new equations (as explained in the +> documentation of +> `EXPECTATION `{.interpreted-text +> role="op"}), +> - Endogenous variables with leads or lags greater or equal than two +> will have been removed, replaced by new auxiliary variables and +> equations, +> - Exogenous variables with leads or lags will also have been +> replaced by new auxiliary variables and equations. + +For the required LaTeX packages, see +`write_latex_original_model`{.interpreted-text role="comm"}. + +*Options* + +::: {.option} +write\_equation\_tags + +See `write_equation_tags`{.interpreted-text role="opt"} +::: +::: + +::: {.command} +write\_latex\_static\_model (OPTIONS); + +This command creates two LaTeX files: one containing the static model +and one containing the LaTeX document header information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/static.tex`, which includes a file called +`FILENAME/latex/static_content.tex` (also created by Dynare) containing +the list of all the steady state model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Note that the model written in the TeX file will differ from the model +declared by the user in the some dimensions (see +`write_latex_dynamic_model`{.interpreted-text role="comm"} for details). + +Also note that this command will not output the contents of the optional +`steady_state_model` block (see `steady_state_model`{.interpreted-text +role="bck"}); it will rather output a static version (i.e. without leads +and lags) of the dynamic `model` declared in the model block. To write +the LaTeX contents of the `steady_state_model` see +`write_latex_steady_state_model`{.interpreted-text role="comm"}. + +For the required LaTeX packages, see +`write_latex_original_model`{.interpreted-text role="comm"}. + +*Options* + +::: {.option} +write\_equation\_tags + +See `write_equation_tags`{.interpreted-text role="opt"}. +::: +::: + +::: {.command} +write\_latex\_steady\_state\_model + +This command creates two LaTeX files: one containing the steady state +model and one containing the LaTeX document header information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/steady_state.tex`, which includes a file called +`FILENAME/latex/steady_state_content.tex` (also created by Dynare) +containing the list of all the steady state model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Note that the model written in the `.tex` file will differ from the +model declared by the user in some dimensions (see +`write_latex_dynamic_model`{.interpreted-text role="comm"} for details). + +For the required LaTeX packages, see +`write_latex_original_model`{.interpreted-text role="comm"}. +::: + +Auxiliary variables {#aux-variables} +------------------- + +The model which is solved internally by Dynare is not exactly the model +declared by the user. In some cases, Dynare will introduce auxiliary +endogenous variables---along with corresponding auxiliary +equations---which will appear in the final output. + +The main transformation concerns leads and lags. Dynare will perform a +transformation of the model so that there is only one lead and one lag +on endogenous variables and no leads/lags on exogenous variables. + +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_LEAD` or `AUX_EXO_LAG` respectively). + +Another transformation is done for the `EXPECTATION` operator. For each +occurrence of this operator, Dynare creates an auxiliary variable +defined by a new equation, and replaces the expectation operator by a +reference to the new auxiliary variable. For example, the expression +`EXPECTATION(-1)(x(+1))` is replaced by `AUX_EXPECT_LAG_1(-1)`, and the +new auxiliary variable is declared as `AUX_EXPECT_LAG_1 = x(+2)`. + +Auxiliary variables are also introduced by the preprocessor for the +`ramsey_model` and `ramsey_policy` commands. In this case, they are used +to represent the Lagrange multipliers when first order conditions of the +Ramsey problem are computed. The new variables take the form `MULT_i`, +where *i* represents the constraint with which the multiplier is +associated (counted from the order of declaration in the model block). + +Auxiliary variables are also introduced by the +`differentiate_forward_vars` option of the model block. The new +variables take the form `AUX_DIFF_FWRD_i`, and are equal to `x-x(-1)` +for some endogenous variable `x`. + +Finally, auxiliary variables will arise in the context of employing the +`diff`-operator. + +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`. + +See +for more technical details on auxiliary variables. + +Initial and terminal conditions {#init-term-cond} +------------------------------- + +For most simulation exercises, it is necessary to provide initial (and +possibly terminal) conditions. It is also necessary to provide initial +guess values for non-linear solvers. This section describes the +statements used for those purposes. + +In many contexts (deterministic or stochastic), it is necessary to +compute the steady state of a non-linear model: `initval` then specifies +numerical initial values for the non-linear solver. The command `resid` +can be used to compute the equation residuals for the given initial +values. + +Used in perfect foresight mode, the types of forward-looking models for +which Dynare was designed require both initial and terminal conditions. +Most often these initial and terminal conditions are static equilibria, +but not necessarily. + +One typical application is to consider an economy at the equilibrium at +time 0, trigger a shock in first period, and study the trajectory of +return to the initial equilibrium. To do that, one needs `initval` and +`shocks` (see `shocks-exo`{.interpreted-text role="ref"}). + +Another one is to study how an economy, starting from arbitrary initial +conditions at time 0 converges towards equilibrium. In this case models, +the command `histval` permits to specify different historical initial +values for variables with lags for the periods before the beginning of +the simulation. Due to the design of Dynare, in this case `initval` is +used to specify the terminal conditions. + +::: {.block} +initval ; initval(OPTIONS\...); + +The `initval` block has two main purposes: providing guess values for +non-linear solvers in the context of perfect foresight simulations and +providing guess values for steady state computations in both perfect +foresight and stochastic simulations. Depending on the presence of +`histval` and `endval` blocks it is also used for declaring the initial +and terminal conditions in a perfect foresight simulation exercise. +Because of this interaction of the meaning of an `initval` block with +the presence of `histval` and `endval` blocks in perfect foresight +simulations, it is strongly recommended to check that the constructed +`oo_.endo_simul` and `oo_.exo_simul` variables contain the desired +values after running `perfect_foresight_setup` and before running +`perfect_foresight_solver`. In the presence of leads and lags, these +subfields of the results structure will store the historical values for +the lags in the first column/row and the terminal values for the leads +in the last column/row. + +The `initval` block is terminated by `end;` and contains lines of the +form: + +> VARIABLE\_NAME = EXPRESSION; + +*In a deterministic (i.e. perfect foresight) model* + +First, both the `oo_.endo_simul` and `oo_.exo_simul` variables storing +the endogenous and exogenous variables will be filled with the values +provided by this block. If there are no other blocks present, it will +therefore provide the initial and terminal conditions for all the +endogenous and exogenous variables, because it will also fill the last +column/row of these matrices. For the intermediate simulation periods it +thereby provides the starting values for the solver. In the presence of +a `histval` block (and therefore absence of an `endval` block), this +`histval` block will provide/overwrite the historical values for the +state variables (lags) by setting the first column/row of +`oo_.endo_simul` and `oo_.exo_simul`. This implies that the `initval` +block in the presence of `histval` only sets the terminal values for the +variables with leads and provides initial values for the perfect +foresight solver. + +Because of these various functions of `initval` it is often necessary to +provide values for all the endogenous variables in an `initval` block. +Initial and terminal conditions are strictly necessary for lagged/leaded +variables, while feasible starting values are required for the solver. +It is important to be aware that if some variables, endogenous or +exogenous, are not mentioned in the `initval` block, a zero value is +assumed. It is particularly important to keep this in mind when +specifying exogenous variables using `varexo` that are not allowed to +take on the value of zero, like e.g. TFP. + +Note that if the `initval` block is immediately followed by a `steady` +command, its semantics are slightly changed. The `steady` command will +compute the steady state of the model for all the endogenous variables, +assuming that exogenous variables are kept constant at the value +declared in the `initval` block. These steady state values conditional +on the declared exogenous variables are then written into +`oo_.endo_simul` and take up the potential roles as historical and +terminal conditions as well as starting values for the solver. An +`initval` block followed by `steady` is therefore formally equivalent to +an `initval` block with the specified values for the exogenous +variables, and the endogenous variables set to the associated steady +state values conditional on the exogenous variables. + +*In a stochastic model* + +The main purpose of `initval` is to provide initial guess values for the +non-linear solver in the steady state computation. Note that if the +`initval` block is not followed by `steady`, the steady state +computation will still be triggered by subsequent commands +(`stoch_simul`, `estimation`\...). + +As such, `initval` allows specifying the initial instrument value for +steady state finding when providing an analytical conditional steady +state file for `ramsey_model`-computations. + +It is not necessary to declare 0 as initial value for exogenous +stochastic variables, since it is the only possible value. + +The subsequently computed steady state (not the initial values, use +histval for this) will be used as the initial condition at all the +periods preceeding the first simulation period for the three possible +types of simulations in stochastic mode: + +> - `stoch_simul`{.interpreted-text role="comm"}, if the `periods` +> option is specified. +> - `forecast`{.interpreted-text role="comm"} as the initial point at +> which the forecasts are computed. +> - `conditional_forecast`{.interpreted-text role="comm"} as the +> initial point at which the conditional forecasts are computed. + +To start simulations at a particular set of starting values that are not +a computed steady state, use `histval`{.interpreted-text role="bck"}. + +*Options* + +::: {.option} +all\_values\_required + +Issues an error and stops processing the .mod file if there is at least +one endogenous or exogenous variable that has not been set in the +initval block. +::: + +*Example* + +: initval; + c = 1.2; + k = 12; + x = 1; + end; + + steady; +::: + +::: {.block} +endval ; endval (OPTIONS\...); + +This block is terminated by `end;` and contains lines of the form: + +> VARIABLE\_NAME = EXPRESSION; + +The `endval` block makes only sense in a deterministic model and cannot +be used together with `histval`. Similar to the `initval` command, it +will fill both the `oo_.endo_simul` and `oo_.exo_simul` variables +storing the endogenous and exogenous variables with the values provided +by this block. If no `initval` block is present, it will fill the whole +matrices, therefore providing the initial and terminal conditions for +all the endogenous and exogenous variables, because it will also fill +the first and last column/row of these matrices. Due to also filling the +intermediate simulation periods it will provide the starting values for +the solver as well. + +If an `initval` block is present, `initval` will provide the historical +values for the variables (if there are states/lags), while `endval` will +fill the remainder of the matrices, thereby still providing *i*) the +terminal conditions for variables entering the model with a lead and +*ii*) the initial guess values for all endogenous variables at all the +simulation dates for the perfect foresight solver. + +Note that if some variables, endogenous or exogenous, are NOT mentioned +in the `endval` block, the value assumed is that of the last `initval` +block or `steady` command (if present). Therefore, in contrast to +`initval`, omitted variables are not automatically assumed to be 0 in +this case. Again, it is strongly recommended to check the constructed +`oo_.endo_simul` and `oo_.exo_simul` variables after running +`perfect_foresight_setup` and before running `perfect_foresight_solver` +to see whether the desired outcome has been achieved. + +Like `initval`, if the `endval` block is immediately followed by a +`steady` command, its semantics are slightly changed. The `steady` +command will compute the steady state of the model for all the +endogenous variables, assuming that exogenous variables are kept +constant to the value declared in the `endval` block. These steady state +values conditional on the declared exogenous variables are then written +into `oo_.endo_simul` and therefore take up the potential roles as +historical and terminal conditions as well as starting values for the +solver. An `endval` block followed by `steady` is therefore formally +equivalent to an `endval` block with the specified values for the +exogenous variables, and the endogenous variables set to the associated +steady state values. + +*Options* + +::: {.option} +all\_values\_required + +See `all_values_required`{.interpreted-text role="opt"}. +::: + +*Example* + +> var c k; +> varexo x; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); +> c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> end; +> +> initval; +> c = 1.2; +> k = 12; +> x = 1; +> end; +> +> steady; +> +> endval; +> c = 2; +> k = 20; +> x = 2; +> end; +> +> steady; +> +> perfect_foresight_setup(periods=200); +> perfect_foresight_solver; +> +> In this example, the problem is finding the optimal path for +> consumption and capital for the periods $t=1$ to $T=200$, given the +> path of the exogenous technology level `x`. `c` is a forward-looking +> variable and the exogenous variable `x` appears with a lead in the +> expected return of physical capital, while `k` is a purely +> backward-looking (state) variable. +> +> The initial equilibrium is computed by `steady` conditional on `x=1`, +> and the terminal one conditional on `x=2`. The `initval` block sets +> the initial condition for `k` (since it is the only backward-looking +> variable), while the `endval` block sets the terminal condition for +> `c` (since it is the only forward-looking endogenous variable). The +> starting values for the perfect foresight solver are given by the +> `endval` block. See below for more details. + +*Example* + +> var c k; +> varexo x; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); +> c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> end; +> +> initval; +> k = 12; +> end; +> +> endval; +> c = 2; +> x = 1.1; +> end; +> +> perfect_foresight_setup(periods=200); +> perfect_foresight_solver; +> +> In this example, there is no [steady]{.title-ref} command, hence the +> conditions are exactly those specified in the [initval]{.title-ref} +> and [endval]{.title-ref} blocks. We need terminal conditions for `c` +> and `x`, since both appear with a lead, and an initial condition for +> `k`, since it appears with a lag. +> +> Setting `x=1.1` in the `endval` block without a `shocks` block implies +> that technology is at $1.1$ in $t=1$ and stays there forever, because +> `endval` is filling all entries of `oo_.endo_simul` and +> `oo_.exo_simul` except for the very first one, which stores the +> initial conditions and was set to $0$ by the `initval` block when not +> explicitly specifying a value for it. +> +> Because the law of motion for capital is backward-looking, we need an +> initial condition for `k` at time $0$. Due to the presence of +> `endval`, this cannot be done via a `histval` block, but rather must +> be specified in the `initval` block. Similarly, because the Euler +> equation is forward-looking, we need a terminal condition for `c` at +> $t=201$, which is specified in the `endval` block. +> +> As can be seen, it is not necessary to specify `c` and `x` in the +> `initval` block and `k` in the `endval` block, because they have no +> impact on the results. Due to the optimization problem in the first +> period being to choose `c,k` at $t=1$ given the predetermined capital +> stock `k` inherited from $t=0$ as well as the current and future +> values for technology `x`, the values for `c` and `x` at time $t=0$ +> play no role. The same applies to the choice of `c,k` at time $t=200$, +> which does not depend on `k` at $t=201$. As the Euler equation shows, +> that choice only depends on current capital as well as future +> consumption `c` and technology `x`, but not on future capital `k`. The +> intuitive reason is that those variables are the consequence of +> optimization problems taking place in at periods $t=0$ and $t=201$, +> respectively, which are not modeled here. + +*Example* + +> initval; +> c = 1.2; +> k = 12; +> x = 1; +> end; +> +> endval; +> c = 2; +> k = 20; +> x = 1.1; +> end; +> +> In this example, initial conditions for the forward-looking variables +> `x` and `c` are provided, together with a terminal condition for the +> backward-looking variable `k`. As shown in the previous example, these +> values will not affect the simulation results. Dynare simply takes +> them as given and basically assumes that there were realizations of +> exogenous variables and states that make those choices equilibrium +> values (basically initial/terminal conditions at the unspecified time +> periods $t<0$ and $t>201$). +> +> The above example suggests another way of looking at the use of +> `steady` after `initval` and `endval`. Instead of saying that the +> implicit unspecified conditions before and after the simulation range +> have to fit the initial/terminal conditions of the endogenous +> variables in those blocks, steady specifies that those conditions at +> $t<0$ and $t>201$ are equal to being at the steady state given the +> exogenous variables in the `initval` and `endval` blocks. The +> endogenous variables at $t=0$ and $t=201$ are then set to the +> corresponding steady state equilibrium values. +> +> The fact that `c` at $t=0$ and `k` at $t=201$ specified in `initval` +> and `endval` are taken as given has an important implication for +> plotting the simulated vector for the endogenous variables, i.e. the +> rows of `oo_.endo_simul`: this vector will also contain the initial +> and terminal conditions and thus is 202 periods long in the example. +> When you specify arbitrary values for the initial and terminal +> conditions for forward- and backward-looking variables, respectively, +> these values can be very far away from the endogenously determined +> values at $t=1$ and $t=200$. While the values at $t=0$ and $t=201$ are +> unrelated to the dynamics for $0 strange-looking large jumps. In the example above, consumption will +> display a large jump from $t=0$ to $t=1$ and capital will jump from +> $t=200$ to $t=201$ when using `rplot`{.interpreted-text role="comm"} +> or manually plotting `oo_.endo_val`. +::: + +::: {.block} +histval ; histval (OPTIONS\...); + +*In a deterministic perfect foresight context* + +In models with lags on more than one period, the `histval` block permits +to specify different historical initial values for different periods of +the state variables. In this case, the `initval` block takes over the +role of specifying terminal conditions and starting values for the +solver. Note that the `histval` block does not take non-state variables. + +This block is terminated by `end;` and contains lines of the form: + +> VARIABLE\_NAME(INTEGER) = EXPRESSION; + +EXPRESSION is any valid expression returning a numerical value and can +contain already initialized variable names. + +By convention in Dynare, period 1 is the first period of the simulation. +Going backward in time, the first period before the start of the +simulation is period 0, then period -1, and so on. + +State variables not initialized in the `histval` block are assumed to +have a value of zero at period 0 and before. Note that `histval` cannot +be followed by `steady`. + +*Example* + +> model; +> x=1.5*x(-1)-0.6*x(-2)+epsilon; +> log(c)=0.5*x+0.5*log(c(+1)); +> end; +> +> histval; +> x(0)=-1; +> x(-1)=0.2; +> end; +> +> initval; +> c=1; +> x=1; +> end; +> +> In this example, `histval` is used to set the historical conditions +> for the two lags of the endogenous variable `x`, stored in the first +> column of `oo_.endo_simul`. The `initval` block is used to set the +> terminal condition for the forward looking variable `c`, stored in the +> last column of `oo_.endo_simul`. Moreover, the `initval` block defines +> the starting values for the perfect foresight solver for both +> endogenous variables `c` and `x`. + +*In a stochastic simulation context* + +In the context of stochastic simulations, `histval` allows setting the +starting point of those simulations in the state space. As for the case +of perfect foresight simulations, all not explicitly specified variables +are set to 0. Moreover, as only states enter the recursive policy +functions, all values specified for control variables will be ignored. +This can be used + +> - In `stoch_simul`{.interpreted-text role="comm"}, if the `periods` +> option is specified. Note that this only affects the starting +> point for the simulation, but not for the impulse response +> functions. When using the `loglinear `{.interpreted-text +> role="ref"} option, the `histval` block nevertheless takes the +> unlogged starting values. +> - In `forecast`{.interpreted-text role="comm"} as the initial point +> at which the forecasts are computed. When using the `loglinear +> `{.interpreted-text role="ref"} option, the `histval` block +> nevertheless takes the unlogged starting values. +> - In `conditional_forecast`{.interpreted-text role="comm"} for a +> calibrated model as the initial point at which the conditional +> forecasts are computed. When using the +> `loglinear `{.interpreted-text role="ref"} option, the +> histval-block nevertheless takes the unlogged starting values. +> - In `Ramsey policy `{.interpreted-text role="comm"}, +> where it also specifies the values of the endogenous states +> (including lagged exogenous) at which the objective function of +> the planner is computed. Note that the initial values of the +> Lagrange multipliers associated with the planner's problem cannot +> be set (see `evaluate_planner_objective`{.interpreted-text +> role="comm"}). + +*Options* + +::: {.option} +all\_values\_required + +See `all_values_required`{.interpreted-text role="opt"}. +::: + +*Example* + +> var x y; +> varexo e; +> +> model; +> x = y(-1)^alpha*y(-2)^(1-alpha)+e; +> +> end; +> +> initval; +> x = 1; +> y = 1; +> e = 0.5; +> end; +> +> steady; +> +> histval; +> y(0) = 1.1; +> y(-1) = 0.9; +> end; +> +> stoch_simul(periods=100); +::: + +::: {.command} +resid ; + +This command will display the residuals of the static equations of the +model, using the values given for the endogenous in the last `initval` +or `endval` block (or the steady state file if you provided one, see +`st-st`{.interpreted-text role="ref"}). + +*Options* + +::: {.option} +non\_zero + +Only display non-zero residuals. +::: +::: + +::: {.command} +initval\_file (OPTIONS\...); + +In a deterministic setup, this command is used to specify a path for all +endogenous and exogenous variables. The length of these paths must be +equal to the number of simulation periods, plus the number of leads and +the number of lags of the model (for example, with 50 simulation +periods, in a model with 2 lags and 1 lead, the paths must have a length +of 53). Note that these paths cover two different things: + +> - The constraints of the problem, which are given by the path for +> exogenous and the initial and terminal values for endogenous +> - The initial guess for the non-linear solver, which is given by the +> path for endogenous variables for the simulation periods +> (excluding initial and terminal conditions) + +In perfect foresight and stochastic contexts, `steady` uses the first +observation loaded by `initval_file` as guess value to solve for the +steady state of the model. This first observation is determined by the +`first_obs` option when it is used. + +Don't mix `initval_file` with `initval` statements. However, after +`initval_file`, you can modify the historical initial values with +`histval` or `histval_file` statement. + +There can be several `initval_file` statements in a model file. Each +statement resets `oo_.initval_series`. + +*Options* + +::: {.option} +datafile = FILENAME filename = FILENAME (deprecated) + +The name of the file containing the data. It must be included in quotes +if the filename contains a path or an extension. The command accepts the +following file formats: + +- M-file (extension `.m`): for each endogenous and exogenous variable, + the file must contain a row or column vector of the same name. +- MAT-file (extension `.mat`): same as for M-files. +- Excel file (extension `.xls` or `.xlsx`): for each endogenous and + exogenous variable, the file must contain a column of the same name. + NB: Octave only supports the `.xlsx` file extension and must have + the [io](https://octave.sourceforge.io/io/) package installed + (easily done via octave by typing '`pkg install -forge io`'). The + first column may contain the date +::: + +> of each observation. +> +> : - CSV files (extension `.csv`): for each endogenous and +> exogenous variable, the file must contain a column of the same +> name. The first column may contain the date of each +> observation. +> +::: {.option} +first\_obs = {INTEGER \| DATE} + +The observation number or the date (see +::: + +`dates-members`{.interpreted-text role="ref"}) of the first observation +to be used in the file + +::: {.option} +first\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates `{.interpreted-text role="ref"}) at which the +simulation (or the forecast) is starting. This option avoids to have to +compute the maximum number of lags in the model. The observation +corresponding to the first period of simulation doesn't need to exist in +the file as the only dates necessary for initialization are before that +date. + +::: {.option} +last\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates `{.interpreted-text role="ref"}) at which the +simulation (or the forecast) is ending. This option avoids to have to +compute the maximum number of leads in the model. + +::: {.option} +last\_obs = {INTEGER \| DATE} + +The observaton number or the date (see +::: + +`dates-members`{.interpreted-text role="ref"}) of the last observation +to be used in the file. + +::: {.option} +nobs = INTEGER +::: + +The number of observations to be used in the file (starting with first +of `first_obs` observation). + +::: {.option} +series = DSERIES NAME + +The name of a DSERIES containing the data (see +`dseries-members`{.interpreted-text role="ref"}) +::: + +*Example 1* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv` +(nothing guarantees that these vales are the steady state of the model). +The guess value for the trajectories are also taken from the file. The +file must contain at least 203 observations of variables `c`, `x` and +`e`. If there are more than 203 observations available in the file, the +first 203 are used by `perfect_foresight_setup(periods=200)`. Note that +the values for the auxiliary variable corresponding to `x(-2)` are +automatically computed by `initval_file`. + +*Example 2* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs=10); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv` +starting with the 10th observation in the file. There must be at least +212 observations in the file. + +*Example 3* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> ds = dseries(mydata.csv); lds = log(ds); +> +> initval\_file(series=lds, +> +> : first\_obs=2010Q1); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from dseries `lds`. All +observations are loaded starting with the 1st quarter of 2010 until the +end of the file. There must be data available at least until 2050Q3. + +*Example 4* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_simulation\_period=2010Q1); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv`. The +observations in the file must have dates. All observations are loaded +from the 3rd quarter of 2009 until the end of the file. There must be +data available in the file at least until 2050Q1. + +*Example 5* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : last\_obs = 212); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv`. The +first 212 observations are loaded and the first 203 observations will be +used by `perfect_foresight_setup(periods=200)`. + +*Example 6* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs = 10, +> +> > nobs = 203); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv`. +Observations 10 to 212 are loaded. + +*Example 7* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs = 10); +> +> steady; +> +> The values of the 10th observation of `mydata.csv` are used + +as guess value to compute the steady state. The exogenous variables are +set to values found in the file or zero if these variables aren\'t +present. +::: + +::: {.command} +histval\_file (OPTIONS\...); + +This command is equivalent to `histval`, except that it reads its input +from a file, and is typically used in conjunction with +`smoother2histval`. + +> *Options* + +::: {.option} +datafile = FILENAME filename = FILENAME (deprecated) + +The name of the file containing the data. The command accepts +::: + +the following file formats: + +> - M-file (extension `.m`): for each endogenous and exogenous +> variable, the file must contain a row or column vector of the same +> name. +> - MAT-file (extension `.mat`): same as for M-files. +> - Excel file (extension `.xls` or `.xlsx`): for each endogenous and +> exogenous variable, the file must contain a column of the same +> name. NB: Octave only supports the `.xlsx` file extension and must +> have the [io](https://octave.sourceforge.io/io/) package installed +> (easily done via octave by typing '`pkg install -forge io`'). The +> first column may contain the date of each observation. +> - CSV files (extension `.csv`): for each endogenous and exogenous +> variable, the file must contain a column of the same name. The +> first column may contain the date of each observation. + +::: {.option} +first\_obs = {INTEGER \| DATE} + +The observation number or the date (see +`dates-members`{.interpreted-text role="ref"}) of +::: + +the first observation to be used in the file + +::: {.option} +first\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates-members`{.interpreted-text role="ref"}) at which the simulation +(or the forecast) is starting. This option avoids to have to compute the +maximum number of lags in the model. The observation corresponding to +the first period of simulation doesn't need to exist in the file as the +only dates necessary for initialization are before that date. + +::: {.option} +last\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates `{.interpreted-text role="ref"}) at which the +simulation (or the forecast) is ending. This option avoids to have to +compute the maximum number of leads in the model. + +::: {.option} +last\_obs = {INTEGER \| DATE} + +The observation number or the date (see +`dates-members`{.interpreted-text role="ref"}) of the +::: + +last observation to be used in the file. + +::: {.option} +nobs = INTEGER +::: + +The number of observations to be used in the file (starting with first +of `first_obs` observation). + +::: {.option} +series = DSERIES NAME + +The name of a DSERIES containing the data (see +`dseries-members`{.interpreted-text role="ref"}) +::: + +*Example 1* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> steady\_state\_model; x = 0; c = exp(c\*x/(1 - d)); end; +> +> histval\_file(datafile=mydata.csv); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from the two +first rows of file `mydata.csv`. + +*Example 2* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : first\_obs=10); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from rows 10 +and 11 of file `mydata.csv`. + +*Example 3* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : first\_obs=2010Q1); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from +observations 2010Q1 and 2010Q2 of file `mydata.csv`. + +*Example 4* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : first\_simulation\_period=2010Q1) +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from +observations 2009Q3 and 2009Q4 of file `mydata.csv`. + +*Example 5* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : last\_obs = 4); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from the two +first rows of file `mydata.csv`. + +*Example 6* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs = 10, +> +> > nobs = 4); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from rows 10 +and 11 of file `mydata.csv`. + +*Example 7* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs=10); +> +> > histval\_file(datafile=myotherdata.csv); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +Historical initial values for the simulation are taken from the two +first rows of file `myotherdata.csv`. + +> Terminal values and guess values for the simulation are taken + +from file `mydata.csv` starting with the 12th observation in the file. +There must be at least 212 observations in the file. +::: + +Shocks on exogenous variables {#shocks-exo} +----------------------------- + +In a deterministic context, when one wants to study the transition of +one equilibrium position to another, it is equivalent to analyze the +consequences of a permanent shock and this in done in Dynare through the +proper use of `initval` and `endval`. + +Another typical experiment is to study the effects of a temporary shock +after which the system goes back to the original equilibrium (if the +model is stable\...). A temporary shock is a temporary change of value +of one or several exogenous variables in the model. Temporary shocks are +specified with the command `shocks`. + +In a stochastic framework, the exogenous variables take random values in +each period. In Dynare, these random values follow a normal distribution +with zero mean, but it belongs to the user to specify the variability of +these shocks. The non-zero elements of the matrix of variance-covariance +of the shocks can be entered with the `shocks` command. Or, the entire +matrix can be directly entered with `Sigma_e` (this use is however +deprecated). + +If the variance of an exogenous variable is set to zero, this variable +will appear in the report on policy and transition functions, but isn't +used in the computation of moments and of Impulse Response Functions. +Setting a variance to zero is an easy way of removing an exogenous +shock. + +Note that, by default, if there are several `shocks` or `mshocks` blocks +in the same `.mod` file, then they are cumulative: all the shocks +declared in all the blocks are considered; however, if a `shocks` or +`mshocks` block is declared with the `overwrite` option, then it +replaces all the previous `shocks` and `mshocks` blocks. + +::: {.block} +shocks ; shocks(overwrite); + +See above for the meaning of the `overwrite` option. + +*In deterministic context* + +For deterministic simulations, the `shocks` block specifies temporary +changes in the value of exogenous variables. For permanent shocks, use +an `endval` block. + +The block should contain one or more occurrences of the following group +of three lines: + + var VARIABLE_NAME; + periods INTEGER[:INTEGER] [[,] INTEGER[:INTEGER]]...; + values DOUBLE | (EXPRESSION) [[,] DOUBLE | (EXPRESSION) ]...; + +It is possible to specify shocks which last several periods and which +can vary over time. The `periods` keyword accepts a list of several +dates or date ranges, which must be matched by as many shock values in +the `values` keyword. Note that a range in the `periods` keyword can be +matched by only one value in the `values` keyword. If `values` +represents a scalar, the same value applies to the whole range. If +`values` represents a vector, it must have as many elements as there are +periods in the range. + +Note that shock values are not restricted to numerical constants: +arbitrary expressions are also allowed, but you have to enclose them +inside parentheses. + +The feasible range of `periods` is from 0 to the number of `periods` +specified in `perfect_foresight_setup`. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +Note that the first endogenous simulation period is period 1. Thus, a +shock value specified for the initial period 0 may conflict with (i.e. +may overwrite or be overwritten by) values for the initial period +specified with `initval` or `endval` (depending on the exact context). +Users should always verify the correct setting of `oo_.exo_simul` after +`perfect_foresight_setup`. +::: + +*Example* (with scalar values) + + shocks; + + var e; + periods 1; + values 0.5; + var u; + periods 4:5; + values 0; + var v; + periods 4:5 6 7:9; + values 1 1.1 0.9; + var w; + periods 1 2; + values (1+p) (exp(z)); + + end; + +*Example* (with vector values) + + xx = [1.2; 1.3; 1]; + + shocks; + var e; + periods 1:3; + values (xx); + end; + +*In stochastic context* + +For stochastic simulations, the `shocks` block specifies the non zero +elements of the covariance matrix of the shocks of exogenous variables. + +You can use the following types of entries in the block: + +- Specification of the standard error of an exogenous variable. + + var VARIABLE_NAME; stderr EXPRESSION; + +- Specification of the variance of an exogenous variable. + + var VARIABLE_NAME = EXPRESSION; + +- Specification the covariance of two exogenous variables. + + var VARIABLE_NAME, VARIABLE_NAME = EXPRESSION; + +- Specification of the correlation of two exogenous variables. + + corr VARIABLE_NAME, VARIABLE_NAME = EXPRESSION; + +In an estimation context, it is also possible to specify variances and +covariances on endogenous variables: in that case, these values are +interpreted as the calibration of the measurement errors on these +variables. This requires the `varobs` command to be specified before the +`shocks` block. + +*Example* + + shocks; + var e = 0.000081; + var u; stderr 0.009; + corr e, u = 0.8; + var v, w = 2; + end; + +*In stochastic optimal policy context* + +When computing conditional welfare in a `ramsey_model` or +`discretionary_policy` context, welfare is conditional on the state +values inherited by planner when making choices in the first period. The +information set of the first period includes the respective exogenous +shock realizations. Thus, their known value can be specified using the +perfect foresight syntax. Note that i) all other values specified for +periods than period 1 will be ignored and ii) the value of lagged shocks +(e.g. in the case of news shocks) is specified with `histval`. + +*Example* + + shocks; + var u; stderr 0.008; + var u; + periods 1; + values 1; + end; + +*Mixing deterministic and stochastic shocks* + +It is possible to mix deterministic and stochastic shocks to build +models where agents know from the start of the simulation about future +exogenous changes. In that case `stoch_simul` will compute the rational +expectation solution adding future information to the state space +(nothing is shown in the output of `stoch_simul`) and `forecast` will +compute a simulation conditional on initial conditions and future +information. + +*Example* + + varexo_det tau; + varexo e; + ... + shocks; + var e; stderr 0.01; + var tau; + periods 1:9; + values -0.15; + end; + + stoch_simul(irf=0); + + forecast; +::: + + + +::: {.matcomm} +get\_shock\_stderr\_by\_name (\'EXOGENOUS\_NAME\'); + +Given the name of an exogenous variable, returns its standard deviation, +as set by a previous `shocks` block. +::: + +::: {.matcomm} +set\_shock\_stderr\_value (\'EXOGENOUS\_NAME\', MATLAB\_EXPRESSION); + +Sets the standard deviation of an exgonous variable. This does +essentially the same as setting the standard error via a `shocks` block, +except that it accepts arbitrary Julia expressions, and that it +works from Julia scripts. +::: + +Steady state {#st-st} +------------ + +There are two ways of computing the steady state (i.e. the static +equilibrium) of a model. The first way is to let Dynare compute the +steady state using a nonlinear Newton-type solver; this should work for +most models, and is relatively simple to use. The second way is to give +more guidance to Dynare, using your knowledge of the model, by providing +it with a method to compute the steady state, either using a +[steady\_state\_model]{.title-ref} block or writing matlab routine. + +### Finding the steady state with Dynare nonlinear solver + +::: {.command} +steady ; steady (OPTIONS\...); + +This command computes the steady state of a model using a nonlinear +Newton-type solver and displays it. When a steady state file is used +`steady` displays the steady state and checks that it is a solution of +the static model. + +More precisely, it computes the equilibrium value of the endogenous +variables for the value of the exogenous variables specified in the +previous `initval` or `endval` block. + +`steady` uses an iterative procedure and takes as initial guess the +value of the endogenous variables set in the previous `initval` or +`endval` block. + +For complicated models, finding good numerical initial values for the +endogenous variables is the trickiest part of finding the equilibrium of +that model. Often, it is better to start with a smaller model and add +new variables one by one. + +*Options* + +::: {#steady_maxit} +::: {.option} +maxit = INTEGER + +Determines the maximum number of iterations used in the non-linear +solver. The default value of `maxit` is 50. +::: +::: + +::: {#steady_tolf} +::: {.option} +tolf = DOUBLE + +Convergence criterion for termination based on the function value. +Iteration will cease when the residuals are smaller than `tolf`. +Default: `eps^(1/3)` +::: +::: + +::: {.option} +tolx = DOUBLE + +Convergence criterion for termination based on the step tolerance along. +Iteration will cease when the attempted step size is smaller than +`tolx`. Default: `eps^(2/3)` +::: + + +::: {.option} +homotopy\_mode = INTEGER + +Use a homotopy (or divide-and-conquer) technique to solve for the steady +state. If you use this option, you must specify a `homotopy_setup` +block. This option can take three possible values: + +> `1` +> +> > In this mode, all the parameters are changed simultaneously, and the +> > distance between the boundaries for each parameter is divided in as +> > many intervals as there are steps (as defined by the +> > `homotopy_steps` option); the problem is solved as many times as +> > there are steps. +> +> `2` +> +> > Same as mode `1`, except that only one parameter is changed at a +> > time; the problem is solved as many times as steps times number of +> > parameters. +> +> `3` +> +> > Dynare tries first the most extreme values. If it fails to compute +> > the steady state, the interval between initial and desired values is +> > divided by two for all parameters. Every time that it is impossible +> > to find a steady state, the previous interval is divided by two. +> > When it succeeds to find a steady state, the previous interval is +> > multiplied by two. In that last case `homotopy_steps` contains the +> > maximum number of computations attempted before giving up. +::: + +::: {.option} +homotopy\_steps = INTEGER + +Defines the number of steps when performing a homotopy. See +`homotopy_mode` option for more details. +::: + +::: {.option} +homotopy\_force\_continue = INTEGER + +This option controls what happens when homotopy fails. + +> `0` +> +> > `steady` fails with an error message +> +> `1` +> +> > `steady` keeps the values of the last homotopy step that was +> > successful and continues. **BE CAREFUL**: parameters and/or +> > exogenous variables are NOT at the value expected by the user + +Default is `0`. +::: + +::: {.option} +nocheck + +Don't check the steady state values when they are provided explicitly +either by a steady state file or a `steady_state_model` block. This is +useful for models with unit roots as, in this case, the steady state is +not unique or doesn't exist. +::: + + +*Example* + +See `init-term-cond`{.interpreted-text role="ref"}. +::: + +After computation, the steady state is available in the following +variable: + +::: {.matvar} +[oo]().steady\_state + +Contains the computed steady state. Endogenous variables are ordered in +the order of declaration used in the `var` command (which is also the +order used in `M_.endo_names`). +::: + +::: {.matcomm} +get\_mean (\'ENDOGENOUS\_NAME\' \[, \'ENDOGENOUS\_NAME\'\]\... ); + +Returns the steady of state of the given endogenous variable(s), as it +is stored in `oo_.steady_state`. Note that, if the steady state has not +yet been computed with `steady`, it will first try to compute it. +::: + +::: {.block} +homotopy\_setup ; + +This block is used to declare initial and final values when using a +homotopy method. It is used in conjunction with the option +`homotopy_mode` of the steady command. + +The idea of homotopy (also called divide-and-conquer by some authors) is +to subdivide the problem of finding the steady state into smaller +problems. It assumes that you know how to compute the steady state for a +given set of parameters, and it helps you finding the steady state for +another set of parameters, by incrementally moving from one to another +set of parameters. + +The purpose of the `homotopy_setup` block is to declare the final (and +possibly also the initial) values for the parameters or exogenous that +will be changed during the homotopy. It should contain lines of the +form: + + VARIABLE_NAME, EXPRESSION, EXPRESSION; + +This syntax specifies the initial and final values of a given +parameter/exogenous. + +There is an alternative syntax: + + VARIABLE_NAME, EXPRESSION; + +Here only the final value is specified for a given parameter/exogenous; +the initial value is taken from the preceeding `initval` block. + +A necessary condition for a successful homotopy is that Dynare must be +able to solve the steady state for the initial parameters/exogenous +without additional help (using the guess values given in the `initval` +block). + +If the homotopy fails, a possible solution is to increase the number of +steps (given in `homotopy_steps` option of `steady`). + +*Example* + +In the following example, Dynare will first compute the steady state for +the initial values (`gam=0.5` and `x=1`), and then subdivide the problem +into 50 smaller problems to find the steady state for the final values +(`gam=2` and `x=2`): + + var c k; + varexo x; + + parameters alph gam delt bet aa; + alph=0.5; + delt=0.02; + aa=0.5; + bet=0.05; + + model; + c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); + c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); + end; + + initval; + x = 1; + k = ((delt+bet)/(aa*x*alph))^(1/(alph-1)); + c = aa*x*k^alph-delt*k; + end; + + homotopy_setup; + gam, 0.5, 2; + x, 2; + end; + + steady(homotopy_mode = 1, homotopy_steps = 50); +::: + +### Providing the steady state to Dynare + +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 +`steady`. Again, there are two options for doing that: + +> - The easiest way is to write a `steady_state_model` block, which is +> described below in more details. See also `fs2000.mod` in the +> `examples` directory for an example. The steady state file +> generated by Dynare will be called `+FILENAME/steadystate.m.` +> - You can write the corresponding MATLAB function by hand. If your +> MOD-file is called `FILENAME.mod`, the steady state file must be +> called `FILENAME_steadystate.m`. See `NK_baseline_steadystate.m` +> in the examples directory for an example. This option gives a bit +> more flexibility (loops and conditional structures can be used), +> at the expense of a heavier programming burden and a lesser +> efficiency. + +Note that both files allow to update parameters in each call of the +function. This allows for example to calibrate a model to a labor supply +of 0.2 in steady state by setting the labor disutility parameter to a +corresponding value (see `NK_baseline_steadystate.m` in the `examples` +directory). They can also be used in estimation where some parameter may +be a function of an estimated parameter and needs to be updated for +every parameter draw. For example, one might want to set the capital +utilization cost parameter as a function of the discount rate to ensure +that capacity utilization is 1 in steady state. Treating both parameters +as independent or not updating one as a function of the other would lead +to wrong results. But this also means that care is required. Do not +accidentally overwrite your parameters with new values as it will lead +to wrong results. + +::: {.block} +steady\_state\_model ; + +When the analytical solution of the model is known, this command can be +used to help Dynare find the steady state in a more efficient and +reliable way, especially during estimation where the steady state has to +be recomputed for every point in the parameter space. + +Each line of this block consists of a variable (either an endogenous, a +temporary variable or a parameter) which is assigned an expression +(which can contain parameters, exogenous at the steady state, or any +endogenous or temporary variable already declared above). Each line +therefore looks like: + + VARIABLE_NAME = EXPRESSION; + +Note that it is also possible to assign several variables at the same +time, if the main function in the right hand side is a MATLAB/Octave +function returning several arguments: + + [ VARIABLE_NAME, VARIABLE_NAME... ] = EXPRESSION; + +Dynare will automatically generate a steady state file (of the form +`+FILENAME/steadystate.m`) using the information provided in this block. + +*Steady state file for deterministic models* + +The `steady_state_model` block also works with deterministic models. An +`initval` block and, when necessary, an `endval` block, is used to set +the value of the exogenous variables. Each `initval` or `endval` block +must be followed by `steady` to execute the function created by +`steady_state_model` and set the initial, respectively terminal, steady +state. + +*Example* + +> var m P c e W R k d n l gy_obs gp_obs y dA; +> varexo e_a e_m; +> +> parameters alp bet gam mst rho psi del; +> +> ... +> // parameter calibration, (dynamic) model declaration, shock calibration... +> ... +> +> steady_state_model; +> dA = exp(gam); +> gst = 1/dA; // A temporary variable +> m = mst; +> +> // Three other temporary variables +> khst = ( (1-gst*bet*(1-del)) / (alp*gst^alp*bet) )^(1/(alp-1)); +> xist = ( ((khst*gst)^alp - (1-gst*(1-del))*khst)/mst )^(-1); +> nust = psi*mst^2/( (1-alp)*(1-psi)*bet*gst^alp*khst^alp ); +> +> n = xist/(nust+xist); +> P = xist + nust; +> k = khst*n; +> +> l = psi*mst*n/( (1-psi)*(1-n) ); +> c = mst/P; +> d = l - mst + 1; +> y = k^alp*n^(1-alp)*gst^alp; +> R = mst/bet; +> +> // You can use MATLAB functions which return several arguments +> [W, e] = my_function(l, n); +> +> gp_obs = m/dA; +> gy_obs = dA; +> end; +> +> steady; +::: + +### Replace some equations during steady state computations {#eq-tag-ss} + +When there is no steady state file, Dynare computes the steady state by +solving the static model, i.e. the model from the `.mod` file from which +leads and lags have been removed. + +In some specific cases, one may want to have more control over the way +this static model is created. Dynare therefore offers the possibility to +explicitly give the form of equations that should be in the static +model. + +More precisely, if an equation is prepended by a `[static]` tag, then it +will appear in the static model used for steady state computation, but +that equation will not be used for other computations. For every +equation tagged in this way, you must tag another equation with +`[dynamic]`: that equation will not be used for steady state +computation, but will be used for other computations. + +This functionality can be useful on models with a unit root, where there +is an infinity of steady states. An equation (tagged `[dynamic]`) would +give the law of motion of the nonstationary variable (like a random +walk). To pin down one specific steady state, an equation tagged +`[static]` would affect a constant value to the nonstationary variable. +Another situation where the `[static]` tag can be useful is when one has +only a partial closed form solution for the steady state. + +*Example* + +This is a trivial example with two endogenous variables. The second +equation takes a different form in the static model: + + var c k; + varexo x; + ... + model; + c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); + [dynamic] c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); + [static] k = ((delt+bet)/(x*aa*alph))^(1/(alph-1)); + end; + +Getting information about the model +----------------------------------- + +::: {.command} +check ; check (OPTIONS\...); + +Computes the eigenvalues of the model linearized around the values +specified by the last `initval`, `endval` or `steady` statement. +Generally, the eigenvalues are only meaningful if the linearization is +done around a steady state of the model. It is a device for local +analysis in the neighborhood of this steady state. + +A necessary condition for the uniqueness of a stable equilibrium in the +neighborhood of the steady state is that there are as many eigenvalues +larger than one in modulus as there are forward looking variables in the +system. An additional rank condition requires that the square submatrix +of the right Schur vectors corresponding to the forward looking +variables (jumpers) and to the explosive eigenvalues must have full +rank. + +Note that the outcome may be different from what would be suggested by +`sum(abs(oo_.dr.eigval))` when eigenvalues are very close to +`qz_criterium `{.interpreted-text role="opt"}. + +*Options* + +::: {.option} +solve\_algo = INTEGER + +See `solve_algo `{.interpreted-text role="ref"}, for the +possible values and their meaning. +::: + +::: {.option} +qz\_zero\_threshold = DOUBLE + +Value used to test if a generalized eigenvalue is $0/0$ in the +generalized Schur decomposition (in which case the model does not admit +a unique solution). Default: `1e-6`. +::: + +*Output* + +`check` returns the eigenvalues in the global variable `oo_.dr.eigval`. +::: + +::: {.matvar} +[oo]().dr.eigval + +Contains the eigenvalues of the model, as computed by the `check` +command. +::: + +::: {.command} +model\_diagnostics ; + +This command performs various sanity checks on the model, and prints a +message if a problem is detected (missing variables at current period, +invalid steady state, singular Jacobian of static model). +::: + +::: {.command} +model\_info ; model\_info (OPTIONS\...); + +This command provides information about the model. + +When used outside the context of the `block` option of the `model` +block, it will provide a list of predetermined state variables, +forward-looking variables, and purely static variables. + + +Deterministic simulation {#det-simul} +------------------------ + +### Perfect foresight + +When the framework is deterministic, Dynare can be used for models with +the assumption of perfect foresight. Typically, the system is supposed +to be in a state of equilibrium before a period `1` when the news of a +contemporaneous or of a future shock is learned by the agents in the +model. The purpose of the simulation is to describe the reaction in +anticipation of, then in reaction to the shock, until the system returns +to the old or to a new state of equilibrium. In most models, this return +to equilibrium is only an asymptotic phenomenon, which one must +approximate by an horizon of simulation far enough in the future. +Another exercise for which Dynare is well suited is to study the +transition path to a new equilibrium following a permanent shock. For +deterministic simulations, the numerical problem consists of solving a +nonlinear system of simultaneous equations in `n` endogenous variables +in `T` periods. Dynare offers several algorithms for solving this +problem, which can be chosen via the `stack_solve_algo` option. By +default (`stack_solve_algo=0`), Dynare uses a Newton-type method to +solve the simultaneous equation system. Because the resulting Jacobian +is in the order of `n` by `T` and hence will be very large for long +simulations with many variables, Dynare makes use of the sparse matrix +capacities of MATLAB/Octave. A slower but potentially less memory +consuming alternative (`stack_solve_algo=1`) is based on a Newton-type +algorithm first proposed by *Laffargue (1990)* and *Boucekkine (1995)*, +which avoids ever storing the full Jacobian. The details of the +algorithm can be found in *Juillard (1996)*. The third type of +algorithms makes use of block decomposition techniques +(divide-and-conquer methods) that exploit the structure of the model. +The principle is to identify recursive and simultaneous blocks in the +model structure and use this information to aid the solution process. +These solution algorithms can provide a significant speed-up on large +models. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +Be careful when employing auxiliary variables in the context of perfect +foresight computations. The same model may work for stochastic +simulations, but fail for perfect foresight simulations. The issue +arises when an equation suddenly only contains variables dated `t+1` (or +`t-1` for that matter). In this case, the derivative in the last (first) +period with respect to all variables will be 0, rendering the stacked +Jacobian singular. + +*Example* + +> Consider the following specification of an Euler equation with log +> utility: +> +> Lambda = beta*C(-1)/C; +> Lambda(+1)*R(+1)= 1; +> +> Clearly, the derivative of the second equation with respect to all +> endogenous variables at time `t` is zero, causing +> `perfect_foresight_solver` to generally fail. This is due to the use +> of the Lagrange multiplier `Lambda` as an auxiliary variable. Instead, +> employing the identical +> +> beta*C/C(+1)*R(+1)= 1; +> +> will work. +::: + +::: {.command} +perfect\_foresight\_setup ; perfect\_foresight\_setup (OPTIONS\...); + +Prepares a perfect foresight simulation, by extracting the information +in the `initval`, `endval` and `shocks` blocks and converting them into +simulation paths for exogenous and endogenous variables. + +This command must always be called before running the simulation with +`perfect_foresight_solver`. + +*Options* + +::: {.option} +periods = INTEGER + +Number of periods of the simulation. +::: + +::: {.option} +datafile = FILENAME + +Used to specify path for all endogenous and exogenous variables. +Strictly equivalent to `initval_file`{.interpreted-text role="comm"}. +::: + +*Output* + +The paths for the exogenous variables are stored into `oo_.exo_simul`. + +The initial and terminal conditions for the endogenous variables and the +initial guess for the path of endogenous variables are stored into +`oo_.endo_simul`. +::: + +::: {.command} +perfect\_foresight\_solver ; perfect\_foresight\_solver (OPTIONS\...); + +Computes the perfect foresight (or deterministic) simulation of the +model. + +Note that `perfect_foresight_setup` must be called before this command, +in order to setup the environment for the simulation. + +*Options* + +::: {.option} +maxit = INTEGER + +Determines the maximum number of iterations used in the non-linear +solver. The default value of `maxit` is `50`. +::: + +::: {.option} +tolf = DOUBLE + +Convergence criterion for termination based on the function value. +Iteration will cease when it proves impossible to improve the function +value by more than `tolf`. Default: `1e-5` +::: + +::: {.option} +tolx = DOUBLE + +Convergence criterion for termination based on the change in the +function argument. Iteration will cease when the solver attempts to take +a step that is smaller than `tolx`. Default: `1e-5` +::: + +::: {.option} +noprint + +Don't print anything. Useful for loops. +::: + +::: {.option} +print + +Print results (opposite of `noprint`). +::: + + +::: {.option} +lmmcp + +Solves the perfect foresight model with a Levenberg-Marquardt mixed +complementarity problem (LMMCP) solver (*Kanzow and Petra (2004)*), +which allows to consider inequality constraints on the endogenous +variables (such as a ZLB on the nominal interest rate or a model with +irreversible investment). This option is equivalent to +`stack_solve_algo=7` **and** `solve_algo=10`. Using the LMMCP solver +requires a particular model setup as the goal is to get rid of any +min/max operators and complementary slackness conditions that might +introduce a singularity into the Jacobian. This is done by attaching an +equation tag (see `model-decl`{.interpreted-text role="ref"}) with the +`mcp` keyword to affected equations. This tag states that the equation +to which the tag is attached has to hold unless the expression within +the tag is binding. For instance, a ZLB on the nominal interest rate +would be specified as follows in the model block: + + model; + ... + [mcp = 'r > -1.94478'] + r = rho*r(-1) + (1-rho)*(gpi*Infl+gy*YGap) + e; + ... + end; + +where `1.94478` is the steady state level of the nominal interest rate +and `r` is the nominal interest rate in deviation from the steady state. +This construct implies that the Taylor rule is operative, unless the +implied interest rate `r<=-1.94478`, in which case the `r` is fixed at +`-1.94478` (thereby being equivalent to a complementary slackness +condition). By restricting the value of `r` coming out of this equation, +the `mcp` tag also avoids using `max(r,-1.94478)` for other occurrences +of `r` in the rest of the model. It is important to keep in mind that, +because the `mcp` tag effectively replaces a complementary slackness +condition, it cannot be simply attached to any equation. Rather, it must +be attached to the correct affected equation as otherwise the solver +will solve a different problem than originally intended. Also, since the +problem to be solved is nonlinear, the sign of the residuals of the +dynamic equation matters. In the previous example, for the nominal +interest rate rule, if the LHS and RHS are reversed the sign of the +residuals (the difference between the LHS and the RHS) will change and +it may happen that solver fails to identify the solution path. More +generally, convergence of the nonlinear solver is not guaranteed when +using mathematically equivalent representations of the same equation. + +Note that in the current implementation, the content of the `mcp` +equation tag is not parsed by the preprocessor. The inequalities must +therefore be as simple as possible: an endogenous variable, followed by +a relational operator, followed by a number (not a variable, parameter +or expression). +::: + +::: {.option} +endogenous\_terminal\_period + +The number of periods is not constant across Newton iterations when +solving the perfect foresight model. The size of the nonlinear system of +equations is reduced by removing the portion of the paths (and +associated equations) for which the solution has already been identified +(up to the tolerance parameter). This strategy can be interpreted as a +mix of the shooting and relaxation approaches. Note that round off +errors are more important with this mixed strategy (user should check +the reported value of the maximum absolute error). Only available with +option `stack_solve_algo==0`. +::: + +::: {.option} +linear\_approximation + +Solves the linearized version of the perfect foresight model. The model +must be stationary. Only available with option `stack_solve_algo==0` or +`stack_solve_algo==7`. +::: + +*Output* + +The simulated endogenous variables are available in global matrix +`oo_.endo_simul`. +::: + + +This variable stores the path of exogenous variables during a simulation +(computed by `perfect_foresight_solver`, `simul`, `stoch_simul` or +`extended_path`). The variables are arranged in columns, in order of +declaration (as in `M_.exo_names`). Periods are in rows. Note that this +convention regarding columns and rows is the opposite of the convention +for `oo_.endo_simul`! +::: + + +Stochastic solution and simulation {#stoch-sol} +---------------------------------- + +In a stochastic context, Dynare computes one or several simulations +corresponding to a random draw of the shocks. + +The main algorithm for solving stochastic models relies on a Taylor +approximation, up to third order, of the expectation functions (see +*Judd (1996)*, *Collard and Juillard (2001a, 2001b)*, and *Schmitt-Grohé +and Uríbe (2004)*). The details of the Dynare implementation of the +first order solution are given in *Villemot (2011)*. Such a solution is +computed using the `stoch_simul` command. + +As an alternative, it is possible to compute a simulation to a +stochastic model using the *extended path* method presented by *Fair and +Taylor (1983)*. This method is especially useful when there are strong +nonlinearities or binding constraints. Such a solution is computed using +the `extended_path` command. + +### Computing the stochastic solution {#stoch-sol-simul} + +::: {.command} +stoch\_simul \[VARIABLE\_NAME\...\]; stoch\_simul (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +Solves a stochastic (i.e. rational expectations) model, using +perturbation techniques. + +More precisely, `stoch_simul` computes a Taylor approximation of the +model around the deterministic steady state and solves of the the +decision and transition functions for the approximated model. Using +this, it computes 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 (see +`st-st`{.interpreted-text role="ref"}). + +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. More details on the computation of IRFs can be found at +. + +Variance decomposition, correlation, autocorrelation are only displayed +for variables with strictly 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%`. + +The covariance matrix of the shocks is specified with the `shocks` +command (see `shocks-exo`{.interpreted-text role="ref"}). + +When a list of `VARIABLE_NAME` is specified, results are displayed only +for these variables. + +The `stoch_simul` command with a first order approximation can benefit +from the block decomposition of the model (see `block`{.interpreted-text +role="opt"}). + +*Options* + +::: {.option} +ar = INTEGER + +Order of autocorrelation coefficients to compute and to print. Default: +`5`. +::: + +::: {.option} +drop = INTEGER + +Number of points (burnin) dropped at the beginning of simulation before +computing the summary statistics. Note that this option does not affect +the simulated series stored in `oo_.endo_simul` and the workspace. Here, +no periods are dropped. Default: `100`. +::: + +::: {.option} +hp\_filter = DOUBLE + +Uses HP filter with $\lambda =$ `DOUBLE` before computing moments. If +theoretical moments are requested, the spectrum of the model solution is +filtered following the approach outlined in Uhlig (2001). Default: no +filter. +::: + +::: {.option} +one\_sided\_hp\_filter = DOUBLE + +Uses the one-sided HP filter with $\lambda =$ `DOUBLE` described in +*Stock and Watson (1999)* before computing moments. This option is only +available with simulated moments. Default: no filter. +::: + +::: {.option} +bandpass\_filter + +Uses a bandpass filter with the default passband before computing +moments. If theoretical moments are requested, the spectrum of the model +solution is filtered using an ideal bandpass filter. If empirical +moments are requested, the *Baxter and King (1999)* filter is used. +Default: no filter. +::: + +::: {.option} +bandpass\_filter = \[HIGHEST\_PERIODICITY LOWEST\_PERIODICITY\] + +Uses a bandpass filter before computing moments. The passband is set to +a periodicity of to LOWEST\_PERIODICITY, e.g. $6$ to $32$ quarters if +the model frequency is quarterly. Default: `[6,32]`. +::: + +::: {.option} +filtered\_theoretical\_moments\_grid = INTEGER + +When computing filtered theoretical moments (with either option +`hp_filter` or option `bandpass_filter`), this option governs the number +of points in the grid for the discrete Inverse Fast Fourier Transform. +It may be necessary to increase it for highly autocorrelated processes. +Default: `512`. +::: + +::: {.option} +irf = INTEGER + +Number of periods on which to compute the IRFs. Setting `irf=0` +suppresses the plotting of IRFs. Default: `40`. +::: + +::: {.option} +irf\_shocks = ( VARIABLE\_NAME \[\[,\] VARIABLE\_NAME \...\] ) + +The exogenous variables for which to compute IRFs. Default: all. +::: + +::: {.option} +relative\_irf + +Requests the computation of normalized IRFs. At first order, the normal +shock vector of size one standard deviation is divided by the standard +deviation of the current shock and multiplied by 100. The impulse +responses are hence the responses to a unit shock of size 1 (as opposed +to the regular shock size of one standard deviation), multiplied by 100. +Thus, for a loglinearized model where the variables are measured in +percent, the IRFs have the interpretation of the percent responses to a +100 percent shock. For example, a response of 400 of output to a TFP +shock shows that output increases by 400 percent after a 100 percent TFP +shock (you will see that TFP increases by 100 on impact). Given +linearity at `order=1`, it is straightforward to rescale the IRFs stored +in `oo_.irfs` to any desired size. At higher order, the interpretation +is different. The `relative_irf` option then triggers the generation of +IRFs as the response to a 0.01 unit shock (corresponding to 1 percent +for shocks measured in percent) and no multiplication with 100 is +performed. That is, the normal shock vector of size one standard +deviation is divided by the standard deviation of the current shock and +divided by 100. For example, a response of 0.04 of log output (thus +measured in percent of the steady state output level) to a TFP shock +also measured in percent then shows that output increases by 4 percent +after a 1 percent TFP shock (you will see that TFP increases by 0.01 on +impact). +::: + +::: {.option} +irf\_plot\_threshold = DOUBLE + +Threshold size for plotting IRFs. All IRFs for a particular variable +with a maximum absolute deviation from the steady state smaller than +this value are not displayed. Default: `1e-10`. +::: + +::: {.option} +nocorr + +Don't print the correlation matrix (printing them is the default). +::: + +::: {.option} +nodecomposition + +Don't compute (and don't print) unconditional variance decomposition. +::: + +::: {.option} +nofunctions + +Don't print the coefficients of the approximated solution (printing them +is the default). +::: + +::: {.option} +nomoments + +Don't print moments of the endogenous variables (printing them is the +default). +::: + +::: {.option} +nograph + +Do not create graphs (which implies that they are not saved to the disk +nor displayed). If this option is not used, graphs will be saved to disk +(to the format specified by `graph_format` option, except if +`graph_format=none`) and displayed to screen (unless `nodisplay` option +is used). +::: + +::: {.option} +graph + +Re-enables the generation of graphs previously shut off with `nograph`. +::: + +::: {.option} +nodisplay + +Do not display the graphs, but still save them to disk (unless `nograph` +is used). +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +Specify the file format(s) for graphs saved to disk. Possible values are +`eps` (the default), `pdf`, `fig` and `none` (under Octave, `fig` is +unavailable). If the file format is set equal to `none`, the graphs are +displayed but not saved to the disk. +::: + +::: {.option} +noprint + +See `noprint`{.interpreted-text role="opt"}. +::: + +::: {.option} +print + +See `print`{.interpreted-text role="opt"}. +::: + +::: {.option} +order = INTEGER + +Order of Taylor approximation. Note that for third order and above, the +`k_order_solver` option is implied and only empirical moments are +available (you must provide a value for `periods` option). Default: `2` +(except after an `estimation` command, in which case the default is the +value used for the estimation). +::: + +::: {.option} +k\_order\_solver + +Use a k-order solver (implemented in C++) instead of the default Dynare +solver. This option is not yet compatible with the `bytecode` option +(see `model-decl`{.interpreted-text role="ref"}). Default: disabled for +order 1 and 2, enabled for order 3 and above. +::: + +::: {.option} +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` (see `oo_.endo_simul`{.interpreted-text role="mvar"}). +The simulated exogenous variables are made available in `oo_.exo_simul` +(see `oo_.exo_simul`{.interpreted-text role="mvar"}). Default: `0`. +::: + +::: {.option} +qz\_criterium = DOUBLE + +Value used to split stable from unstable eigenvalues in reordering the +Generalized Schur decomposition used for solving first order problems. +Default: `1.000001` (except when estimating with `lik_init` option equal +to `1`: the default is `0.999999` in that case; see +`estim`{.interpreted-text role="ref"}). +::: + +::: {.option} +qz\_zero\_threshold = DOUBLE + +See `qz_zero_threshold `{.interpreted-text +role="opt"}. +::: + +::: {.option} +replic = INTEGER + +Number of simulated series used to compute the IRFs. Default: `1` if +`order=1`, and `50` otherwise. +::: + +::: {.option} +simul\_replic = INTEGER + +Number of series to simulate when empirical moments are requested (i.e. +`periods` $>$ 0). Note that if this option is greater than 1, the +additional series will not be used for computing the empirical moments +but will simply be saved in binary form to the file `FILENAME_simul` in +the `FILENAME/Output`-folder. Default: `1`. +::: + +::: {.option} +solve\_algo = INTEGER + +See `solve_algo `{.interpreted-text role="ref"}, for the +possible values and their meaning. +::: + + +::: {.option} +conditional\_variance\_decomposition = INTEGER +conditional\_variance\_decomposition = \[INTEGER1:INTEGER2\] +conditional\_variance\_decomposition = \[INTEGER1 INTEGER2 \...\] + +Computes a conditional variance decomposition for the specified +period(s). The periods must be strictly positive. Conditional variances +are given by $var(y_{t+k}\vert t)$. For period 1, the conditional +variance decomposition provides the decomposition of the effects of +shocks upon impact. + +The results are stored in `oo_.conditional_variance_decomposition` (see +`oo_.conditional_variance_decomposition`{.interpreted-text +role="mvar"}). In the presence of measurement error, the +`oo_.conditional_variance_decomposition` field will contain the variance +contribution after measurement error has been taken out, i.e. the +decomposition will be conducted of the actual as opposed to the measured +variables. The variance decomposition of the measured variables will be +stored in `oo_.conditional_variance_decomposition_ME` (see +`oo_.conditional_variance_decomposition_ME`{.interpreted-text +role="mvar"}). The variance decomposition is only conducted, if +theoretical moments are requested, *i.e.* using the `periods=0`-option. +Only available at `order<3` and without +`pruning''. In case of`order=2`, Dynare provides a second-order accurate approximation to the true second moments based on the linear terms of the second-order solution (see *Kim, Kim, Schaumburg and Sims (2008)*). Note that the unconditional variance decomposition *i.e.* at horizon infinity) is automatically conducted if theoretical moments are requested and if`nodecomposition\`[ +is not set (see :mvar:\`oo\_.variance\_decomposition]{.title-ref}). +::: + +::: {.option} +pruning + +Discard higher order terms when iteratively computing simulations of the +solution. At second order, Dynare uses the algorithm of *Kim, Kim, +Schaumburg and Sims (2008)*, while at third order its generalization by +*Andreasen, Fernández-Villaverde and Rubio-Ramírez (2018)* is used. Not +available above third order. When specified, theoretical moments are +based on the pruned state space, i.e. the computation of second moments +uses all terms as in *Andreasen, Fernández-Villaverde and Rubio-Ramírez +(2018), page 10* as opposed to simply providing a second-order accurate +result based on the linear solution as in *Kim, Kim, Schaumburg and Sims +(2008)*. +::: + + +::: {.option} +sylvester = OPTION + +Determines the algorithm used to solve the Sylvester equation for block +decomposed model. Possible values for OPTION are: + +> `default` +> +> > Uses the default solver for Sylvester equations (`gensylv`) based on +> > Ondra Kamenik's algorithm (see +> > [here](https://www.dynare.org/assets/dynare++/sylvester.pdf) for +> > more information). +> +> `fixed_point` +> +> > Uses a fixed point algorithm to solve the Sylvester equation +> > (`gensylv_fp`). This method is faster than the default one for large +> > scale models. + +Default value is `default`. +::: + +::: {.option} +sylvester\_fixed\_point\_tol = DOUBLE + +The convergence criterion used in the fixed point Sylvester solver. Its +default value is `1e-12`. +::: + +::: {.option} +dr = OPTION + +Determines the method used to compute the decision rule. Possible values +for OPTION are: + +> `default` +> +> > Uses the default method to compute the decision rule based on the +> > generalized Schur decomposition (see *Villemot (2011)* for more +> > information). +> +> `cycle_reduction` +> +> > Uses the cycle reduction algorithm to solve the polynomial equation +> > for retrieving the coefficients associated to the endogenous +> > variables in the decision rule. This method is faster than the +> > default one for large scale models. +> + +Default value is `default`. +::: + +::: {.option} +dr\_cycle\_reduction\_tol = DOUBLE + +The convergence criterion used in the cycle reduction algorithm. Its +default value is `1e-7`. +::: + +::: {.option} +tex + +Requests the printing of results and graphs in TeX tables and graphics +that can be later directly included in LaTeX files. +::: + +::: {.option} +dr\_display\_tol = DOUBLE + +Tolerance for the suppression of small terms in the display of decision +rules. Rows where all terms are smaller than `dr_display_tol` are not +displayed. Default value: `1e-6`. +::: + +::: {.option} +contemporaneous\_correlation + +Saves the contemporaneous correlation between the endogenous variables +in `oo_.contemporaneous_correlation`. Requires the `nocorr` option not +to be set. +::: + +::: {.option} +spectral\_density + +Triggers the computation and display of the theoretical spectral density +of the (filtered) model variables. Results are stored in +`oo_.SpectralDensity`, defined below. Default: do not request spectral +density estimates. +::: + +::: {.option} +hp\_ngrid = INTEGER + +Deprecated option. It has the same effect as +`filtered_theoretical_moments_grid `{.interpreted-text +role="opt"}. +::: + +*Output* + +This command sets `oo_.dr`, `oo_.mean`, `oo_.var`, `oo_.var_list`, and +`oo_.autocorr`, which are described below. + +If the `periods` option is present, sets `oo_.skewness`, `oo_.kurtosis`, +and `oo_.endo_simul` (see `oo_.endo_simul`{.interpreted-text +role="mvar"}), and also saves the simulated variables in MATLAB/Octave +vectors of the global workspace with the same name as the endogenous +variables. + +If option `irf` is different from zero, sets `oo_.irfs` (see below) and +also saves the IRFs in MATLAB/Octave vectors of the global workspace +(this latter way of accessing the IRFs is deprecated and will disappear +in a future version). + +If the option `contemporaneous_correlation` is different from `0`, sets +`oo_.contemporaneous_correlation`, which is described below. + +*Example* + +> shocks; +> var e; +> stderr 0.0348; +> end; +> +> stoch_simul; +> +> Performs the simulation of the 2nd-order approximation of a model with +> a single stochastic shock `e`, with a standard error of `0.0348`. + +*Example* + +> stoch_simul(irf=60) y k; +> +> Performs the simulation of a model and displays impulse response +> functions on 60 periods for variables `y` and `k`. +::: + +::: {.matvar} +[oo]().mean + +After a run of `stoch_simul`, contains the mean of the endogenous +variables. Contains theoretical mean if the `periods` option is not +present, and simulated mean otherwise. The variables are arranged in +declaration order. +::: + +::: {.matvar} +[oo]().var + +After a run of `stoch_simul`, contains the variance-covariance of the +endogenous variables. Contains theoretical variance if the `periods` +option is not present and simulated variance otherwise. Only available +for `order<4`. At `order=2` it will be be a second-order accurate +approximation (i.e. ignoring terms of order 3 and 4 that would arise +when using the full second-order policy function). At `order=3`, +theoretical moments are only available with `pruning`. The variables are +arranged in declaration order. +::: + +::: {.matvar} +[oo]().var\_list + +The list of variables for which results are displayed. +::: + +::: {.matvar} +[oo]().skewness + +After a run of `stoch_simul` contains the skewness (standardized third +moment) of the simulated variables if the `periods` option is present. +The variables are arranged in declaration order. +::: + +::: {.matvar} +[oo]().kurtosis + +After a run of `stoch_simul` contains the excess kurtosis (standardized +fourth moment) of the simulated variables if the `periods` option is +present. The variables are arranged in declaration order. +::: + +::: {.matvar} +[oo]().autocorr + +After a run of `stoch_simul`, contains a cell array of the +autocorrelation matrices of the endogenous variables. 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. Contains theoretical autocorrelations if the +`periods` option is not present and simulated autocorrelations +otherwise. Only available for `order<4`. At `order=2` it will be be a +second-order accurate approximation. At `order=3`, theoretical moments +are only available with `pruning`. The field is only created if +stationary variables are present. + +The element `oo_.autocorr{i}(k,l)` is equal to the correlation between +$y^k_t$ and $y^l_{t-i}$, where $y^k$ (resp. $y^l$) is the $k$-th (resp. +$l$-th) endogenous variable in the declaration order. + +Note that if theoretical moments have been requested, `oo_.autocorr{i}` +is the same than `oo_.gamma_y{i+1}`. +::: + +::: {.matvar} +[oo]().gamma\_y + +After a run of `stoch_simul`, if theoretical moments have been requested +(i.e. if the `periods` option is not present), this variable contains a +cell array with the following values (where `ar` is the value of the +option of the same name): + +> `oo_.gamma{1}` +> +> > Variance/covariance matrix. +> +> `oo_.gamma{i+1}` (for i=1:ar) +> +> > Autocorrelation function. See `oo_.autocorr`{.interpreted-text +> > role="mvar"} for more details. **Beware**, this is the +> > autocorrelation function, not the autocovariance function. +> +> `oo_.gamma{ar+2}` +> +> > Unconditional variance decomposition, see +> > `oo_.variance_decomposition`{.interpreted-text role="mvar"}. +> +> `oo_.gamma{ar+3}` +> +> > If a second order approximation has been requested, contains the +> > vector of the mean correction terms. +> > +> > Only available at `order<4`. In case `order=2`, the theoretical +> > second moments are a second order accurate approximation of the true +> > second moments. See conditional\_variance\_decomposition. At +> > `order=3`, theoretical moments are only available with `pruning`. +::: + +::: {.matvar} +[oo]().variance\_decomposition + +After a run of `stoch_simul` when requesting theoretical moments +(`periods=0`), contains a matrix with the result of the unconditional +variance decomposition (i.e. at horizon infinity). The first dimension +corresponds to the endogenous variables (in the order of declaration +after the command or in `M_.endo_names`) and the second dimension +corresponds to exogenous variables (in the order of declaration). +Numbers are in percent and sum up to 100 across columns. In the presence +of measurement error, the field will contain the variance contribution +after measurement error has been taken out, *i.e.* the decomposition +will be conducted of the actual as opposed to the measured variables. +::: + +::: {.matvar} +[oo]().variance\_decomposition\_ME + +Field set after a run of `stoch_simul` when requesting theoretical +moments (`periods=0`) if measurement error is present. It is similar to +`oo_.variance_decomposition`{.interpreted-text role="mvar"}, but the +decomposition will be conducted of the measured variables. The field +contains a matrix with the result of the unconditional variance +decomposition (*i.e.* at horizon infinity). The first dimension +corresponds to the observed endoogenous variables (in the order of +declaration after the command) and the second dimension corresponds to +exogenous variables (in the order of declaration), with the last column +corresponding to the contribution of measurement error. Numbers are in +percent and sum up to 100 across columns. +::: + +::: {.matvar} +[oo]().conditional\_variance\_decomposition + +After a run of `stoch_simul` with the +`conditional_variance_decomposition` option, contains a +three-dimensional array with the result of the decomposition. The first +dimension corresponds to the endogenous variables (in the order of +declaration after the command or in `M_.endo_names` if not specified), +the second dimension corresponds to the forecast horizons (as declared +with the option), and the third dimension corresponds to the exogenous +variables (in the order of declaration). In the presence of measurement +error, the field will contain the variance contribution after +measurement error has been taken out, *i.e.* the decomposition will be +conductedof the actual as opposed to the measured variables. +::: + +::: {.matvar} +[oo]().conditional\_variance\_decomposition\_ME + +Field set after a run of `stoch_simul` with the +`conditional_variance_decomposition` option if measurement error is +present. It is similar to +`oo_.conditional_variance_decomposition`{.interpreted-text role="mvar"}, +but the decomposition will be conducted of the measured variables. It +contains a three-dimensional array with the result of the decomposition. +The first dimension corresponds to the endogenous variables (in the +order of declaration after the command or in `M_.endo_names` if not +specified), the second dimension corresponds to the forecast horizons +(as declared with the option), and the third dimension corresponds to +the exogenous variables (in the order of declaration), with the last +column corresponding to the contribution of the measurement error. +::: + +::: {.matvar} +[oo]().contemporaneous\_correlation + +After a run of `stoch_simul` with the +`contemporaneous_correlation option`, contains theoretical +contemporaneous correlations if the `periods` option is not present, and +simulated contemporaneous correlations otherwise. Only available for +`order<4`. At `order=2` it will be be a second-order accurate +approximation. At `order=3`, theoretical moments are only available with +`pruning`. The variables are arranged in declaration order. +::: + +::: {.matvar} +[oo]().SpectralDensity + +After a run of `stoch_simul` with option `spectral_density`, contains +the spectral density of the model variables. There will be a `nvars` by +`nfrequencies` subfield `freqs` storing the respective frequency grid +points ranging from $0$ to $2\pi$ and a same sized subfield `density` +storing the corresponding density. +::: + +::: {.matvar} +[oo]().irfs + +After a run of `stoch_simul` with option `irf` different from zero, +contains the impulse responses, with the following naming convention: +[VARIABLE\_NAME\_SHOCK\_NAME]{.title-ref}. + +> For example, `oo_.irfs.gnp_ea` contains the effect on `gnp` of a +> one-standard deviation shock on `ea`. +::: + +::: {.matcomm} +get\_irf (\'EXOGENOUS\_NAME\' \[, \'ENDOGENOUS\_NAME\'\]\... ); + +Given the name of an exogenous variables, returns the IRFs for the +requested endogenous variable(s), as they are stored in `oo_.irfs`. +::: + +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 observed at the beginning of the period. The +decision rules are stored in the structure `oo_.dr` which is described +below. + +::: {.matvar} +[oo]().dr + +Structure storing the decision rules. The subfields for different orders +of approximation are explained below. +::: + +::: {.command} +extended\_path ; extended\_path (OPTIONS\...); + +Simulates a stochastic (i.e. rational expectations) model, using the +extended path method presented by *Fair and Taylor (1983)*. Time series +for the endogenous variables are generated by assuming that the agents +believe that there will no more shocks in the following periods. + +This function first computes a random path for the exogenous variables +(stored in `oo_.exo_simul`, see `oo_.exo_simul`{.interpreted-text +role="mvar"}) and then computes the corresponding path for endogenous +variables, taking the steady state as starting point. The result of the +simulation is stored in `oo_.endo_simul` (see +`oo_.endo_simul`{.interpreted-text role="mvar"}). Note that this +simulation approach does not solve for the policy and transition +equations but for paths for the endogenous variables. + +*Options* + +::: {.option} +periods = INTEGER + +The number of periods for which the simulation is to be computed. No +default value, mandatory option. +::: + +::: {.option} +solver\_periods = INTEGER + +The number of periods used to compute the solution of the perfect +foresight at every iteration of the algorithm. Default: `200`. +::: + +::: {.option} +order = INTEGER + +If order is greater than `0` Dynare uses a gaussian quadrature to take +into account the effects of future uncertainty. If `order` $=S$ then the +time series for the endogenous variables are generated by assuming that +the agents believe that there will no more shocks after period $t+S$. +This is an experimental feature and can be quite slow. A non-zero value +is not compatible with either the `bytecode` or the `block` option of +the `model` block. Default: `0`. +::: + +::: {.option} +hybrid + +Use the constant of the second order perturbation reduced form to +correct the paths generated by the (stochastic) extended path algorithm. +::: + +::: {.option} +lmmcp + +Solves the perfect foresight model with a Levenberg-Marquardt mixed +complementarity problem (LMMCP) solver (*Kanzow and Petra (2004)*), +which allows to consider inequality constraints on the endogenous +variables (such as a ZLB on the nominal interest rate or a model with +irreversible investment). For specifying the necessary `mcp`-tag, see +`lmmcp`{.interpreted-text role="opt"}. +::: +::: + +### Typology and ordering of variables + +Dynare distinguishes four types of endogenous variables: + +*Purely backward (or purely predetermined) 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 `M_.npred`. + +*Purely forward variables* + +> 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 `M_.nfwrd`. + +*Mixed variables* + +> 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 `M_.nboth`. + +*Static variables* + +> 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 `M_.nstatic`. + +Note that all endogenous variables fall into one of these four +categories, since after the creation of auxiliary variables (see +`aux-variables`{.interpreted-text role="ref"}), all endogenous have at +most one lead and one lag. We therefore have the following identity: + +> ``` {.sourceCode .matlab} +> M_.npred + M_.both + M_.nfwrd + M_.nstatic = M_.endo_nbr +> ``` + +::: {.matvar} +[M]().state\_var + +Vector of numerical indices identifying the state variables in the +vector of declared variables. `M_.endo_names(M_.state_var)` therefore +yields the name of all variables that are states in the model +declaration, i.e. that show up with a lag. +::: + +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. + +::: {.matvar} +[oo]().dr.order\_var + +This variables maps DR-order to declaration order. +::: + +::: {.matvar} +[oo]().dr.inv\_order\_var + +This variable 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 ordered in DR-order when +they appear in decision rules elements. There are +`M_.nspred = M_.npred + M_.nboth` such variables. Similarly, one has +`M_.nsfwrd = M_.nfwrd + M_.nboth`, and +`M_.ndynamic = M_.nfwrd + M_.nboth + M_.npred`. + +### First-order approximation + +The approximation has the stylized form: + +$$y_t = y^s + A y^h_{t-1} + B u_t$$ + +where $y^s$ is the steady state value of $y$ and $y^h_t=y_t-y^s$. + +::: {.matvar} +oo.dr.state\_var + +Vector of numerical indices identifying the state variables in the +vector of declared variables, *given the current parameter values* for +which the decision rules have been computed. It may differ from +`M_.state_var` in case a state variable drops from the model given the +current parameterization, because it only gets 0 coefficients in the +decision rules. See `M_.state_var`{.interpreted-text role="mvar"}. +::: + +The coefficients of the decision rules are stored as follows: + +- $y^s$ 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, as given by `oo_.dr.state_var`. (N.B.: if the + `block` option to the `model` block has been specified, then rows + are in declaration order, and columns are ordered according to + `oo_.dr.state_var` which may differ from 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. (N.B.: if the `block` option to the + `model` block has been specified, then rows are in declaration + order.) + +Of course, the shown form of the approximation is only stylized, because +it neglects the required different ordering in $y^s$ and $y^h_t$. The +precise form of the approximation that shows the way Dynare deals with +differences between declaration and DR-order, is + +$$y_t(\mathrm{oo\_.dr.order\_var}) = +y^s(\mathrm{oo\_.dr.order\_var}) + A \cdot +y_{t-1}(\mathrm{oo\_.dr.order\_var(k2)}) - +y^s(\mathrm{oo\_.dr.order\_var(k2)}) + B\cdot u_t$$ + +where $\mathrm{k2}$ selects the state variables, $y_t$ and $y^s$ are in +declaration order and the coefficient matrices are in DR-order. +Effectively, all variables on the right hand side are brought into DR +order for computations and then assigned to $y_t$ in declaration order. + +### Second-order approximation + +The approximation has the form: + +$$y_t = y^s + 0.5 \Delta^2 + A y^h_{t-1} + B u_t + 0.5 C (y^h_{t-1}\otimes y^h_{t-1}) + 0.5 D (u_t \otimes u_t) + E (y^h_{t-1} \otimes u_t)$$ + +where $y^s$ is the steady state value of $y$, $y^h_t=y_t-y^s$, and +$\Delta^2$ is the shift effect of the variance of future shocks. For the +reordering required due to differences in declaration and DR order, see +the first order approximation. + +The coefficients of the decision rules are stored in the variables +described for first order approximation, plus the following variables: + +- $\Delta^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). + +### Third-order approximation + +The approximation has the form: + +$$y_t = y^s + G_0 + G_1 z_t + G_2 (z_t \otimes z_t) + G_3 (z_t \otimes z_t \otimes z_t)$$ + +where $y^s$ is the steady state value of $y$, and $z_t$ 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 $z_t$ is therefore of size $n_z$ += `M_.nspred` + `M_.exo_nbr`. + +The coefficients of the decision rules are stored as follows: + +- $y^s$ is stored in `oo_.dr.ys`. The vector rows correspond to all + endogenous in the declaration order. +- $G_0$ is stored in `oo_.dr.g_0`. The vector rows correspond to all + endogenous in DR-order. +- $G_1$ 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. +- $G_2$ 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 $n_z(n_z+1)/2$ columns. More + precisely, each column of this matrix corresponds to a pair + $(i_1, i_2)$ where each index represents an element of $z_t$ and is + therefore between $1$ and $n_z$. Only non-decreasing pairs are + stored, i.e. those for which $i_1 + \leq i_2$. The columns are arranged in the lexicographical order of + non-decreasing pairs. Also note that for those pairs where + $i_1 \neq i_2$, since the element is stored only once but appears + two times in the unfolded $G_2$ matrix, it must be multiplied by 2 + when computing the decision rules. +- $G_3$ 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 $n_z(n_z+1)(n_z+2)/6$ + columns. More precisely, each column of this matrix corresponds to a + tuple $(i_1, i_2, i_3)$ where each index represents an element of + $z_t$ and is therefore between $1$ and $n_z$. Only non-decreasing + tuples are stored, i.e. those for which $i_1 \leq i_2 \leq i_3$. The + columns are arranged in the lexicographical order of non-decreasing + tuples. Also note that for tuples that have three distinct indices + (i.e. $i_1 \neq i_2$ and $i_1 \neq i_3$ and $i_2 + \neq i_3$), since these elements are stored only once but appears + six times in the unfolded $G_3$ 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 $G_3$ matrix, they must be multiplied by + 3 when computing the decision rules. + +### Higher-order approximation + +Higher-order approximations are simply a generalization of what is done +at order 3. + +The steady state is stored in `oo_.dr.ys` and the constant correction is +stored in `oo_.dr.g_0`. The coefficient for orders 1, 2, 3, 4... are +respectively stored in `oo_.dr.g_0`, `oo_.dr.g_1`, `oo_.dr.g_2`, +`oo_.dr.g_3`, `oo_.dr.g_4`... The columns of those matrices correspond +to multidimensional indices of state variables, in such a way that +symmetric elements are never repeated (for more details, see the +description of `oo_.dr.g_3` in the third-order case). + + +Estimation based on likelihood {#estim} +------------------------------ + +Provided that you have observations on some endogenous variables, it is +possible to use Dynare to estimate some or all parameters. Both maximum +likelihood (as in *Ireland (2004)*) and Bayesian techniques (as in +*Fernández-Villaverde and Rubio-Ramírez (2004)*, *Rabanal and +Rubio-Ramirez (2003)*, *Schorfheide (2000)* or *Smets and Wouters +(2003)*) are available. Using Bayesian methods, it is possible to +estimate DSGE models, VAR models, or a combination of the two techniques +called DSGE-VAR. + +Note that in order to avoid stochastic singularity, you must have at +least as many shocks or measurement errors in your model as you have +observed variables. + +The estimation using a first order approximation can benefit from the +block decomposition of the model (see `block`{.interpreted-text +role="opt"}). + +::: {#varobs} +::: {.command} +varobs VARIABLE\_NAME\...; + +This command lists the name of observed endogenous variables for the +estimation procedure. These variables must be available in the data file +(see `estimation_cmd `{.interpreted-text role="ref"}). + +Alternatively, this command is also used in conjunction with the +`partial_information` option of `stoch_simul`, for declaring the set of +observed variables when solving the model under partial information. + +Only one instance of `varobs` is allowed in a model file. If one needs +to declare observed variables in a loop, the macro processor can be used +as shown in the second example below. + +*Example* + +> varobs C y rr; +> +> Declares endogenous variables `C`, `y` and `rr` as observed variables. + +*Example* (with a macro processor loop) + +> varobs +> @#for co in countries +> GDP_@{co} +> @#endfor +> ; +::: +::: + +::: {.block} +observation\_trends ; + +This block specifies linear trends for observed variables as functions +of model parameters. In case the `loglinear` option is used, this +corresponds to a linear trend in the logged observables, i.e. an +exponential trend in the level of the observables. + +Each line inside of the block should be of the form: + + VARIABLE_NAME(EXPRESSION); + +In most cases, variables shouldn't be centered when `observation_trends` +is used. + +*Example* + +> observation_trends; +> Y (eta); +> P (mu/eta); +> end; +::: + +::: {.block} +estimated\_params ; estimated\_params (overwrite) ; + +This block lists all parameters to be estimated and specifies bounds and +priors as necessary. + +Each line corresponds to an estimated parameter. + +In a maximum likelihood or a method of moments estimation, each line +follows this syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME + , INITIAL_VALUE [, LOWER_BOUND, UPPER_BOUND ]; + +In a Bayesian MCMC or a penalized method of moments estimation, each +line follows this syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME | DSGE_PRIOR_WEIGHT + [, INITIAL_VALUE [, LOWER_BOUND, UPPER_BOUND]], PRIOR_SHAPE, + PRIOR_MEAN, PRIOR_STANDARD_ERROR [, PRIOR_3RD_PARAMETER [, + PRIOR_4TH_PARAMETER [, SCALE_PARAMETER ] ] ]; + +The first part of the line consists of one of the four following +alternatives: + +- `stderr VARIABLE_NAME` + + Indicates that the standard error of the exogenous variable + VARIABLE\_NAME, or of the observation error/measurement errors + associated with endogenous observed variable VARIABLE\_NAME, is to + be estimated. + +- `corr VARIABLE_NAME1, VARIABLE_NAME2` + + Indicates that the correlation between the exogenous variables + VARIABLE\_NAME1 and VARIABLE\_NAME2, or the correlation of the + observation errors/measurement errors associated with endogenous + observed variables VARIABLE\_NAME1 and VARIABLE\_NAME2, is to be + estimated. Note that correlations set by previous shocks-blocks or + estimation-commands are kept at their value set prior to estimation + if they are not estimated again subsequently. Thus, the treatment is + the same as in the case of deep parameters set during model + calibration and not estimated. + +- `PARAMETER_NAME` + + The name of a model parameter to be estimated + +- `DSGE_PRIOR_WEIGHT` + + Special name for the weigh of the DSGE model in DSGE-VAR model. + +The rest of the line consists of the following fields, some of them +being optional: + +::: {.option} +INITIAL\_VALUE + +Specifies a starting value for the posterior mode optimizer or the +maximum likelihood estimation. If unset, defaults to the prior mean. +::: + +::: {.option} +LOWER\_BOUND + +Specifies a lower bound for the parameter value in maximum likelihood +estimation. In a Bayesian estimation context, sets a lower bound only +effective while maximizing the posterior kernel. This lower bound does +not modify the shape of the prior density, and is only aimed at helping +the optimizer in identifying the posterior mode (no consequences for the +MCMC). For some prior densities (namely inverse gamma, gamma, uniform, +beta or Weibull) it is possible to shift the support of the prior +distributions to the left or the right using +`prior_3rd_parameter `{.interpreted-text +role="opt"}. In this case the prior density is effectively modified +(note that the truncated Gaussian density is not implemented in Dynare). +If unset, defaults to minus infinity (ML) or the natural lower bound of +the prior (Bayesian estimation). +::: + +::: {.option} +UPPER\_BOUND + +Same as `lower_bound`, but specifying an upper bound instead. +::: + +::: {.option} +PRIOR\_SHAPE + +A keyword specifying the shape of the prior density. The possible values +are: `beta_pdf`, `gamma_pdf`, `normal_pdf`, `uniform_pdf`, +`inv_gamma_pdf`, `inv_gamma1_pdf`, `inv_gamma2_pdf` and `weibull_pdf`. +Note that `inv_gamma_pdf` is equivalent to `inv_gamma1_pdf`. +::: + +::: {.option} +PRIOR\_MEAN + +The mean of the prior distribution. +::: + +::: {.option} +PRIOR\_STANDARD\_ERROR + +The standard error of the prior distribution. +::: + +::: {.option} +PRIOR\_3RD\_PARAMETER + +A third parameter of the prior used for generalized beta distribution, +generalized gamma, generalized Weibull and for the uniform distribution. +Default: `0`. +::: + +::: {.option} +PRIOR\_4TH\_PARAMETER + +A fourth parameter of the prior used for generalized beta distribution +and for the uniform distribution. Default: `1`. +::: + +::: {.option} +SCALE\_PARAMETER + +A parameter specific scale parameter for the jumping distribution's +covariance matrix of the Metropolis-Hasting algorithm. +::: + +Note that INITIAL\_VALUE, LOWER\_BOUND, UPPER\_BOUND, PRIOR\_MEAN, +PRIOR\_STANDARD\_ERROR, PRIOR\_3RD\_PARAMETER, PRIOR\_4TH\_PARAMETER and +SCALE\_PARAMETER can be any valid EXPRESSION. Some of them can be empty, +in which Dynare will select a default value depending on the context and +the prior shape. + +In case of the uniform distribution, it can be specified either by +providing an upper and a lower bound using +`PRIOR_3RD_PARAMETER`{.interpreted-text role="opt"} and +`PRIOR_4TH_PARAMETER`{.interpreted-text role="opt"} or via mean and +standard deviation using `PRIOR_MEAN`{.interpreted-text role="opt"}, +`PRIOR_STANDARD_ERROR`{.interpreted-text role="opt"}. The other two will +automatically be filled out. Note that providing both sets of +hyperparameters will yield an error message. + +As one uses options more towards the end of the list, all previous +options must be filled: for example, if you want to specify +SCALE\_PARAMETER, you must specify `PRIOR_3RD_PARAMETER` and +`PRIOR_4TH_PARAMETER`. Use empty values, if these parameters don't +apply. + +*Example* + +> corr eps_1, eps_2, 0.5, , , beta_pdf, 0, 0.3, -1, 1; +> +> Sets a generalized beta prior for the correlation between `eps_1` and +> `eps_2` with mean `0` and variance `0.3`. By setting +> `PRIOR_3RD_PARAMETER` to `-1` and `PRIOR_4TH_PARAMETER` to `1` the +> standard beta distribution with support `[0,1]` is changed to a +> generalized beta with support `[-1,1]`. Note that LOWER\_BOUND and +> UPPER\_BOUND are left empty and thus default to `-1` and `1`, +> respectively. The initial value is set to `0.5`. + +*Example* + +> corr eps_1, eps_2, 0.5, -0.5, 1, beta_pdf, 0, 0.3, -1, 1; +> +> Sets the same generalized beta distribution as before, but now +> truncates this distribution to `[-0.5,1]` through the use of +> LOWER\_BOUND and UPPER\_BOUND. + +*Parameter transformation* + +Sometimes, it is desirable to estimate a transformation of a parameter +appearing in the model, rather than the parameter itself. It is of +course possible to replace the original parameter by a function of the +estimated parameter everywhere is the model, but it is often +unpractical. + +In such a case, it is possible to declare the parameter to be estimated +in the parameters statement and to define the transformation, using a +pound sign (\#) expression (see `model-decl`{.interpreted-text +role="ref"}). + +*Example* + +> parameters bet; +> +> model; +> # sig = 1/bet; +> c = sig*c(+1)*mpk; +> end; +> +> estimated_params; +> bet, normal_pdf, 1, 0.05; +> end; + +It is possible to have several `estimated_params` blocks. By default, +subsequent blocks are concatenated with the previous ones; this can be +useful when building models in a modular fashion (see also +`estimated_params_remove`{.interpreted-text role="bck"} for that use +case). However, if an `estimated_params` block has the `overwrite` +option, its contents becomes the new list of estimated parameters, +cancelling previous blocks; this can be useful when doing several +estimations in a single `.mod` file. +::: + +::: {.block} +estimated\_params\_init ; estimated\_params\_init (OPTIONS\...); + +This block declares numerical initial values for the optimizer when +these ones are different from the prior mean. It should be specified +after the `estimated_params` block as otherwise the specified starting +values are overwritten by the latter. + +Each line has the following syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME, INITIAL_VALUE; + +*Options* + +::: {.option} +use\_calibration + +For not specifically initialized parameters, use the deep parameters and +the elements of the covariance matrix specified in the `shocks` block +from calibration as starting values for estimation. For components of +the `shocks` block that were not explicitly specified during calibration +or which violate the prior, the prior mean is used. +::: + +See `estimated_params`{.interpreted-text role="bck"}, for the meaning +and syntax of the various components. +::: + +::: {.block} +estimated\_params\_bounds ; + +This block declares lower and upper bounds for parameters in maximum +likelihood estimation. + +Each line has the following syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME, LOWER_BOUND, UPPER_BOUND; + +See `estimated_params`{.interpreted-text role="bck"}, for the meaning +and syntax of the various components. +::: + +::: {.block} +estimated\_params\_remove ; + +This block partially undoes the effect of a previous +`estimated_params`{.interpreted-text role="bck"} block, by removing some +parameters from the estimation. + +Each line has the following syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME; +::: + +::: {#estim-comm} +::: {.command} +estimation \[VARIABLE\_NAME\...\]; estimation (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +This command runs Bayesian or maximum likelihood estimation. + +The following information will be displayed by the command: + +- Results from posterior optimization (also for maximum likelihood) +- Marginal log data density +- Posterior mean and highest posterior density interval (shortest + credible set) from posterior simulation +- Convergence diagnostic table when only one MCM chain is used or + Metropolis-Hastings convergence graphs documented in + *Pfeifer (2014)* in case of multiple MCM chains +- Table with numerical inefficiency factors of the MCMC +- Graphs with prior, posterior, and mode +- Graphs of smoothed shocks, smoothed observation errors, smoothed and + historical variables + +Note that the posterior moments, smoothed variables, k-step ahead +filtered variables and forecasts (when requested) will only be computed +on the variables listed after the `estimation` command. Alternatively, +one can choose to compute these quantities on all endogenous or on all +observed variables (see `consider_all_endogenous`, +`consider_all_endogenous_and_auxiliary`, and `consider_only_observed` +options below). If no variable is listed after the estimation command, +then Dynare will interactively ask which variable set to use. + +Also, during the MCMC (Bayesian estimation with `mh_replic` $>0$) a +(graphical or text) waiting bar is displayed showing the progress of the +Monte-Carlo and the current value of the acceptance ratio. Note that if +the `load_mh_file` option is used (see below) the reported acceptance +ratio does not take into account the draws from the previous MCMC. In +the literature there is a general agreement for saying that the +acceptance ratio should be close to one third or one quarter. If this +not the case, you can stop the MCMC (`Ctrl-C`) and change the value of +option `mh_jscale` (see below). + +Note that by default Dynare generates random numbers using the algorithm +`mt199937ar` (i.e. Mersenne Twister method) with a seed set equal to +`0`. Consequently the MCMCs in Dynare are deterministic: one will get +exactly the same results across different Dynare runs (*ceteris +paribus*). For instance, the posterior moments or posterior densities +will be exactly the same. This behaviour allows to easily identify the +consequences of a change on the model, the priors or the estimation +options. But one may also want to check that across multiple runs, with +different sequences of proposals, the returned results are almost +identical. This should be true if the number of iterations (i.e. the +value of `mh_replic`) is important enough to ensure the convergence of +the MCMC to its ergodic distribution. In this case the default behaviour +of the random number generators in not wanted, and the user should set +the seed according to the system clock before the estimation command +using the following command: + + set_dynare_seed('clock'); + +so that the sequence of proposals will be different across different +runs. + +Finally, Dynare does not always properly distinguish between maximum +likelihood and Bayesian estimation in its field names. While there is an +important conceptual distinction between frequentist confidence +intervals and Bayesian highest posterior density intervals (HPDI) as +well as between posterior density and likelilhood, Dynare sometimes uses +the Bayesian terms as a stand-in in its display of maximum likelihood +results. An example is the storage of the output of the +`forecast`-option of `estimation` with ML, which will use +`HPDinf/HPDsup` to denote the confidence interval. + +*Algorithms* + +The Monte Carlo Markov Chain (MCMC) diagnostics are generated by the +estimation command if +`mh_replic `{.interpreted-text role="opt"} is +larger than 2000 and if option `nodiagnostic`{.interpreted-text +role="opt"} is not used. If +`mh_nblocks `{.interpreted-text role="opt"} is +equal to one, the convergence diagnostics of *Geweke (1992,1999)* is +computed. It uses a chi-square test to compare the means of the first +and last draws specified by `geweke_interval +`{.interpreted-text role="opt"} after +discarding the burn-in of `mh_drop `{.interpreted-text +role="opt"}. The test is computed using variance estimates under the +assumption of no serial correlation as well as using tapering windows +specified in `taper_steps +`{.interpreted-text role="opt"}. +If `mh_nblocks +`{.interpreted-text role="opt"} is larger than 1, +the convergence diagnostics of *Brooks and Gelman (1998)* are used +instead. As described in section 3 of *Brooks and Gelman (1998)* the +univariate convergence diagnostics are based on comparing pooled and +within MCMC moments (Dynare displays the second and third order moments, +and the length of the Highest Probability Density interval covering 80% +of the posterior distribution). Due to computational reasons, the +multivariate convergence diagnostic does not follow *Brooks and Gelman +(1998)* strictly, but rather applies their idea for univariate +convergence diagnostics to the range of the posterior likelihood +function instead of the individual parameters. The posterior kernel is +used to aggregate the parameters into a scalar statistic whose +convergence is then checked using the *Brooks and Gelman (1998)* +univariate convergence diagnostic. + +The inefficiency factors are computed as in *Giordano et al.(2011)* +based on Parzen windows as in e.g. *Andrews (1991)*. + +*Options* + +::: {#dataf} +::: {.option} +datafile = FILENAME + +The datafile: a `.m` file, a `.mat` file, a `.csv` file, or a +`.xls/.xlsx` file (under Octave, the +[io](https://octave.sourceforge.io/io/) package from Octave-Forge is +required for the `.csv` and `.xlsx` formats and the `.xls` file +extension is not supported). Note that the base name (i.e. without +extension) of the datafile has to be different from the base name of the +model file. If there are several files named FILENAME, but with +different file endings, the file name must be included in quoted strings +and provide the file ending like: + + estimation(datafile='../fsdat_simul.mat',...); +::: +::: + +::: {.option} +dirname = FILENAME + +Directory in which to store `estimation` output. To pass a subdirectory +of a directory, you must quote the argument. Default: ``. +::: + +::: {.option} +xls\_sheet = QUOTED\_STRING + +The name of the sheet with the data in an Excel file. +::: + +::: {.option} +xls\_range = RANGE + +The range with the data in an Excel file. For example, +`xls_range=B2:D200`. +::: + +::: {.option} +nobs = INTEGER + +The number of observations following `first_obs `{.interpreted-text role="opt"} to be used. +Default: all observations in the file after `first_obs`. +::: + +::: {.option} +nobs = \[INTEGER1:INTEGER2\] + +Runs a recursive estimation and forecast for samples of size ranging of +`INTEGER1` to `INTEGER2`. Option `forecast` must also be specified. The +forecasts are stored in the `RecursiveForecast` field of the results +structure (see +`RecursiveForecast `{.interpreted-text +role="mvar"}). The respective results structures `oo_` are saved in +`oo_recursive_` (see `oo_recursive_`{.interpreted-text role="mvar"}) and +are indexed with the respective sample length. +::: + +::: {.option} +first\_obs = INTEGER + +The number of the first observation to be used. In case of estimating a +DSGE-VAR, `first_obs` needs to be larger than the number of lags. +Default: `1`. +::: + +::: {.option} +first\_obs = \[INTEGER1:INTEGER2\] + +Runs a rolling window estimation and forecast for samples of fixed size +`nobs` starting with the first observation ranging from `INTEGER1` to +`INTEGER2`. Option `forecast` must also be specified. This option is +incompatible with requesting recursive forecasts using an expanding +window (see `nobs +`{.interpreted-text role="opt"}). The +respective results structures `oo_` are saved in `oo_recursive_` (see +`oo_recursive_`{.interpreted-text role="mvar"}) and are indexed with the +respective first observation of the rolling window. +::: + +::: {.option} +prefilter = INTEGER + +A value of 1 means that the estimation procedure will demean each data +series by its empirical mean. If the `loglinear +`{.interpreted-text role="ref"} option without the +`logdata`{.interpreted-text role="opt"} option is requested, the data +will first be logged and then demeaned. Default: `0`, i.e. no +prefiltering. +::: + +::: {.option} +presample = INTEGER + +The number of observations after `first_obs `{.interpreted-text role="opt"} to be skipped before +evaluating the likelihood. These presample observations do not enter the +likelihood, but are used as a training sample for starting the Kalman +filter iterations. This option is incompatible with estimating a +DSGE-VAR. Default: `0`. +::: + +::: {#logl} +::: {.option} +loglinear + +Computes a log-linear approximation of the model instead of a linear +approximation. As always in the context of estimation, the data must +correspond to the definition of the variables used in the model (see +*Pfeifer (2013)* for more details on how to correctly specify +observation equations linking model variables and the data). If you +specify the loglinear option, Dynare will take the logarithm of both +your model variables and of your data as it assumes the data to +correspond to the original non-logged model variables. The displayed +posterior results like impulse responses, smoothed variables, and +moments will be for the logged variables, not the original un-logged +ones. Default: computes a linear approximation. +::: +::: + +::: {.option} +logdata + +Dynare applies the $log$ transformation to the provided data if a +log-linearization of the model is requested +(`loglinear`{.interpreted-text role="opt"}) unless `logdata` option is +used. This option is necessary if the user provides data already in +logs, otherwise the $log$ transformation will be applied twice (this may +result in complex data). +::: + +::: {.option} +plot\_priors = INTEGER + +Control the plotting of priors. + +> `0` +> +> > No prior plot. +> +> `1` +> +> > Prior density for each estimated parameter is plotted. It is +> > important to check that the actual shape of prior densities matches +> > what you have in mind. Ill-chosen values for the prior standard +> > density can result in absurd prior densities. + +Default value is `1`. +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +posterior\_nograph + +Suppresses the generation of graphs associated with Bayesian IRFs +(`bayesian_irf`{.interpreted-text role="opt"}), posterior smoothed +objects (`smoother`{.interpreted-text role="opt"}), and posterior +forecasts (`forecast`{.interpreted-text role="opt"}). +::: + +::: {.option} +posterior\_graph + +Re-enables the generation of graphs previously shut off with +`posterior_nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See +`graph_format `{.interpreted-text +role="opt"}. +::: + +::: {.option} +no\_init\_estimation\_check\_first\_obs + +Do not check for stochastic singularity in first period. If used, +[ESTIMATION CHECKS]{.title-ref} does not return an error if the check +fails only in first observation. This should only be used when observing +stock variables (e.g. capital) in first period, on top of their +associated flow (e.g. investment). Using this option may lead to a crash +or provide undesired/wrong results for badly specified problems (e.g. +the additional variable observed in first period is not predetermined). + +For advanced use only. +::: + +::: {.option} +lik\_init = INTEGER + +Type of initialization of Kalman filter: + +> `1` +> +> > For stationary models, the initial matrix of variance of the error +> > of forecast is set equal to the unconditional variance of the state +> > variables. +> +> `2` +> +> > For nonstationary models: a wide prior is used with an initial +> > matrix of variance of the error of forecast diagonal with 10 on the +> > diagonal (follows the suggestion of *Harvey and Phillips(1979)*). +> +> `3` +> +> > For nonstationary models: use a diffuse filter (use rather the +> > `diffuse_filter` option). +> +> `4` +> +> > The filter is initialized with the fixed point of the Riccati +> > equation. +> +> `5` +> +> > Use i) option 2 for the non-stationary elements by setting their +> > initial variance in the forecast error matrix to 10 on the diagonal +> > and all covariances to 0 and ii) option 1 for the stationary +> > elements. + +Default value is 1. For advanced use only. +::: + +::: {.option} +lik\_algo = INTEGER + +For internal use and testing only. +::: + +::: {.option} +conf\_sig = DOUBLE + +Level of significance of the confidence interval used for classical +forecasting after estimation. Default: 0.9. +::: + +::: {.option} +mh\_conf\_sig = DOUBLE + +Confidence/HPD interval used for the computation of prior and posterior +statistics like: parameter distributions, prior/posterior moments, +conditional variance decomposition, impulse response functions, Bayesian +forecasting. Default: `0.9`. +::: + +::: {.option} +mh\_replic = INTEGER + +Number of replications for each chain of the Metropolis-Hastings +algorithm. The number of draws should be sufficient to achieve +convergence of the MCMC and to meaningfully compute posterior objects. +Default: `20000`. +::: + +::: {.option} +sub\_draws = INTEGER + +Number of draws from the MCMC that are used to compute posterior +distribution of various objects (smoothed variable, smoothed shocks, +forecast, moments, IRF). The draws used to compute these posterior +moments are sampled uniformly in the estimated empirical posterior +distribution (i.e. draws of the MCMC). `sub_draws` should be smaller +than the total number of MCMC draws available. Default: +`min(posterior_max_subsample_draws, (Total number of draws)*(number of chains) )`. +::: + +::: {.option} +posterior\_max\_subsample\_draws = INTEGER + +Maximum number of draws from the MCMC used to compute posterior +distribution of various objects (smoothed variable, smoothed shocks, +forecast, moments, IRF), if not overriden by option `sub_draws`. +Default: `1200`. +::: + +::: {.option} +mh\_nblocks = INTEGER + +Number of parallel chains for Metropolis-Hastings algorithm. Default: +`2`. +::: + +::: {.option} +mh\_drop = DOUBLE + +The fraction of initially generated parameter vectors to be dropped as a +burn-in before using posterior simulations. Default: `0.5`. +::: + +::: {.option} +mh\_jscale = DOUBLE + +The scale parameter of the jumping distribution's covariance matrix +(Metropolis-Hastings or TaRB-algorithm). The default value is rarely +satisfactory. This option must be tuned to obtain, ideally, an +acceptance ratio of 25%-33%. Basically, the idea is to increase the +variance of the jumping distribution if the acceptance ratio is too +high, and decrease the same variance if the acceptance ratio is too low. +In some situations it may help to consider parameter-specific values for +this scale parameter. This can be done in the +`estimated_params`{.interpreted-text role="bck"} block. + +Note that `mode_compute=6` will tune the scale parameter to achieve an +acceptance rate of `AcceptanceRateTarget`{.interpreted-text +role="ref"}. The resulting scale parameter will be saved into a file +named `MODEL_FILENAME_mh_scale.mat` in the `FILENAME/Output`-folder. +This file can be loaded in subsequent runs via the +`posterior_sampler_options` option +`scale_file `{.interpreted-text role="ref"}. Both +`mode_compute=6` and `scale_file` will overwrite any value specified in +`estimated_params` with the tuned value. Default: `0.2`. + +Note also that for the Random Walk Metropolis Hastings algorithm, it is +possible to use option `mh_tune_jscale +`{.interpreted-text role="opt"}, to +automatically tune the value of `mh_jscale`. In this case, the +`mh_jscale` option must not be used. +::: + +::: {.option} +mh\_init\_scale = DOUBLE + +The scale to be used for drawing the initial value of the +Metropolis-Hastings chain. Generally, the starting points should be +overdispersed for the *Brooks and Gelman (1998)* convergence diagnostics +to be meaningful. Default: `2*mh_jscale.` + +It is important to keep in mind that `mh_init_scale` is set at the +beginning of Dynare execution, i.e. the default will not take into +account potential changes in `mh_jscale` introduced by either +`mode_compute=6` or the `posterior_sampler_options` option `scale_file +`{.interpreted-text role="ref"}. If `mh_init_scale` is too +wide during initalization of the posterior sampler so that 100 tested +draws are inadmissible (e.g. Blanchard-Kahn conditions are always +violated), Dynare will request user input of a new `mh_init_scale` value +with which the next 100 draws will be drawn and tested. If the +`nointeractive`{.interpreted-text role="opt"} option has been invoked, +the program will instead automatically decrease `mh_init_scale` by 10 +percent after 100 futile draws and try another 100 draws. This iterative +procedure will take place at most 10 times, at which point Dynare will +abort with an error message. +::: + +::: {.option} +mh\_tune\_jscale \[= DOUBLE\] + +Automatically tunes the scale parameter of the jumping distribution\'s +covariance matrix (Metropolis-Hastings), so that the overall acceptance +ratio is close to the desired level. Default value is `0.33`. It is not +possible to match exactly the desired acceptance ratio because of the +stochastic nature of the algorithm (the proposals and the initial +conditions of the markov chains if `mh_nblocks>1`). This option is only +available for the Random Walk Metropolis Hastings algorithm. Must not be +used in conjunction with `mh_jscale = DOUBLE`{.interpreted-text +role="opt"}. +::: + +::: {.option} +mh\_tune\_guess = DOUBLE + +Specifies the initial value for the `mh_tune_jscale +`{.interpreted-text role="opt"} option. +Default: `0.2`. Must not be set if +`mh_tune_jscale `{.interpreted-text +role="opt"} is not used. +::: + +::: {.option} +mh\_recover + +Attempts to recover a Metropolis-Hastings simulation that crashed +prematurely, starting with the last available saved `mh`-file. Shouldn't +be used together with `load_mh_file` or a different `mh_replic` than in +the crashed run. Since Dynare 4.5 the proposal density from the previous +run will automatically be loaded. In older versions, to assure a neat +continuation of the chain with the same proposal density, you should +provide the `mode_file` used in the previous run or the same +user-defined `mcmc_jumping_covariance` when using this option. Note that +under Octave, a neat continuation of the crashed chain with the +respective last random number generator state is currently not +supported. +::: + +::: {.option} +mh\_posterior\_mode\_estimation + +Skip optimizer-based mode-finding and instead compute the mode based on +a run of a MCMC. The MCMC will start at the prior mode and use the prior +variances to compute the inverse Hessian. +::: + +::: {.option} +mode\_file = FILENAME + +Name of the file containing previous value for the mode. When computing +the mode, Dynare stores the mode (`xparam1`) and the hessian (`hh`, only +if `cova_compute=1`) in a file called `MODEL_FILENAME_mode.mat` in the +`FILENAME/Output`-folder. After a successful run of the estimation +command, the `mode_file` will be disabled to prevent other function +calls from implicitly using an updated mode-file. Thus, if the `.mod` +file contains subsequent `estimation` commands, the `mode_file` option, +if desired, needs to be specified again. +::: + + +::: {.option} +silent\_optimizer + +Instructs Dynare to run mode computing/optimization silently without +displaying results or saving files in between. Useful when running +loops. +::: + +::: {.option} +mcmc\_jumping\_covariance = OPTION + +Tells Dynare which covariance to use for the proposal density of the +MCMC sampler. OPTION can be one of the following: + +> `hessian` +> +> > Uses the Hessian matrix computed at the mode. +> +> `prior_variance` +> +> > Uses the prior variances. No infinite prior variances are allowed in +> > this case. +> +> `identity_matrix` +> +> > Uses an identity matrix. +> +> `FILENAME` +> +> > Loads an arbitrary user-specified covariance matrix from +> > `FILENAME.mat`. The covariance matrix must be saved in a variable +> > named `jumping_covariance`, must be square, positive definite, and +> > have the same dimension as the number of estimated parameters. + +Note that the covariance matrices are still scaled with +`mh_jscale `{.interpreted-text role="opt"}. Default +value is `hessian`. +::: + +::: {.option} +mode\_check + +Tells Dynare to plot the posterior density for values around the +computed mode for each estimated parameter in turn. This is helpful to +diagnose problems with the optimizer. Note that for `order>1` the +likelihood function resulting from the particle filter is not +differentiable anymore due to the resampling step. For this reason, the +`mode_check` plot may look wiggly. +::: + +::: {.option} +mode\_check\_neighbourhood\_size = DOUBLE + +Used in conjunction with option `mode_check`, gives the width of the +window around the posterior mode to be displayed on the diagnostic +plots. This width is expressed in percentage deviation. The `Inf` value +is allowed, and will trigger a plot over the entire domain (see also +`mode_check_symmetric_plots`). Default:`0.5`. +::: + +::: {.option} +mode\_check\_symmetric\_plots = INTEGER + +Used in conjunction with option `mode_check`, if set to `1`, tells +Dynare to ensure that the check plots are symmetric around the posterior +mode. A value of `0` allows to have asymmetric plots, which can be +useful if the posterior mode is close to a domain boundary, or in +conjunction with `mode_check_neighbourhood_size = Inf` when the domain +in not the entire real line. Default: `1`. +::: + +::: {.option} +mode\_check\_number\_of\_points = INTEGER + +Number of points around the posterior mode where the posterior kernel is +evaluated (for each parameter). Default is `20`. +::: + +::: {.option} +prior\_trunc = DOUBLE + +Probability of extreme values of the prior density that is ignored when +computing bounds for the parameters. Default: `1e-32`. +::: + +::: {.option} +huge\_number = DOUBLE + +Value for replacing infinite values in the definition of (prior) bounds +when finite values are required for computational reasons. Default: +`1e7`. +::: + +::: {.option} +load\_mh\_file + +Tells Dynare to add to previous Metropolis-Hastings simulations instead +of starting from scratch. Since Dynare 4.5 the proposal density from the +previous run will automatically be loaded. In older versions, to assure +a neat continuation of the chain with the same proposal density, you +should provide the `mode_file` used in the previous run or the same +user-defined `mcmc_jumping_covariance` when using this option. Shouldn't +be used together with `mh_recover`. Note that under Octave, a neat +continuation of the chain with the last random number generator state of +the already present draws is currently not supported. +::: + +::: {.option} +load\_results\_after\_load\_mh + +This option is available when loading a previous MCMC run without adding +additional draws, i.e. when `load_mh_file` is specified with +`mh_replic=0`. It tells Dynare to load the previously computed +convergence diagnostics, marginal data density, and posterior statistics +from an existing `_results` file instead of recomputing them. +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc + +This option allows to pick initial values for new MCMC from a previous +one, where the model specification, the number of estimated parameters, +(some) prior might have changed (so a situation where `load_mh_file` +would not work). If an additional parameter is estimated, it is +automatically initialized from prior\_draw. Note that, if this option is +used to skip the optimization step, you should use a sampling method +which does not require a proposal density, like slice. Otherwise, +optimization should always be done beforehand or a mode file with an +appropriate posterior covariance matrix should be used. +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc\_directory = FILENAME + +If `mh_initialize_from_previous_mcmc` is set, users must provide here +the path to the standard FNAME folder from where to load prior +definitions and last MCMC values to be used to initialize the new MCMC. + +Example: if previous project directory is `/my_previous_dir` and FNAME +is `mymodel`, users should set the option as + +`mh_initialize_from_previous_mcmc_directory = '/my_previous_dir/mymodel'` + +Dynare will then look for the last record file into + +`/my_previous_dir/mymodel/metropolis/mymodel_mh_history_.mat` + +and for the prior definition file into + +`/my_previous_dir/mymodel/prior/definition.mat` +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc\_record = FILENAME + +If `mh_initialize_from_previous_mcmc` is set, and whenever the standard +file or directory tree is not applicable to load initial values, users +may directly provide here the path to the record file from which to load +values to be used to initialize the new MCMC. +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc\_prior = FILENAME + +If `mh_initialize_from_previous_mcmc` is set, and whenever the standard +file or directory tree is not applicable to load initial values, users +may directly provide here the path to the prior definition file, to get +info in the priors used in previous MCMC. +::: + +::: {.option} +optim = (NAME, VALUE, \...) + +A list of NAME and VALUE pairs. Can be used to set options for the +optimization routines. The set of available options depends on the +selected optimization routine (i.e. on the value of option +`mode_compute `{.interpreted-text role="opt"}): + +> `1, 3, 7, 12, 13` +> +> > Available options are given in the documentation of the MATLAB +> > Optimization Toolbox or in Octave's documentation. +> +> `2` +> +> > Available options are: +> > +> > > `'initial_step_length'` +> > > +> > > > Initial step length. Default: `1`. +> > > +> > > `'initial_temperature'` +> > > +> > > > Initial temperature. Default: `15`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of function evaluations. Default: `100000`. +> > > +> > > `'neps'` +> > > +> > > > Number of final function values used to decide upon termination. +> > > > Default: `10`. +> > > +> > > `'ns'` +> > > +> > > > Number of cycles. Default: `10`. +> > > +> > > `'nt'` +> > > +> > > > Number of iterations before temperature reduction. Default: +> > > > `10`. +> > > +> > > `'step_length_c'` +> > > +> > > > Step length adjustment. Default: `0.1`. +> > > +> > > `'TolFun'` +> > > +> > > > Stopping criteria. Default: `1e-8`. +> > > +> > > `'rt'` +> > > +> > > > Temperature reduction factor. Default: `0.1`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization, ranging from +> > > > `0` (silent) to `3` (each function evaluation). Default: `1` +> +> `4` +> +> > Available options are: +> > +> > > `'InitialInverseHessian'` +> > > +> > > > Initial approximation for the inverse of the Hessian matrix of +> > > > the posterior kernel (or likelihood). Obviously this +> > > > approximation has to be a square, positive definite and +> > > > symmetric matrix. Default: `'1e-4*eye(nx)'`, where nx is the +> > > > number of parameters to be estimated. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `1000`. +> > > +> > > `'NumgradAlgorithm'` +> > > +> > > > Possible values are `2`, `3` and `5`, respectively, +> > > > corresponding to the two, three and five points formula used to +> > > > compute the gradient of the objective function (see *Abramowitz +> > > > and Stegun (1964)*). Values `13` and `15` are more experimental. +> > > > If perturbations on the right and the left increase the value of +> > > > the objective function (we minimize this function) then we force +> > > > the corresponding element of the gradient to be zero. The idea +> > > > is to temporarily reduce the size of the optimization problem. +> > > > Default: `2`. +> > > +> > > `'NumgradEpsilon'` +> > > +> > > > Size of the perturbation used to compute numerically the +> > > > gradient of the objective function. Default: `1e-6`. +> > > +> > > `'TolFun'` +> > > +> > > > Stopping criteria. Default: `1e-7`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> > > +> > > `'SaveFiles'` +> > > +> > > > Controls saving of intermediate results during optimization. Set +> > > > to `0` to shut off saving. Default: `1`. +> +> `5` +> +> > Available options are: +> > +> > `'Hessian'` +> > +> > > Triggers three types of Hessian computations. `0`: outer product +> > > gradient; `1`: default Dynare Hessian routine; `2`: 'mixed' outer +> > > product gradient, where diagonal elements are obtained using +> > > second order derivation formula and outer product is used for +> > > correlation structure. Both {0} and {2} options require univariate +> > > filters, to ensure using maximum number of individual densities +> > > and a positive definite Hessian. Both {0} and {2} are quicker than +> > > default Dynare numeric Hessian, but provide decent starting values +> > > for Metropolis for large models (option {2} being more accurate +> > > than {0}). Default: `1`. +> > +> > `'MaxIter'` +> > +> > > Maximum number of iterations. Default: `1000`. +> > +> > `'TolFun'` +> > +> > > Stopping criteria. Default: `1e-5` for numerical derivatives, +> > > `1e-7` for analytic derivatives. +> > +> > `'verbosity'` +> > +> > > Controls verbosity of display during optimization. Set to `0` to +> > > set to silent. Default: `1`. +> > +> > `'SaveFiles'` +> > +> > > Controls saving of intermediate results during optimization. Set +> > > to `0` to shut off saving. Default: `1`. +> +> `6` +> +> > Available options are: +> > +> > > ::: {#art} +> > > `'AcceptanceRateTarget'` +> > > ::: +> > > +> > > > A real number between zero and one. The scale parameter of the +> > > > jumping distribution is adjusted so that the effective +> > > > acceptance rate matches the value of option +> > > > `'AcceptanceRateTarget'`. Default: `1.0/3.0`. +> > > +> > > `'InitialCovarianceMatrix'` +> > > +> > > > Initial covariance matrix of the jumping distribution. Default +> > > > is `'previous'` if option `mode_file` is used, `'prior'` +> > > > otherwise. +> > > +> > > `'nclimb-mh'` +> > > +> > > > Number of iterations in the last MCMC (climbing mode). Default: +> > > > `200000`. +> > > +> > > `'ncov-mh'` +> > > +> > > > Number of iterations used for updating the covariance matrix of +> > > > the jumping distribution. Default: `20000`. +> > > +> > > `'nscale-mh'` +> > > +> > > > Maximum number of iterations used for adjusting the scale +> > > > parameter of the jumping distribution. Default: `200000`. +> > > +> > > `'NumberOfMh'` +> > > +> > > > Number of MCMC run sequentially. Default: `3`. +> +> `8` +> +> > Available options are: +> > +> > > `'InitialSimplexSize'` +> > > +> > > > Initial size of the simplex, expressed as percentage deviation +> > > > from the provided initial guess in each direction. Default: +> > > > `.05`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `5000`. +> > > +> > > `'MaxFunEvals'` +> > > +> > > > Maximum number of objective function evaluations. No default. +> > > +> > > `'MaxFunvEvalFactor'` +> > > +> > > > Set `MaxFunvEvals` equal to `MaxFunvEvalFactor` times the number +> > > > of estimated parameters. Default: `500`. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-4`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-4`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> +> `9` +> +> > Available options are: +> > +> > > `'CMAESResume'` +> > > +> > > > Resume previous run. Requires the `variablescmaes.mat` from the +> > > > last run. Set to `1` to enable. Default: `0`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. +> > > +> > > `'MaxFunEvals'` +> > > +> > > > Maximum number of objective function evaluations. Default: +> > > > `Inf`. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-7`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-7`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> > > +> > > `'SaveFiles'` +> > > +> > > > Controls saving of intermediate results during optimization. Set +> > > > to `0` to shut off saving. Default: `1`. +> +> `10` +> +> > Available options are: +> > +> > > `'EndTemperature'` +> > > +> > > > Terminal condition w.r.t the temperature. When the temperature +> > > > reaches `EndTemperature`, the temperature is set to zero and the +> > > > algorithm falls back into a standard simplex algorithm. Default: +> > > > `0.1`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `5000`. +> > > +> > > `'MaxFunvEvals'` +> > > +> > > > Maximum number of objective function evaluations. No default. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-4`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-4`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> +> `101` +> +> > Available options are: +> > +> > > `'LBGradientStep'` +> > > +> > > > Lower bound for the stepsize used for the difference +> > > > approximation of gradients. Default: `1e-11`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `15000` +> > > +> > > `'SpaceDilation'` +> > > +> > > > Coefficient of space dilation. Default: `2.5`. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-6`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-6`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> +> `102` +> +> > Available options are given in the documentation of the MATLAB +> > Global Optimization Toolbox. + +*Example* + +> To change the defaults of `csminwel` (`mode_compute=4`): +> +> estimation(..., mode_compute=4,optim=('NumgradAlgorithm',3,'TolFun',1e-5),...); +::: + +::: {.option} +nodiagnostic + +Does not compute the convergence diagnostics for Metropolis-Hastings. +Default: diagnostics are computed and displayed. +::: + +::: {.option} +bayesian\_irf + +Triggers the computation of the posterior distribution of IRFs. The +length of the IRFs are controlled by the `irf` option. Results are +stored in `oo_.PosteriorIRF.dsge` (see below for a description of this +variable). +::: + +::: {.option} +relative\_irf + +See `relative_irf`{.interpreted-text role="opt"}. +::: + + +::: {.option} +posterior\_sampling\_method = NAME + +Selects the sampler used to sample from the posterior distribution +during Bayesian estimation. Default:`’random_walk_metropolis_hastings’`. + +> `'random_walk_metropolis_hastings'` +> +> > Instructs Dynare to use the Random-Walk Metropolis-Hastings. In this +> > algorithm, the proposal density is recentered to the previous draw +> > in every step. +> +> `'tailored_random_block_metropolis_hastings'` +> +> > Instructs Dynare to use the Tailored randomized block (TaRB) +> > Metropolis-Hastings algorithm proposed by *Chib and Ramamurthy +> > (2010)* instead of the standard Random-Walk Metropolis-Hastings. In +> > this algorithm, at each iteration the estimated parameters are +> > randomly assigned to different blocks. For each of these blocks a +> > mode-finding step is conducted. The inverse Hessian at this mode is +> > then used as the covariance of the proposal density for a +> > Random-Walk Metropolis-Hastings step. If the numerical Hessian is +> > not positive definite, the generalized Cholesky decomposition of +> > *Schnabel and Eskow (1990)* is used, but without pivoting. The +> > TaRB-MH algorithm massively reduces the autocorrelation in the MH +> > draws and thus reduces the number of draws required to +> > representatively sample from the posterior. However, this comes at a +> > computational cost as the algorithm takes more time to run. +> +> `'independent_metropolis_hastings'` +> +> > Use the Independent Metropolis-Hastings algorithm where the proposal +> > distribution - in contrast to the Random Walk Metropolis-Hastings +> > algorithm - does not depend on the state of the chain. +> +> `'slice'` +> +> > Instructs Dynare to use the Slice sampler of *Planas, Ratto, and +> > Rossi (2015)*. Note that `'slice'` is incompatible with +> > `prior_trunc=0`. +::: + +::: {.option} +posterior\_sampler\_options = (NAME, VALUE, \...) + +A list of NAME and VALUE pairs. Can be used to set options for the +posterior sampling methods. The set of available options depends on the +selected posterior sampling routine (i.e. on the value of option +`posterior_sampling_method +`{.interpreted-text role="opt"}): + +> `'random_walk_metropolis_hastings'` +> +> > Available options are: +> +> ::: {#prop_distrib} +> `'proposal_distribution'` +> ::: +> +> > Specifies the statistical distribution used for the proposal +> > density. +> +> `'rand_multivariate_normal'` +> +> > Use a multivariate normal distribution. This is the default. +> +> `'rand_multivariate_student'` +> +> > Use a multivariate student distribution. +> +> `'student_degrees_of_freedom'` +> +> > Specifies the degrees of freedom to be used with the multivariate +> > student distribution. Default: `3`. +> +> ::: {#usemhcov} +> `'use_mh_covariance_matrix'` +> ::: +> +> > Indicates to use the covariance matrix of the draws from a previous +> > MCMC run to define the covariance of the proposal distribution. +> > Requires the `load_mh_file`{.interpreted-text role="opt"} option to +> > be specified. Default: `0`. +> +> ::: {#scale-file} +> `'scale_file'` +> ::: +> +> > Provides the name of a `_mh_scale.mat` file storing the tuned scale +> > factor from a previous run of `mode_compute=6`. +> +> ::: {#savetmp} +> `'save_tmp_file'` +> ::: +> +> > Save the MCMC draws into a `_mh_tmp_blck` file at the refresh rate +> > of the status bar instead of just saving the draws when the current +> > `_mh*_blck` file is full. Default: `0` +> +> `'independent_metropolis_hastings'` +> +> > Takes the same options as in the case of +> > `random_walk_metropolis_hastings`. +> +> `'slice'` +> +> `'rotated'` +> +> > Triggers rotated slice iterations using a covariance matrix from +> > initial burn-in iterations. Requires either +> > `use_mh_covariance_matrix` or `slice_initialize_with_mode`. Default: +> > `0`. +> +> `'mode_files'` +> +> > For multimodal posteriors, provide the name of a file containing a +> > `nparam` by `nmodes` variable called `xparams` storing the different +> > modes. This array must have one column vector per mode and the +> > estimated parameters along the row dimension. With this info, the +> > code will automatically trigger the `rotated` and `mode` options. +> > Default: `[]`. +> +> `'slice_initialize_with_mode'` +> +> > The default for slice is to set `mode_compute=0` and start the +> > chain(s) from a random location in the prior space. This option +> > first runs the mode-finder and then starts the chain from the mode. +> > Together with `rotated`, it will use the inverse Hessian from the +> > mode to perform rotated slice iterations. Default: `0`. +> +> `'initial_step_size'` +> +> > Sets the initial size of the interval in the stepping-out procedure +> > as fraction of the prior support, i.e. the size will be +> > `initial_step_size * (UB-LB)`. `initial_step_size` must be a real +> > number in the interval `[0,1]`. Default: `0.8`. +> +> `'use_mh_covariance_matrix'` +> +> > See `use_mh_covariance_matrix `{.interpreted-text +> > role="ref"}. Must be used with `'rotated'`. Default: `0`. +> +> `'save_tmp_file'` +> +> > See `save_tmp_file `{.interpreted-text role="ref"}. +> > Default: `1`. +> +> `'tailored_random_block_metropolis_hastings'` +> +> `'proposal_distribution'` +> +> > Specifies the statistical distribution used for the proposal +> > density. See +> > `proposal_distribution `{.interpreted-text +> > role="ref"}. +> +> `new_block_probability = DOUBLE` +> +> > Specifies the probability of the next parameter belonging to a new +> > block when the random blocking in the TaRB Metropolis-Hastings +> > algorithm is conducted. The higher this number, the smaller is the +> > average block size and the more random blocks are formed during each +> > parameter sweep. Default: `0.25`. +> +> `mode_compute = INTEGER` +> +> > Specifies the mode-finder run in every iteration for every block of +> > the TaRB Metropolis-Hastings algorithm. See +> > `mode_compute > INTEGER | FUNCTION_NAME>`{.interpreted-text role="opt"}. Default: +> > `4`. +> +> `optim = (NAME, VALUE,...)` +> +> > Specifies the options for the mode-finder used in the TaRB +> > Metropolis-Hastings algorithm. See `optim +> > `{.interpreted-text role="opt"}. +> +> `'scale_file'` +> +> > See `scale_file `{.interpreted-text role="ref"}.. +> +> `'save_tmp_file'` +> +> > See `save_tmp_file `{.interpreted-text role="ref"}. +> > Default: `1`. +::: + +::: {.option} +moments\_varendo + +Triggers the computation of the posterior distribution of the +theoretical moments of the endogenous variables. Results are stored in +`oo_.PosteriorTheoreticalMoments` (see +`oo_.PosteriorTheoreticalMoments`{.interpreted-text role="mvar"}). The +number of lags in the autocorrelation function is controlled by the `ar` +option. +::: + +::: {.option} +contemporaneous\_correlation + +See `contemporaneous_correlation`{.interpreted-text role="opt"}. Results +are stored in `oo_.PosteriorTheoreticalMoments`. Note that the `nocorr` +option has no effect. +::: + +::: {.option} +no\_posterior\_kernel\_density + +Shuts off the computation of the kernel density estimator for the +posterior objects (see `density `{.interpreted-text role="ref"} +field). +::: + +::: {.option} +conditional\_variance\_decomposition = INTEGER +conditional\_variance\_decomposition = \[INTEGER1:INTEGER2\] +conditional\_variance\_decomposition = \[INTEGER1 INTEGER2 \...\] + +Computes the posterior distribution of the conditional variance +decomposition for the specified period(s). The periods must be strictly +positive. Conditional variances are given by $var(y_{t+k}\vert t)$. For +period 1, the conditional variance decomposition provides the +decomposition of the effects of shocks upon impact. The results are +stored in +`oo_.PosteriorTheoreticalMoments.dsge.ConditionalVarianceDecomposition`.. +Note that this option requires the option `moments_varendo` to be +specified. In the presence of measurement error, the field will contain +the variance contribution after measurement error has been taken out, +*i.e.* the decomposition will be conducted of the actual as opposed to +the measured variables. The variance decomposition of the measured +variables will be stored in +`oo_.PosteriorTheoreticalMoments.dsge.ConditionalVarianceDecompositionME`. +::: + +::: {.option} +filtered\_vars + +Triggers the computation of the posterior distribution of filtered +endogenous variables/one-step ahead forecasts, i.e. $E_{t}{y_{t+1}}$. +Results are stored in `oo_.FilteredVariables` (see below for a +description of this variable) +::: + +::: {.option} +smoother + +Triggers the computation of the posterior distribution of smoothed +endogenous variables and shocks, i.e. the expected value of variables +and shocks given the information available in all observations up to the +final date ($E_{T}{y_t}$). Results are stored in +`oo_.SmoothedVariables`, `oo_.SmoothedShocks` and +`oo_.SmoothedMeasurementErrors`. Also triggers the computation of +`oo_.UpdatedVariables`, which contains the estimation of the expected +value of variables given the information available at the current date +($E_{t}{y_t}$). See below for a description of all these variables. +::: + +::: {.option} +smoother\_redux + +Triggers a faster computation of the smoothed endogenous variables and +shocks for large models. It runs the smoother only for the state +variables (i.e. with the same representation used for likelihood +computations) and computes the remaining variables ex-post. Static +unobserved objects (filtered, smoothed, updated, k-step ahead) are +recovered, but there are exceptions to a full recovery, depending on how +static unobserved variables depend on the restricted state space +adopted. For example, lagged shocks which are ONLY used to recover +NON-observed static variables will not be recovered). For such +exceptions, only the following output is provided: + +> `FilteredVariablesKStepAhead`: will be fully recovered +> +> `SmoothedVariables`, `FilteredVariables`, `UpdatedVariables`: recovered for all periods beyond period `d+1`, +> +> : where `d` denotes the number of diffuse filtering steps. +> +> `FilteredVariablesKStepAheadVariances`, `Variance`, and +> `State_uncertainty` cannot be recovered, and ZERO is provided as +> output. + +If you need variances for those variables, either do not set the option, +or declare the variable as observed, using NaNs as data points. +::: + +::: {.option} +forecast = INTEGER + +Computes the posterior distribution of a forecast on INTEGER periods +after the end of the sample used in estimation. If no +Metropolis-Hastings is computed, the result is stored in variable +`oo_.forecast` and corresponds to the forecast at the posterior mode. If +a Metropolis-Hastings is computed, the distribution of forecasts is +stored in variables `oo_.PointForecast` and `oo_.MeanForecast`. See +`fore`{.interpreted-text role="ref"}, for a description of these +variables. +::: + +::: {.option} +tex + +See `tex`{.interpreted-text role="opt"}. +::: + +::: {.option} +kalman\_algo = INTEGER + +`0` + +> Automatically use the Multivariate Kalman Filter for stationary models +> and the Multivariate Diffuse Kalman Filter for non-stationary models. + +`1` + +> Use the Multivariate Kalman Filter. + +`2` + +> Use the Univariate Kalman Filter. + +`3` + +> Use the Multivariate Diffuse Kalman Filter. + +`4` + +> Use the Univariate Diffuse Kalman Filter. +::: + +> Default value is `0`. In case of missing observations of single or all +> series, Dynare treats those missing values as unobserved states and +> uses the Kalman filter to infer their value (see e.g. *Durbin and +> Koopman (2012)*, Ch. 4.10) This procedure has the advantage of being +> capable of dealing with observations where the forecast error variance +> matrix becomes singular for some variable(s). If this happens, the +> respective observation enters with a weight of zero in the +> log-likelihood, i.e. this observation for the respective variable(s) +> is dropped from the likelihood computations (for details see *Durbin +> and Koopman (2012)*, Ch. 6.4 and 7.2.5 and *Koopman and Durbin +> (2000)*). If the use of a multivariate Kalman filter is specified and +> a singularity is encountered, Dynare by default automatically switches +> to the univariate Kalman filter for this parameter draw. This behavior +> can be changed via the +> `use_univariate_filters_if_singularity_is_detected +> `{.interpreted-text +> role="opt"} option. + +::: {.option} +fast\_kalman\_filter + +Select the fast Kalman filter using Chandrasekhar recursions as +described by `Herbst (2015)`. This setting is only used with +`kalman_algo=1` or `kalman_algo=3`. In case of using the diffuse Kalman +filter (`kalman_algo=3/lik_init=3`), the observables must be stationary. +This option is not yet compatible with +`analytic_derivation`{.interpreted-text role="opt"}. +::: + +::: {.option} +kalman\_tol = DOUBLE + +Numerical tolerance for determining the singularity of the covariance +matrix of the prediction errors during the Kalman filter (minimum +allowed reciprocal of the matrix condition number). Default value is +`1e-10`. +::: + +::: {.option} +diffuse\_kalman\_tol = DOUBLE + +Numerical tolerance for determining the singularity of the covariance +matrix of the prediction errors ($F_{\infty}$) and the rank of the +covariance matrix of the non-stationary state variables ($P_{\infty}$) +during the Diffuse Kalman filter. Default value is `1e-6`. +::: + +::: {.option} +filter\_covariance + +Saves the series of one step ahead error of forecast covariance +matrices. With Metropolis, they are saved in +`oo_.FilterCovariance`{.interpreted-text role="mvar"}, otherwise in +`oo_.Smoother.Variance`{.interpreted-text role="mvar"}. Saves also +k-step ahead error of forecast covariance matrices if +`filter_step_ahead` is set. +::: + +::: {.option} +filter\_step\_ahead = \[INTEGER1:INTEGER2\] filter\_step\_ahead = +\[INTEGER1 INTEGER2 \...\] + +Triggers the computation k-step ahead filtered values, i.e. +$E_{t}{y_{t+k}}$. Stores results in `oo_.FilteredVariablesKStepAhead`. +Also stores 1-step ahead values in `oo_.FilteredVariables`. +`oo_.FilteredVariablesKStepAheadVariances` is stored if +`filter_covariance`. +::: + +::: {.option} +filter\_decomposition + +Triggers the computation of the shock decomposition of the above k-step +ahead filtered values. Stores results in +`oo_.FilteredVariablesShockDecomposition`. +::: + +::: {.option} +smoothed\_state\_uncertainty + +Triggers the computation of the variance of smoothed estimates, i.e. +$var_T(y_t)$. Stores results in `oo_.Smoother.State_uncertainty`. +::: + +::: {.option} +diffuse\_filter + +Uses the diffuse Kalman filter (as described in *Durbin and Koopman +(2012)* and *Koopman and Durbin (2003)* for the multivariate and +*Koopman and Durbin (2000)* for the univariate filter) to estimate +models with non-stationary observed variables. This option will also +reset the `qz_criterium` to count unit root variables towards the stable +variables. Trying to estimate a model with unit roots will otherwise +result in a Blanchard-Kahn error. + +When `diffuse_filter` is used the `lik_init` option of `estimation` has +no effect. + +When there are nonstationary exogenous variables in a model, there is no +unique deterministic steady state. For instance, if productivity is a +pure random walk: + +> $$a_t = a_{t-1} + e_t$$ + +any value of $\bar a$ of $a$ is a deterministic steady state for +productivity. Consequently, the model admits an infinity of steady +states. In this situation, the user must help Dynare in selecting one +steady state, except if zero is a trivial model's steady state, which +happens when the `linear` option is used in the model declaration. The +user can either provide the steady state to Dynare using a +`steady_state_model` block (or writing a steady state file) if a closed +form solution is available, see `steady_state_model`{.interpreted-text +role="bck"}, or specify some constraints on the steady state, see +`equation_tag_for_conditional_steady_state `{.interpreted-text +role="ref"}, so that Dynare computes the steady state conditionally on +some predefined levels for the non stationary variables. In both cases, +the idea is to use dummy values for the steady state level of the +exogenous non stationary variables. + +Note that the nonstationary variables in the model must be integrated +processes (their first difference or k-difference must be stationary). +::: + + +::: {.option} +selected\_variables\_only + +Only run the classical smoother on the variables listed just after the +`estimation` command. This option is incompatible with requesting +classical frequentist forecasts and will be overridden in this case. +When using Bayesian estimation, the smoother is by default only run on +the declared endogenous variables. Default: run the smoother on all the +declared endogenous variables. +::: + +::: {.option} +cova\_compute = INTEGER + +When `0`, the covariance matrix of estimated parameters is not computed +after the computation of posterior mode (or maximum likelihood). This +increases speed of computation in large models during development, when +this information is not always necessary. Of course, it will break all +successive computations that would require this covariance matrix. +Otherwise, if this option is equal to `1`, the covariance matrix is +computed and stored in variable `hh` of `MODEL_FILENAME_mode.mat`. +Default is `1`. +::: + +::: {.option} +solve\_algo = INTEGER + +See `solve_algo `{.interpreted-text role="ref"}. +::: + +::: {.option} +order = INTEGER + +Order of approximation around the deterministic steady state. When +greater than 1, the likelihood is evaluated with a particle or nonlinear +filter (see *Fernández-Villaverde and Rubio-Ramírez (2005)*). Default is +`1`, i.e. the likelihood of the linearized model is evaluated using a +standard Kalman filter. +::: + +::: {.option} +irf = INTEGER + +See `irf `{.interpreted-text role="opt"}. Only used if +`bayesian_irf`{.interpreted-text role="opt"} is passed. +::: + +::: {.option} +irf\_shocks = ( VARIABLE\_NAME \[\[,\] VARIABLE\_NAME \...\] ) + +See `irf_shocks `{.interpreted-text role="opt"}. Only used if +`bayesian_irf`{.interpreted-text role="opt"} is passed. +::: + +::: {.option} +irf\_plot\_threshold = DOUBLE + +See `irf_plot_threshold `{.interpreted-text role="opt"}. Only used if +`bayesian_irf`{.interpreted-text role="opt"} is passed. +::: + +::: {.option} +aim\_solver + +See `aim_solver`{.interpreted-text role="opt"}. +::: + +::: {.option} +sylvester = OPTION + +See `sylvester `{.interpreted-text role="opt"}. +::: + +::: {.option} +sylvester\_fixed\_point\_tol = DOUBLE + +See `sylvester_fixed_point_tol `{.interpreted-text role="opt"} . +::: + +::: {.option} +lyapunov = OPTION + +Determines the algorithm used to solve the Lyapunov equation to +initialized the variance-covariance matrix of the Kalman filter using +the steady-state value of state variables. Possible values for OPTION +are: + +> `default` +> +> > Uses the default solver for Lyapunov equations based on +> > Bartels-Stewart algorithm. +> +> `fixed_point` +> +> > Uses a fixed point algorithm to solve the Lyapunov equation. This +> > method is faster than the `default` one for large scale models, but +> > it could require a large amount of iterations. +> +> `doubling` +> +> > Uses a doubling algorithm to solve the Lyapunov equation +> > (`disclyap_fast`). This method is faster than the two previous one +> > for large scale models. +> +> `square_root_solver` +> +> > Uses a square-root solver for Lyapunov equations (`dlyapchol`). This +> > method is fast for large scale models (available under MATLAB if the +> > Control System Toolbox is installed; available under Octave if the +> > [control](https://octave.sourceforge.io/control/) package from +> > Octave-Forge is installed) + +Default value is `default`. +::: + +::: {.option} +lyapunov\_fixed\_point\_tol = DOUBLE + +This is the convergence criterion used in the fixed point Lyapunov +solver. Its default value is `1e-10`. +::: + +::: {.option} +lyapunov\_doubling\_tol = DOUBLE + +This is the convergence criterion used in the doubling algorithm to +solve the Lyapunov equation. Its default value is `1e-16`. +::: + +::: {.option} +use\_penalized\_objective\_for\_hessian + +Use the penalized objective instead of the objective function to compute +numerically the hessian matrix at the mode. The penalties decrease the +value of the posterior density (or likelihood) when, for some +perturbations, Dynare is not able to solve the model (issues with steady +state existence, Blanchard and Kahn conditions, \...). In pratice, the +penalized and original objectives will only differ if the posterior mode +is found to be near a region where the model is ill-behaved. By default +the original objective function is used. +::: + +::: {.option} +analytic\_derivation + +Triggers estimation with analytic gradient at `order=1`. The final +hessian at the mode is also computed analytically. Only works for +stationary models without missing observations, i.e. for +`kalman_algo<3`. Optimizers that rely on analytic gradients are +`mode_compute=1,3,4,5,101`. +::: + +::: {.option} +ar = INTEGER + +See `ar `{.interpreted-text role="opt"}. Only useful in +conjunction with option `moments_varendo`. +::: + +::: {.option} +endogenous\_prior + +Use endogenous priors as in *Christiano, Trabandt and Walentin (2011)*. +The procedure is motivated by sequential Bayesian learning. Starting +from independent initial priors on the parameters, specified in the +`estimated_params` block, the standard deviations observed in a +\"pre-sample\", taken to be the actual sample, are used to update the +initial priors. Thus, the product of the initial priors and the +pre-sample likelihood of the standard deviations of the observables is +used as the new prior (for more information, see the technical appendix +of *Christiano, Trabandt and Walentin (2011)*). This procedure helps in +cases where the regular posterior estimates, which minimize in-sample +forecast errors, result in a large overprediction of model variable +variances (a statistic that is not explicitly targeted, but often of +particular interest to researchers). +::: + +::: {.option} +use\_univariate\_filters\_if\_singularity\_is\_detected = INTEGER + +Decide whether Dynare should automatically switch to univariate filter +if a singularity is encountered in the likelihood computation (this is +the behaviour if the option is equal to `1`). Alternatively, if the +option is equal to `0`, Dynare will not automatically change the filter, +but rather use a penalty value for the likelihood when such a +singularity is encountered. Default: `1`. +::: + +::: {.option} +keep\_kalman\_algo\_if\_singularity\_is\_detected + +With the default `use_univariate_filters_if_singularity_is_detected=1 +`{.interpreted-text +role="opt"}, Dynare will switch to the univariate Kalman filter when it +encounters a singular forecast error variance matrix during Kalman +filtering. Upon encountering such a singularity for the first time, all +subsequent parameter draws and computations will automatically rely on +univariate filter, i.e. Dynare will never try the multivariate filter +again. Use the `keep_kalman_algo_if_singularity_is_detected` option to +have the `use_univariate_filters_if_singularity_is_detected` only affect +the behavior for the current draw/computation. +::: + +::: {.option} +rescale\_prediction\_error\_covariance + +Rescales the prediction error covariance in the Kalman filter to avoid +badly scaled matrix and reduce the probability of a switch to univariate +Kalman filters (which are slower). By default no rescaling is done. +::: + +::: {.option} +qz\_zero\_threshold = DOUBLE + +See `qz_zero_threshold `{.interpreted-text +role="opt"}. +::: + +::: {.option} +taper\_steps = \[INTEGER1 INTEGER2 \...\] + +Percent tapering used for the spectral window in the *Geweke +(1992,1999)* convergence diagnostics (requires +`mh_nblocks=1 `{.interpreted-text role="opt"}). +The tapering is used to take the serial correlation of the posterior +draws into account. Default: `[4 8 15]`. +::: + +::: {.option} +geweke\_interval = \[DOUBLE DOUBLE\] + +Percentage of MCMC draws at the beginning and end of the MCMC chain +taken to compute the *Geweke (1992,1999)* convergence diagnostics +(requires `mh_nblocks=1 `{.interpreted-text role="opt"}) after discarding the first +`mh_drop = DOUBLE +`{.interpreted-text role="opt"} percent of draws as a burnin. +Default: \[0.2 0.5\]. +::: + +::: {.option} +raftery\_lewis\_diagnostics + +Triggers the computation of the *Raftery and Lewis (1992)* convergence +diagnostics. The goal is deliver the number of draws required to +estimate a particular quantile of the CDF `q` with precision `r` with a +probability `s`. Typically, one wants to estimate the `q=0.025` +percentile (corresponding to a 95 percent HPDI) with a precision of 0.5 +percent (`r=0.005`) with 95 percent certainty (`s=0.95`). The defaults +can be changed via `raftery_lewis_qrs +`{.interpreted-text +role="opt"}. Based on the theory of first order Markov Chains, the +diagnostics will provide a required burn-in (`M`), the number of draws +after the burnin (`N`) as well as a thinning factor that would deliver a +first order chain (`k`). The last line of the table will also deliver +the maximum over all parameters for the respective values. +::: + +::: {.option} +raftery\_lewis\_qrs = \[DOUBLE DOUBLE DOUBLE\] + +Sets the quantile of the CDF `q` that is estimated with precision `r` +with a probability `s` in the *Raftery and Lewis (1992)* convergence +diagnostics. Default: `[0.025 0.005 0.95]`. +::: + +::: {.option} +consider\_all\_endogenous + +Compute the posterior moments, smoothed variables, k-step ahead filtered +variables and forecasts (when requested) on all the endogenous +variables. This is equivalent to manually listing all the endogenous +variables after the `estimation` command. +::: + +::: {.option} +consider\_all\_endogenous\_and\_auxiliary + +Compute the posterior moments, smoothed variables, k-step ahead filtered +variables and forecasts (when requested) on all the endogenous variables +and the auxiliary variables introduced by the preprocessor. This option +is useful when e.g. running `smoother2histval` on the results of the +Kalman smoother. +::: + +::: {.option} +consider\_only\_observed + +Compute the posterior moments, smoothed variables, k-step ahead filtered +variables and forecasts (when requested) on all the observed variables. +This is equivalent to manually listing all the observed variables after +the `estimation` command. +::: + + +*"Endogenous" prior restrictions* + +It is also possible to impose implicit "endogenous" priors about IRFs +and moments on the model during estimation. For example, one can specify +that all valid parameter draws for the model must generate fiscal +multipliers that are bigger than 1 by specifying how the IRF to a +government spending shock must look like. The prior restrictions can be +imposed via `irf_calibration` and `moment_calibration` blocks (see +`irf-momcal`{.interpreted-text role="ref"}). The way it works internally +is that any parameter draw that is inconsistent with the "calibration" +provided in these blocks is discarded, i.e. assigned a prior density of +0. When specifying these blocks, it is important to keep in mind that +one won't be able to easily do `model_comparison` in this case, because +the prior density will not integrate to 1. + +*Output* + +After running estimation, the parameters `M_.params` and the variance +matrix `M_.Sigma_e` of the shocks are set to the mode for maximum +likelihood estimation or posterior mode computation without Metropolis +iterations. After estimation with Metropolis iterations (option +`mh_replic > 0` or option `load_mh_file` set) the parameters `M_.params` +and the variance matrix `M_.Sigma_e` of the shocks are set to the +posterior mean. + +Depending on the options, `estimation` stores results in various fields +of the `oo_` structure, described below. In the following variables, we +will adopt the following shortcuts for specific field names: + +> `MOMENT_NAME` +> +> > This field can take the following values: +> > +> > `HPDinf` +> > +> > > Lower bound of a 90% HPD interval.[^4] +> > +> > `HPDsup` +> > +> > > Upper bound of a 90% HPD interval. +> > +> > `HPDinf_ME` +> > +> > > Lower bound of a 90% HPD interval[^5] for observables when taking +> > > measurement error into account (see e.g. *Christoffel et al. +> > > (2010*), p.17). +> > +> > `HPDsup_ME` +> > +> > > Upper bound of a 90% HPD interval for observables when taking +> > > measurement error into account. +> > +> > `Mean` +> > +> > > Mean of the posterior distribution. +> > +> > `Median` +> > +> > > Median of the posterior distribution. +> > +> > `Std` +> > +> > > Standard deviation of the posterior distribution. +> > +> > `Variance` +> > +> > > Variance of the posterior distribution. +> > +> > `deciles` +> > +> > > Deciles of the distribution. +> > +> > ::: {#dens} +> > `density` +> > ::: +> > +> > > Non parametric estimate of the posterior density following the +> > > approach outlined in *Skoeld and Roberts (2003)*. First and second +> > > columns are respectively abscissa and ordinate coordinates. +> +> `ESTIMATED_OBJECT` +> +> > This field can take the following values: +> > +> > `measurement_errors_corr` +> > +> > > Correlation between two measurement errors. +> > +> > `measurement_errors_std` +> > +> > > Standard deviation of measurement errors. +> > +> > `parameters` +> > +> > > Parameters. +> > +> > `shocks_corr` +> > +> > > Correlation between two structural shocks. +> > +> > `shocks_std` +> > +> > > Standard deviation of structural shocks. + +::: {.matvar} +[oo]().MarginalDensity.LaplaceApproximation + +Variable set by the `estimation` command. Stores the marginal data +density based on the Laplace Approximation. +::: + +::: {.matvar} +[oo]().MarginalDensity.ModifiedHarmonicMean + +Variable set by the `estimation command`, if it is used with +`mh_replic > 0` or `load_mh_file` option. Stores the marginal data +density based on *Geweke (1999)* Modified Harmonic Mean estimator. +::: + +::: {.matvar} +[oo]().posterior.optimization + +Variable set by the `estimation` command if mode-finding is used. Stores +the results at the mode. Fields are of the form: + + oo_.posterior.optimization.OBJECT + +where OBJECT is one of the following: + +> `mode` +> +> > Parameter vector at the mode. +> +> `Variance` +> +> > Inverse Hessian matrix at the mode or MCMC jumping covariance matrix +> > when used with the `MCMC_jumping_covariance > = OPTION>`{.interpreted-text role="opt"} option. +> +> `log_density` +> +> > Log likelihood (ML)/log posterior density (Bayesian) at the mode +> > when used with `mode_compute>0`. +::: + +::: {.matvar} +[oo]().posterior.metropolis + +Variable set by the `estimation` command if `mh_replic>0` is used. +Fields are of the form: + + oo_.posterior.metropolis.OBJECT + +where OBJECT is one of the following: + +> `mean` +> +> > Mean parameter vector from the MCMC. +> +> `Variance` +> +> > Covariance matrix of the parameter draws in the MCMC. +::: + +::: {.matvar} +[oo]().FilteredVariables + +Variable set by the `estimation` command, if it is used with the +`filtered_vars` option. + +After an estimation without Metropolis, fields are of the form: + + oo_.FilteredVariables.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.FilteredVariables.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().FilteredVariablesKStepAhead + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead` option. The k-steps are stored along the rows while +the columns indicate the respective variables. The third dimension of +the array provides the observation for which the forecast has been made. +For example, if `filter_step_ahead=[1 2 4]` and `nobs=200`, the element +(3,5,204) stores the four period ahead filtered value of variable 5 +computed at time t=200 for time t=204. The periods at the beginning and +end of the sample for which no forecasts can be made, e.g. entries +(1,5,1) and (1,5,204) in the example, are set to zero. Note that in case +of Bayesian estimation the variables will be ordered in the order of +declaration after the estimation command (or in general declaration +order if no variables are specified here). In case of running the +classical smoother, the variables will always be ordered in general +declaration order. If the `selected_variables_only`{.interpreted-text +role="opt"} option is specified with the classical smoother, +non-requested variables will be simply left out in this order. +::: + +::: {.matvar} +[oo]().FilteredVariablesKStepAheadVariances + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead option`. It is a 4 dimensional array where the +k-steps are stored along the first dimension, while the fourth dimension +of the array provides the observation for which the forecast has been +made. The second and third dimension provide the respective variables. +For example, if `filter_step_ahead=[1 2 4]` and `nobs=200`, the element +(3,4,5,204) stores the four period ahead forecast error covariance +between variable 4 and variable 5, computed at time t=200 for time +t=204. Padding with zeros and variable ordering is analogous to +`oo_.FilteredVariablesKStepAhead`. +::: + +::: {.matvar} +[oo]().Filtered\_Variables\_X\_step\_ahead + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead option` in the context of Bayesian estimation. Fields +are of the form: + + oo_.Filtered_Variables_X_step_ahead.VARIABLE_NAME + +The n-th entry stores the k-step ahead filtered variable computed at +time n for time n+k. +::: + +::: {.matvar} +[oo]().FilteredVariablesShockDecomposition + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead` option. The k-steps are stored along the rows while +the columns indicate the respective variables. The third dimension +corresponds to the shocks in declaration order. The fourth dimension of +the array provides the observation for which the forecast has been made. +For example, if `filter_step_ahead=[1 2 4]` and `nobs=200`, the element +(3,5,2,204) stores the contribution of the second shock to the four +period ahead filtered value of variable 5 (in deviations from the mean) +computed at time t=200 for time t=204. The periods at the beginning and +end of the sample for which no forecasts can be made, e.g. entries +(1,5,1) and (1,5,204) in the example, are set to zero. Padding with +zeros and variable ordering is analogous to +`oo_.FilteredVariablesKStepAhead`. +::: + +::: {.matvar} +[oo]().PosteriorIRF.dsge + +Variable set by the `estimation` command, if it is used with the +`bayesian_irf` option. Fields are of the form: + + oo_.PosteriorIRF.dsge.MOMENT_NAME.VARIABLE_NAME_SHOCK_NAME +::: + +::: {.matvar} +[oo]().SmoothedMeasurementErrors + +Variable set by the `estimation` command, if it is used with the +`smoother` option. Fields are of the form: + + oo_.SmoothedMeasurementErrors.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().SmoothedShocks + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. + +After an estimation without Metropolis, or if computed by +`calib_smoother`, fields are of the form: + + oo_.SmoothedShocks.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.SmoothedShocks.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().SmoothedVariables + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. + +After an estimation without Metropolis, or if computed by +`calib_smoother`, fields are of the form: + + oo_.SmoothedVariables.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.SmoothedVariables.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matcomm} +get\_smooth (\'VARIABLE\_NAME\' \[, \'VARIABLE\_NAME\'\]\...); + +Returns the smoothed values of the given endogenous or exogenous +variable(s), as they are stored in the `oo_.SmoothedVariables` and +`oo_.SmoothedShocks` variables. +::: + +::: {.matvar} +[oo]().UpdatedVariables + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. Contains the estimation of +the expected value of variables given the information available at the +current date. + +After an estimation without Metropolis, or if computed by +`calib_smoother`, fields are of the form: + + oo_.UpdatedVariables.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.UpdatedVariables.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matcomm} +get\_update (\'VARIABLE\_NAME\' \[, \'VARIABLE\_NAME\'\]\...); + +Returns the updated values of the given variable(s), as they are stored +in the `oo_.UpdatedVariables` variable. +::: + +::: {.matvar} +[oo]().FilterCovariance + +Three-dimensional array set by the `estimation` command if used with the +`smoother` and Metropolis, if the `filter_covariance` option has been +requested. Contains the series of one-step ahead forecast error +covariance matrices from the Kalman smoother. The `M_.endo_nbr` times +`M_.endo_nbr` times `T+1` array contains the variables in declaration +order along the first two dimensions. The third dimension of the array +provides the observation for which the forecast has been made. Fields +are of the form: + + oo_.FilterCovariance.MOMENT_NAME + +Note that density estimation is not supported. +::: + +::: {.matvar} +[oo]().Smoother.Variance + +Three-dimensional array set by the `estimation` command (if used with +the `smoother`) without Metropolis, or by the `calib_smoother` command, +if the `filter_covariance` option has been requested. Contains the +series of one-step ahead forecast error covariance matrices from the +Kalman smoother. The `M_.endo_nbr` times `M_.endo_nbr` times `T+1` array +contains the variables in declaration order along the first two +dimensions. The third dimension of the array provides the observation +for which the forecast has been made. +::: + +::: {.matvar} +[oo]().Smoother.State\_uncertainty + +Three-dimensional array set by the `estimation` command (if used with +the `smoother` option) without Metropolis, or by the `calib_smoother` +command, if the `smoothed_state_uncertainty` option has been requested. +Contains the series of covariance matrices for the state estimate given +the full data from the Kalman smoother. The `M_.endo_nbr` times +`M_.endo_nbr` times `T` array contains the variables in declaration +order along the first two dimensions. The third dimension of the array +provides the observation for which the smoothed estimate has been made. +::: + +::: {.matvar} +[oo]().Smoother.SteadyState + +Variable set by the `estimation` command (if used with the `smoother`) +without Metropolis, or by the `calib_smoother` command. Contains the +steady state component of the endogenous variables used in the smoother +in order of variable declaration. +::: + +::: {.matvar} +[oo]().Smoother.TrendCoeffs + +Variable set by the `estimation` command (if used with the `smoother`) +without Metropolis, or by the `calib_smoother` command. Contains the +trend coefficients of the observed variables used in the smoother in +order of declaration of the observed variables. +::: + +::: {.matvar} +[oo]().Smoother.Trend + +Variable set by the `estimation command` (if used with the `smoother` +option), or by the `calib_smoother` command. Contains the trend +component of the variables used in the smoother. + +Fields are of the form: + + oo_.Smoother.Trend.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().Smoother.Constant + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. Contains the constant part +of the endogenous variables used in the smoother, accounting e.g. for +the data mean when using the prefilter option. + +Fields are of the form: + + oo_.Smoother.Constant.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().Smoother.loglinear + +Indicator keeping track of whether the smoother was run with the +`loglinear `{.interpreted-text role="ref"} option and thus whether +stored smoothed objects are in logs. +::: + +::: {.matvar} +[oo]().PosteriorTheoreticalMoments + +Variable set by the `estimation` command, if it is used with the +`moments_varendo` option. Fields are of the form: + + oo_.PosteriorTheoreticalMoments.dsge.THEORETICAL_MOMENT.ESTIMATED_OBJECT.MOMENT_NAME.VARIABLE_NAME + +where *THEORETICAL\_MOMENT* is one of the following: + +> `covariance` +> +> > Variance-covariance of endogenous variables. +> +> `contemporaneous_correlation` +> +> > Contemporaneous correlation of endogenous variables when the +> > `contemporaneous_correlation`{.interpreted-text role="opt"} option +> > is specified. +> +> `correlation` +> +> > Auto- and cross-correlation of endogenous variables. Fields are +> > vectors with correlations from 1 up to order `options_.ar`. +> +> ::: {#VarianceDecomposition} +> `VarianceDecomposition` +> ::: +> +> > Decomposition of variance (unconditional variance, i.e. at horizon +> > infinity).[^6] +> +> `VarianceDecompositionME` +> +> > Same as [VarianceDecomposition](), but contains the decomposition of +> > the measured as opposed to the actual variable. The joint +> > contribution of the measurement error will be saved in a field named +> > `ME`. +> +> ::: {#ConditionalVarianceDecomposition} +> `ConditionalVarianceDecomposition` +> ::: +> +> > Only if the `conditional_variance_decomposition` option has been +> > specified. In the presence of measurement error, the field will +> > contain the variance contribution after measurement error has been +> > taken out, i.e. the decomposition will be conducted of the actual as +> > opposed to the measured variables. +> +> `ConditionalVarianceDecompositionME` +> +> > Only if the `conditional_variance_decomposition` option has been +> > specified. Same as [ConditionalVarianceDecomposition](), but +> > contains the decomposition of the measured as opposed to the actual +> > variable. The joint contribution of the measurement error will be +> > saved in a field names `ME`. +::: + +::: {.matvar} +[oo]().posterior\_density + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_density.PARAMETER_NAME +::: + +::: {.matvar} +[oo]().posterior\_hpdinf + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_hpdinf.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_hpdsup + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_hpdsup.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_mean + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_mean.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_mode + +Variable set by the `estimation` command during mode-finding. Fields are +of the form: + + oo_.posterior_mode.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_std\_at\_mode + +Variable set by the `estimation` command during mode-finding. It is +based on the inverse Hessian at `oo_.posterior_mode`. Fields are of the +form: + + oo_.posterior_std_at_mode.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_std + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_std.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_var + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_var.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_median + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_median.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +*Example* + +Here are some examples of generated variables: + + oo_.posterior_mode.parameters.alp + oo_.posterior_mean.shocks_std.ex + oo_.posterior_hpdsup.measurement_errors_corr.gdp_conso + +::: {.matvar} +[oo]().dsge\_var.posterior\_mode + +Structure set by the `dsge_var` option of the `estimation` command after +mode\_compute. + +The following fields are saved: + +> `PHI_tilde` +> +> > Stacked posterior DSGE-BVAR autoregressive matrices at the mode +> > (equation (28) of *Del Negro and Schorfheide (2004)*). +> +> `SIGMA_u_tilde` +> +> > Posterior covariance matrix of the DSGE-BVAR at the mode (equation +> > (29) of *Del Negro and Schorfheide (2004)*). +> +> `iXX` +> +> > Posterior population moments in the DSGE-BVAR at the mode ( +> > $inv(\lambda T \Gamma_{XX}^*+ X'X)$). +> +> `prior` +> +> > Structure storing the DSGE-BVAR prior. +> +> `PHI_star` +> +> > Stacked prior DSGE-BVAR autoregressive matrices at the mode +> > (equation (22) of *Del Negro and Schorfheide (2004)*). +> +> `SIGMA_star` +> +> > Prior covariance matrix of the DSGE-BVAR at the mode (equation (23) +> > of *Del Negro and Schorfheide (2004)*). +> +> `ArtificialSampleSize` +> +> > Size of the artifical prior sample ( $inv(\lambda T)$). +> +> `DF` +> +> > Prior degrees of freedom ( $inv(\lambda T-k-n)$). +> +> `iGXX_star` +> +> > Inverse of the theoretical prior "covariance" between X and X +> > ($\Gamma_{xx}^*$ in *Del Negro and Schorfheide (2004)*). +::: + +::: {.matvar} +[oo]().RecursiveForecast + +Variable set by the `forecast` option of the `estimation` command when +used with the nobs = \[INTEGER1:INTEGER2\] option (see +`nobs `{.interpreted-text role="opt"}). + +Fields are of the form: + + oo_.RecursiveForecast.FORECAST_OBJECT.VARIABLE_NAME + +where `FORECAST_OBJECT` is one of the following[^7] : + +`Mean` + +> Mean of the posterior forecast distribution. + +`HPDinf/HPDsup` + +> Upper/lower bound of the 90% HPD interval taking into account only +> parameter uncertainty (corresponding to +> `oo_.MeanForecast`{.interpreted-text role="mvar"}). + +`HPDTotalinf/HPDTotalsup`. + +> Upper/lower bound of the 90% HPD interval taking into account both +> parameter and future shock uncertainty (corresponding to +> `oo_.PointForecast`{.interpreted-text role="mvar"}) + +`VARIABLE_NAME` contains a matrix of the following size: number of time +periods for which forecasts are requested using the +`nobs = [INTEGER1:INTEGER2]` option times the number of forecast +horizons requested by the forecast option. i.e., the row indicates the +period at which the forecast is performed and the column the respective +k-step ahead forecast. The starting periods are sorted in ascending +order, not in declaration order. +::: + +::: {.matvar} +[oo]().convergence.geweke + +Variable set by the convergence diagnostics of the `estimation` command +when used with `mh_nblocks=1` option (see +`mh_nblocks `{.interpreted-text role="opt"}). + +Fields are of the form: + + oo_.convergence.geweke.VARIABLE_NAME.DIAGNOSTIC_OBJECT + +where *DIAGNOSTIC\_OBJECT* is one of the following: + +`posteriormean` + +> Mean of the posterior parameter distribution. + +`posteriorstd` + +> Standard deviation of the posterior parameter distribution. + +`nse_iid` + +> Numerical standard error (NSE) under the assumption of iid draws. + +`rne_iid` + +> Relative numerical efficiency (RNE) under the assumption of iid draws. + +`nse_x` + +> Numerical standard error (NSE) when using an x% taper. + +`rne_x` + +> Relative numerical efficiency (RNE) when using an x% taper. + +`pooled_mean` + +> Mean of the parameter when pooling the beginning and end parts of the +> chain specified in `geweke_interval +> `{.interpreted-text role="opt"} and +> weighting them with their relative precision. It is a vector +> containing the results under the iid assumption followed by the ones +> using the `taper_steps` option (see `taper_steps = [INTEGER1 INTEGER2 ...]>`{.interpreted-text role="opt"}). + +`pooled_nse` + +> NSE of the parameter when pooling the beginning and end parts of the +> chain and weighting them with their relative precision. See +> `pooled_mean`. + +`prob_chi2_test` + +> p-value of a chi-squared test for equality of means in the beginning +> and the end of the MCMC chain. See `pooled_mean`. A value above 0.05 +> indicates that the null hypothesis of equal means and thus convergence +> cannot be rejected at the 5 percent level. Differing values along the +> `taper_steps` signal the presence of significant autocorrelation in +> draws. In this case, the estimates using a higher tapering are usually +> more reliable. +::: +::: +::: + +::: {.command} +unit\_root\_vars VARIABLE\_NAME\...; + +This command is deprecated. Use `estimation` option `diffuse_filter` +instead for estimating a model with non-stationary observed variables or +`steady` option `nocheck` to prevent `steady` to check the steady state +returned by your steady state file. +::: + +Dynare also has the ability to estimate Bayesian VARs: + +::: {.command} +bvar\_density ; + +Computes the marginal density of an estimated BVAR model, using +Minnesota priors. + +See `bvar-a-la-sims.pdf`, which comes with Dynare distribution, for more +information on this command. +::: + + +Shock Decomposition +------------------- + +::: {.command} +shock\_decomposition \[VARIABLE\_NAME\]\...; shock\_decomposition +(OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command computes the historical shock decomposition for a given +sample based on the Kalman smoother, i.e. it decomposes the historical +deviations of the endogenous variables from their respective steady +state values into the contribution coming from the various shocks. The +`variable_names` provided govern for which variables the decomposition +is plotted. + +Note that this command must come after either `estimation` (in case of +an estimated model) or `stoch_simul` (in case of a calibrated model). + +*Options* + +::: {.option} +parameter\_set = OPTION + +Specify the parameter set to use for running the smoother. Possible +values for OPTION are: + +> - `calibration` +> - `prior_mode` +> - `prior_mean` +> - `posterior_mode` +> - `posterior_mean` +> - `posterior_median` +> - `mle_mode` + +Note that the parameter set used in subsequent commands like +`stoch_simul` will be set to the specified `parameter_set`. Default +value: `posterior_mean` if Metropolis has been run, `mle_mode` if MLE +has been run. +::: + +::: {.option} +datafile = FILENAME + +See `datafile `{.interpreted-text role="ref"}. Useful when +computing the shock decomposition on a calibrated model. +::: + +::: {.option} +first\_obs = INTEGER + +See `first_obs `{.interpreted-text role="opt"}. +::: + +::: {.option} +nobs = INTEGER + +See `nobs `{.interpreted-text role="opt"}. +::: + +::: {.option} +prefilter = INTEGER + +See `prefilter `{.interpreted-text role="opt"}. +::: + +::: {.option} +loglinear + +See `loglinear `{.interpreted-text role="opt"}. +::: + +::: {.option} +diffuse\_kalman\_tol = DOUBLE + +See `diffuse_kalman_tol `{.interpreted-text +role="opt"}. +::: + +::: {.option} +diffuse\_filter + +See `diffuse_filter `{.interpreted-text role="opt"}. +::: + +::: {.option} +xls\_sheet = QUOTED\_STRING + +See `xls_sheet `{.interpreted-text +role="opt"}. +::: + +::: {.option} +xls\_range = RANGE + +See `xls_range `{.interpreted-text role="opt"}. +::: + +::: {.option} +use\_shock\_groups \[= NAME\] + +Uses shock grouping defined by the string instead of individual shocks +in the decomposition. The groups of shocks are defined in the +`shock_groups`{.interpreted-text role="bck"} block. If no group name is +given, `default` is assumed. +::: + +::: {.option} +colormap = VARIABLE\_NAME + +Controls the `colormap` used for the shocks decomposition graphs. +VARIABLE\_NAME must be the name of a MATLAB/Octave variable that has +been declared beforehand and whose value will be passed to the +MATLAB/Octave `colormap` function (see the MATLAB/Octave manual for the +list of acceptable values). +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. Suppresses the display and +creation only within the `shock_decomposition` command, but does not +affect other commands. See `plot_shock_decomposition`{.interpreted-text +role="comm"} for plotting graphs. +::: + +::: {.option} +init\_state = BOOLEAN + +If equal to 0, the shock decomposition is computed conditional on the +smoothed state variables in period `0`, i.e. the smoothed shocks +starting in period 1 are used. If equal to `1`, the shock decomposition +is computed conditional on the smoothed state variables in period 1. +Default: `0`. +::: + +::: {.option} +with\_epilogue + +If set, then also compute the decomposition for variables declared in +the `epilogue` block (see `epilogue`{.interpreted-text role="ref"}). +::: + +*Output* + +::: {.matvar} +[oo]().shock\_decomposition + +The results are stored in the field `oo_.shock_decomposition`, which is +a three dimensional array. The first dimension contains the +`M_.endo_nbr` endogenous variables. The second dimension stores in the +first `M_.exo_nbr` columns the contribution of the respective shocks. +Column `M_.exo_nbr+1` stores the contribution of the initial conditions, +while column `M_.exo_nbr+2` stores the smoothed value of the respective +endogenous variable in deviations from their steady state, i.e. the mean +and trends are subtracted. The third dimension stores the time periods. +Both the variables and shocks are stored in the order of declaration, +i.e. `M_.endo_names` and `M_.exo_names`, respectively. +::: +::: + +::: {.block} +shock\_groups ; shock\_groups(OPTIONS\...); + +Shocks can be regrouped for the purpose of shock decomposition. The +composition of the shock groups is written in a block delimited by +`shock_groups` and `end`. + +Each line defines a group of shocks as a list of exogenous variables: + + SHOCK_GROUP_NAME = VARIABLE_1 [[,] VARIABLE_2 [,]...]; + 'SHOCK GROUP NAME' = VARIABLE_1 [[,] VARIABLE_2 [,]...]; + +*Options* + +::: {.option} +name = NAME + +Specifies a name for the following definition of shock groups. It is +possible to use several `shock_groups` blocks in a model file, each +grouping being identified by a different name. This name must in turn be +used in the `shock_decomposition` command. If no name is given, +`default` is used. +::: + +*Example* + +> varexo e_a, e_b, e_c, e_d; +> ... +> +> shock_groups(name=group1); +> supply = e_a, e_b; +> 'aggregate demand' = e_c, e_d; +> end; +> +> shock_decomposition(use_shock_groups=group1); +> +> This example defines a shock grouping with the name `group1`, +> containing a set of supply and demand shocks and conducts the shock +> decomposition for these two groups. +::: + +::: {.command} +realtime\_shock\_decomposition \[VARIABLE\_NAME\]\...; +realtime\_shock\_decomposition (OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command computes the realtime historical shock decomposition for a +given sample based on the Kalman smoother. For each period +$T=[\texttt{presample},\ldots,\texttt{nobs}]$, it recursively computes +three objects: + +> - Real-time historical shock decomposition $Y(t\vert T)$ for +> $t=[1,\ldots,T]$, i.e. without observing data in +> $[T+1,\ldots,\texttt{nobs}]$. This results in a standard shock +> decomposition being computed for each additional datapoint +> becoming available after `presample`. +> - Forecast shock decomposition $Y(T+k\vert T)$ for +> $k=[1,\ldots,forecast]$, i.e. the $k$-step ahead forecast made for +> every $T$ is decomposed in its shock contributions. +> - Real-time conditional shock decomposition of the difference +> between the real-time historical shock decomposition and the +> forecast shock decomposition. If `vintage INTEGER>`{.interpreted-text role="opt"} is equal to `0`, it +> computes the effect of shocks realizing in period $T$, i.e. +> decomposes $Y(T\vert T)-Y(T\vert T-1)$. Put differently, it +> conducts a $1$-period ahead shock decomposition from $T-1$ to $T$, +> by decomposing the update step of the Kalman filter. If +> `vintage>0` and smaller than `nobs`, the decomposition is +> conducted of the forecast revision +> $Y(T+k\vert T+k)-Y(T+k\vert T)$. + +Like `shock_decomposition`{.interpreted-text role="comm"} it decomposes +the historical deviations of the endogenous variables from their +respective steady state values into the contribution coming from the +various shocks. The `variable_names` provided govern for which variables +the decomposition is plotted. + +Note that this command must come after either `estimation` (in case of +an estimated model) or `stoch_simul` (in case of a calibrated model). + +*Options* + +::: {.option} +parameter\_set = OPTION + +See `parameter_set `{.interpreted-text +role="opt"} for possible values. +::: + +::: {.option} +datafile = FILENAME + +See `datafile `{.interpreted-text role="ref"}. +::: + +::: {.option} +first\_obs = INTEGER + +See `first_obs `{.interpreted-text role="opt"}. +::: + +::: {.option} +nobs = INTEGER + +See `nobs `{.interpreted-text role="opt"}. +::: + +::: {.option} +use\_shock\_groups \[= NAME\] + +See `use_shock_groups `{.interpreted-text +role="opt"}. +::: + +::: {.option} +colormap = VARIABLE\_NAME + +See `colormap `{.interpreted-text role="opt"}. +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. Only shock decompositions +are computed and stored in `oo_.realtime_shock_decomposition`, +`oo_.conditional_shock_decomposition` and +`oo_.realtime_forecast_shock_decomposition` but no plot is made (See +`plot_shock_decomposition`{.interpreted-text role="comm"}). +::: + +::: {.option} +presample = INTEGER + +Data point above which recursive realtime shock decompositions are +computed, *i.e.* for $T=[\texttt{presample+1} \ldots \texttt{nobs}]$. +::: + +::: {.option} +forecast = INTEGER + +Compute shock decompositions up to $T+k$ periods, i.e. get shock +contributions to k-step ahead forecasts. +::: + +::: {.option} +save\_realtime = INTEGER\_VECTOR + +Choose for which vintages to save the full realtime shock decomposition. +Default: `0`. +::: + +::: {.option} +fast\_realtime = INTEGER fast\_realtime = \[INTEGER1:INTEGER2\] +fast\_realtime = \[INTEGER1 INTEGER2 \...\] + +Runs the smoother only for the data vintages provided by the specified +integer (vector). +::: + +::: {.option} +with\_epilogue + +See `with_epilogue`{.interpreted-text role="opt"}. +::: + +*Output* + +::: {.matvar} +[oo]().realtime\_shock\_decomposition + +Structure storing the results of realtime historical decompositions. +Fields are three-dimensional arrays with the first two dimension equal +to the ones of `oo_.shock_decomposition`{.interpreted-text role="mvar"}. +The third dimension stores the time periods and is therefore of size +`T+forecast`. Fields are of the form: + + oo_.realtime_shock_decomposition.OBJECT + +where OBJECT is one of the following: + +> `pool` +> +> > Stores the pooled decomposition, i.e. for every real-time shock +> > decomposition terminal period +> > $T=[\texttt{presample},\ldots,\texttt{nobs}]$ it collects the last +> > period's decomposition $Y(T\vert T)$ (see also +> > `plot_shock_decomposition`{.interpreted-text role="comm"}). The +> > third dimension of the array will have size `nobs+forecast`. +> +> `time_*` +> +> > Stores the vintages of realtime historical shock decompositions if +> > `save_realtime` is used. For example, if `save_realtime=[5]` and +> > `forecast=8`, the third dimension will be of size `13`. +::: + +::: {.matvar} +[oo]().realtime\_conditional\_shock\_decomposition + +Structure storing the results of real-time conditional decompositions. +Fields are of the form: + + oo_.realtime_conditional_shock_decomposition.OBJECT + +where OBJECT is one of the following: + +> `pool` +> +> > Stores the pooled real-time conditional shock decomposition, i.e. +> > collects the decompositions of $Y(T\vert T)-Y(T\vert T-1)$ for the +> > terminal periods $T=[\texttt{presample},\ldots,\texttt{nobs}]$. The +> > third dimension is of size `nobs`. +> +> `time_*` +> +> > Store the vintages of $k$-step conditional forecast shock +> > decompositions $Y(t\vert T+k)$, for $t=[T \ldots T+k]$. See `vintage +> > `{.interpreted-text role="opt"}. The third +> > dimension is of size `1+forecast`. +::: + +::: {.matvar} +[oo]().realtime\_forecast\_shock\_decomposition + +Structure storing the results of realtime forecast decompositions. +Fields are of the form: + + oo_.realtime_forecast_shock_decomposition.OBJECT + +where `OBJECT` is one of the following: + +> `pool` +> +> > Stores the pooled real-time forecast decomposition of the $1$-step +> > ahead effect of shocks on the $1$-step ahead prediction, i.e. +> > $Y(T\vert +> > T-1)$. +> +> `time_*` +> +> > Stores the vintages of $k$-step out-of-sample forecast shock +> > decompositions, i.e. $Y(t\vert +> > T)$, for $t=[T \ldots T+k]$. See `vintage +> > `{.interpreted-text role="opt"}. +::: +::: + +::: {.command} +plot\_shock\_decomposition \[VARIABLE\_NAME\]\...; +plot\_shock\_decomposition (OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command plots the historical shock decomposition already computed +by `shock_decomposition` or `realtime_shock_decomposition`. For that +reason, it must come after one of these commands. The `variable_names` +provided govern which variables the decomposition is plotted for. + +Further note that, unlike the majority of Dynare commands, the options +specified below are overwritten with their defaults before every call to +`plot_shock_decomposition`. Hence, if you want to reuse an option in a +subsequent call to `plot_shock_decomposition`, you must pass it to the +command again. + +*Options* + +::: {.option} +use\_shock\_groups \[= NAME\] + +See `use_shock_groups `{.interpreted-text +role="opt"}. +::: + +::: {.option} +colormap = VARIABLE\_NAME + +See `colormap `{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See `graph_format `{.interpreted-text +role="opt"}. +::: + +::: {.option} +detail\_plot + +Plots shock contributions using subplots, one per shock (or group of +shocks). Default: not activated +::: + +::: {.option} +interactive + +Under MATLAB, add uimenus for detailed group plots. Default: not +activated +::: + +::: {.option} +screen\_shocks + +For large models (i.e. for models with more than 16 shocks), plots only +the shocks that have the largest historical contribution for chosen +selected `variable_names`. Historical contribution is ranked by the mean +absolute value of all historical contributions. +::: + +::: {.option} +steadystate + +If passed, the the $y$-axis value of the zero line in the shock +decomposition plot is translated to the steady state level. Default: not +activated +::: + +::: {.option} +type = qoq \| yoy \| aoa + +For quarterly data, valid arguments are: `qoq` for quarter-on-quarter +plots, `yoy` for year-on-year plots of growth rates, `aoa` for +annualized variables, i.e. the value in the last quarter for each year +is plotted. Default value: empty, i.e. standard period-on-period plots +(`qoq` for quarterly data). +::: + +::: {.option} +fig\_name = STRING + +Specifies a user-defined keyword to be appended to the default figure +name set by `plot_shock_decomposition`. This can avoid to overwrite +plots in case of sequential calls to `plot_shock_decomposition`. +::: + +::: {.option} +write\_xls + +Saves shock decompositions to Excel-file in the main directory, named +`FILENAME_shock_decomposition_TYPE_FIG_NAME.xls`. This option requires +your system to be configured to be able to write Excel files.[^8] +::: + +::: {.option} +realtime = INTEGER + +Which kind of shock decomposition to plot. INTEGER can take the +following values: + +> - `0`: standard historical shock decomposition. See +> `shock_decomposition`{.interpreted-text role="comm"}. +> - `1`: realtime historical shock decomposition. See +> `realtime_shock_decomposition`{.interpreted-text role="comm"}. +> - `2`: conditional realtime shock decomposition. See +> `realtime_shock_decomposition`{.interpreted-text role="comm"}. +> - `3`: realtime forecast shock decomposition. See +> `realtime_shock_decomposition`{.interpreted-text role="comm"}. + +If no vintage is requested, i.e. `vintage=0` then the pooled objects +from `realtime_shock_decomposition`{.interpreted-text role="comm"} will +be plotted and the respective vintage otherwise. Default: `0`. +::: + +::: {.option} +vintage = INTEGER + +Selects a particular data vintage in $[presample,\ldots,nobs]$ for which +to plot the results from +`realtime_shock_decomposition`{.interpreted-text role="comm"} selected +via the `realtime `{.interpreted-text role="opt"} +option. If the standard historical shock decomposition is selected +(`realtime=0`), `vintage` will have no effect. If `vintage=0` the pooled +objects from `realtime_shock_decomposition`{.interpreted-text +role="comm"} will be plotted. If `vintage>0`, it plots the shock +decompositions for vintage $T=\texttt{vintage}$ under the following +scenarios: + +> - `realtime=1`: the full vintage shock decomposition $Y(t\vert T)$ +> for $t=[1,\ldots,T]$ +> - `realtime=2`: the conditional forecast shock decomposition from +> $T$, i.e. plots $Y(T+j\vert T+j)$ and the shock contributions +> needed to get to the data $Y(T+j)$ conditional on $T=$ vintage, +> with $j=[0,\ldots,\texttt{forecast}]$. +> - `realtime=3`: plots unconditional forecast shock decomposition +> from $T$, i.e. $Y(T+j\vert +> T)$, where $T=\texttt{vintage}$ and +> $j=[0,\ldots,\texttt{forecast}]$. + +Default: `0`. +::: + +::: {.option} +plot\_init\_date = DATE + +If passed, plots decomposition using `plot_init_date` as initial period. +Default: first observation in estimation +::: + +::: {.option} +plot\_end\_date = DATE + +If passed, plots decomposition using `plot_end_date` as last period. +Default: last observation in estimation +::: + +::: {.option} +diff + +If passed, plot the decomposition of the first difference of the list of +variables. If used in combination with `flip`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: + +::: {.option} +flip + +If passed, plot the decomposition of the opposite of the list of +variables. If used in combination with `diff`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: + +::: {.option} +max\_nrows + +Maximum number of rows in the subplot layout of detailed shock +decomposition graphs. Note that columns are always 3. Default: 6 +::: + +::: {.option} +with\_epilogue + +See `with_epilogue`{.interpreted-text role="opt"}. +::: + +::: {.option} +init2shocks init2shocks = NAME + +Use the information contained in an `init2shocks`{.interpreted-text +role="bck"} block, in order to attribute initial conditions to shocks. +The name of the block can be explicitly given, otherwise it defaults to +the `default` block. +::: +::: + +::: {.block} +init2shocks ; init2shocks (OPTIONS\...); + +This blocks gives the possibility of attributing the initial condition +of endogenous variables to the contribution of exogenous variables in +the shock decomposition. + +For example, in an AR(1) process, the contribution of the initial +condition on the process variable can naturally be assigned to the +innovation of the process. + +Each line of the block should have the syntax: + + VARIABLE_1 [,] VARIABLE_2; + +Where VARIABLE\_1 is an endogenous variable whose initial condition will +be attributed to the exogenous VARIABLE\_2. + +The information contained in this block is used by the +`plot_shock_decomposition`{.interpreted-text role="comm"} command when +given the `init2shocks` option. + +*Options* + +::: {.option} +name = NAME + +Specifies a name for the block, that can be referenced from +`plot_shock_decomposition`, so that several such blocks can coexist in a +single model file. If the name is unspecified, it defaults to `default`. +::: + +*Example* + +> var y y_s R pie dq pie_s de A y_obs pie_obs R_obs; +> varexo e_R e_q e_ys e_pies e_A; +> ... +> +> model; +> dq = rho_q*dq(-1)+e_q; +> A = rho_A*A(-1)+e_A; +> ... +> end; +> +> ... +> +> init2shocks; +> dq e_q; +> A e_A; +> end; +> +> shock_decomposition(nograph); +> +> plot_shock_decomposition(init2shocks) y_obs R_obs pie_obs dq de; +> +> In this example, the initial conditions of `dq` and `A` will be +> respectively attributed to `e_q` and `e_A`. +::: + +::: {.command} +initial\_condition\_decomposition \[VARIABLE\_NAME\]\...; +initial\_condition\_decomposition (OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command computes and plots the decomposition of the effect of +smoothed initial conditions of state variables. The `variable_names` +provided govern which variables the decomposition is plotted for. + +Further note that, unlike the majority of Dynare commands, the options +specified below are overwritten with their defaults before every call to +`initial_condition_decomposition`. Hence, if you want to reuse an option +in a subsequent call to `initial_condition_decomposition`, you must pass +it to the command again. + +*Options* + +::: {.option} +colormap = VARIABLE\_NAME + +See `colormap `{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See `graph_format `{.interpreted-text +role="opt"}. +::: + +::: {.option} +detail\_plot + +Plots shock contributions using subplots, one per shock (or group of +shocks). Default: not activated +::: + +::: {.option} +steadystate + +If passed, the the $y$-axis value of the zero line in the shock +decomposition plot is translated to the steady state level. Default: not +activated +::: + +::: {.option} +type = qoq \| yoy \| aoa + +For quarterly data, valid arguments are: `qoq` for quarter-on-quarter +plots, `yoy` for year-on-year plots of growth rates, `aoa` for +annualized variables, i.e. the value in the last quarter for each year +is plotted. Default value: empty, i.e. standard period-on-period plots +(`qoq` for quarterly data). +::: + +::: {.option} +fig\_name = STRING + +Specifies a user-defined keyword to be appended to the default figure +name set by `plot_shock_decomposition`. This can avoid to overwrite +plots in case of sequential calls to `plot_shock_decomposition`. +::: + +::: {.option} +write\_xls + +Saves shock decompositions to Excel-file in the main directory, named +`FILENAME_shock_decomposition_TYPE_FIG_NAME_initval.xls`. This option +requires your system to be configured to be able to write Excel +files.[^9] +::: + +::: {.option} +plot\_init\_date = DATE + +If passed, plots decomposition using `plot_init_date` as initial period. +Default: first observation in estimation +::: + +::: {.option} +plot\_end\_date = DATE + +If passed, plots decomposition using `plot_end_date` as last period. +Default: last observation in estimation +::: + +::: {.option} +diff + +If passed, plot the decomposition of the first difference of the list of +variables. If used in combination with `flip`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: + +::: {.option} +flip + +If passed, plot the decomposition of the opposite of the list of +variables. If used in combination with `diff`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: +::: + +::: {.command} +squeeze\_shock\_decomposition \[VARIABLE\_NAME\]\...; + +For large models, the size of the information stored by shock +decompositions (especially various settings of realtime decompositions) +may become huge. This command allows to squeeze this information in two +possible ways: + +> - Automatic (default): only the variables for which plotting has +> been explicitly required with `plot_shock_decomposition` will have +> their decomposition left in `oo_` after this command is run; +> - If a list of variables is passed to the command, then only those +> variables will have their decomposition left in `oo_` after this +> command is run. +::: + +Calibrated Smoother +------------------- + +Dynare can also run the smoother on a calibrated model: + +::: {.command} +calib\_smoother \[VARIABLE\_NAME\]\...; calib\_smoother (OPTIONS\...) +\[VARIABLE\_NAME\]\...; + +This command computes the smoothed variables (and possible the filtered +variables) on a calibrated model. + +A datafile must be provided, and the observable variables declared with +`varobs`. The smoother is based on a first-order approximation of the +model. + +By default, the command computes the smoothed variables and shocks and +stores the results in `oo_.SmoothedVariables` and `oo_.SmoothedShocks`. +It also fills `oo_.UpdatedVariables`. + +*Options* + +::: {.option} +datafile = FILENAME + +See `datafile `{.interpreted-text role="ref"}. +::: + +::: {.option} +filtered\_vars + +Triggers the computation of filtered variables. See +`filtered_vars`{.interpreted-text role="opt"}, for more details. +::: + +::: {.option} +filter\_step\_ahead = \[INTEGER1:INTEGER2\] + +See +`filter_step_ahead `{.interpreted-text +role="opt"}. +::: + +::: {.option} +prefilter = INTEGER + +See `prefilter `{.interpreted-text role="opt"}. +::: + +::: {.option} +parameter\_set = OPTION + +See `parameter_set `{.interpreted-text +role="opt"} for possible values. Default: `calibration`. +::: + +::: {.option} +loglinear + +See `loglinear `{.interpreted-text role="ref"}. +::: + +::: {.option} +first\_obs = INTEGER + +See `first_obs `{.interpreted-text role="opt"}. +::: + +::: {.option} +filter\_decomposition + +See `filter_decomposition`{.interpreted-text role="opt"}. +::: + +::: {.option} +filter\_covariance + +See `filter_covariance`{.interpreted-text role="opt"}. +::: + +::: {.option} +smoother\_redux + +See `smoother_redux`{.interpreted-text role="opt"}. +::: + +::: {.option} +kalman\_algo = INTEGER + +See `kalman_algo `{.interpreted-text role="opt"}. +::: + +::: {.option} +diffuse\_filter = INTEGER + +See `diffuse_filter`{.interpreted-text role="opt"}. +::: + +::: {.option} +diffuse\_kalman\_tol = DOUBLE + +See `diffuse_kalman_tol `{.interpreted-text +role="opt"}. +::: + +::: {.option} +xls\_sheet = QUOTED\_STRING + +See `xls_sheet `{.interpreted-text +role="opt"}. +::: + +::: {.option} +xls\_range = RANGE + +See `xls_range `{.interpreted-text role="opt"}. +::: +::: + +Forecasting {#fore} +----------- + +On a calibrated model, forecasting is done using the `forecast` command. +On an estimated model, use the `forecast` option of `estimation` +command. + +It is also possible to compute forecasts on a calibrated or estimated +model for a given constrained path of the future endogenous variables. +This is done, from the reduced form representation of the DSGE model, by +finding the structural shocks that are needed to match the restricted +paths. Use `conditional_forecast`{.interpreted-text role="comm"}, +`conditional_forecast_paths`{.interpreted-text role="bck"} and +`plot_conditional_forecast`{.interpreted-text role="comm"} for that +purpose. + +Finally, it is possible to do forecasting with a Bayesian VAR using the +`bvar_forecast`{.interpreted-text role="comm"} command. + +::: {.command} +forecast \[VARIABLE\_NAME\...\]; forecast (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +This command computes a simulation of a stochastic model from an +arbitrary initial point. + +When the model also contains deterministic exogenous shocks, the +simulation is computed conditionally to the agents knowing the future +values of the deterministic exogenous variables. + +`forecast` must be called after `stoch_simul`. + +`forecast` plots the trajectory of endogenous variables. When a list of +variable names follows the command, only those variables are plotted. A +90% confidence interval is plotted around the mean trajectory. Use +option `conf_sig` to change the level of the confidence interval. + +*Options* + +::: {.option} +periods = INTEGER + +Number of periods of the forecast. Default: `5`. +::: + +::: {#confsig} +::: {.option} +conf\_sig = DOUBLE + +Level of significance for confidence interval. Default: `0.90`. +::: +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See `graph_format = FORMAT`{.interpreted-text role="opt"}. +::: + +*Initial Values* + +`forecast` computes the forecast taking as initial values the values +specified in `histval` (see `histval`{.interpreted-text role="bck"}). +When no `histval` block is present, the initial values are the one +stated in `initval`. When `initval` is followed by command `steady`, the +initial values are the steady state (see `steady`{.interpreted-text +role="comm"}). + +*Output* + +The results are stored in `oo_.forecast`, which is described below. + +*Example* + +> varexo_det tau; +> +> varexo e; +> ... +> shocks; +> var e; stderr 0.01; +> var tau; +> periods 1:9; +> values -0.15; +> end; +> +> stoch_simul(irf=0); +> +> forecast; + +::: {.matvar} +[oo]().forecast + +Variable set by the `forecast` command, or by the `estimation` command +if used with the `forecast` option and ML or if no Metropolis-Hastings +has been computed (in that case, the forecast is computed for the +posterior mode). Fields are of the form: + + oo_.forecast.FORECAST_MOMENT.VARIABLE_NAME + +where `FORECAST_MOMENT` is one of the following: + +> `HPDinf` +> +> > Lower bound of a 90% HPD interval[^10] of forecast due to parameter +> > uncertainty, but ignoring the effect of measurement error on +> > observed variables. In case of ML, it stores the lower bound of the +> > confidence interval. +> +> `HPDsup` +> +> > Upper bound of a 90% HPD forecast interval due to parameter +> > uncertainty, but ignoring the effect of measurement error on +> > observed variables. In case of ML, it stores the upper bound of the +> > confidence interval. +> +> `HPDinf_ME` +> +> > Lower bound of a 90% HPD interval[^11] of forecast for observed +> > variables due to parameter uncertainty and measurement error. In +> > case of ML, it stores the lower bound of the confidence interval. +> +> `HPDsup_ME` +> +> > Upper bound of a 90% HPD interval of forecast for observed variables +> > due to parameter uncertainty and measurement error. In case of ML, +> > it stores the upper bound of the confidence interval. +> +> `Mean` +> +> > Mean of the posterior distribution of forecasts. +::: + +::: {.matvar} +[oo]().PointForecast + +Set by the `estimation` command, if it is used with the `forecast` +option and if either `mh_replic > 0` or the `load_mh_file` option are +used. + +Contains the distribution of forecasts taking into account the +uncertainty about both parameters and shocks. + +Fields are of the form: + + oo_.PointForecast.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().MeanForecast + +Set by the `estimation` command, if it is used with the `forecast` +option and if either `mh_replic > 0` or `load_mh_file` option are used. + +Contains the distribution of forecasts where the uncertainty about +shocks is averaged out. The distribution of forecasts therefore only +represents the uncertainty about parameters. + +Fields are of the form: + + oo_.MeanForecast.MOMENT_NAME.VARIABLE_NAME +::: +::: + +::: {.command} +conditional\_forecast (OPTIONS\...); + +This command computes forecasts on an estimated or calibrated model for +a given constrained path of some future endogenous variables. This is +done using the reduced form first order state-space representation of +the DSGE model by finding the structural shocks that are needed to match +the restricted paths. Consider the augmented state space representation +that stacks both predetermined and non-predetermined variables into a +vector $y_{t}$: + +> $$y_t=Ty_{t-1}+R\varepsilon_t$$ + +Both $y_t$ and $\varepsilon_t$ are split up into controlled and +uncontrolled ones, and we assume without loss of generality that the +constrained endogenous variables and the controlled shocks come first : + +> $$\begin{aligned} +> \begin{pmatrix} +> y_{c,t}\\ +> y_{u,t} +> \end{pmatrix} +> = +> \begin{pmatrix} +> T_{c,c} & T_{c,u}\\ +> T_{u,c} & T_{u,u} +> \end{pmatrix} +> \begin{pmatrix} +> y_{c,t-1}\\ +> y_{u,t-1} +> \end{pmatrix} +> + +> \begin{pmatrix} +> R_{c,c} & R_{c,u}\\ +> R_{u,c} & R_{u,u} +> \end{pmatrix} +> \begin{pmatrix} +> \varepsilon_{c,t}\\ +> \varepsilon_{u,t} +> \end{pmatrix} +> \end{aligned}$$ + +where matrices $T$ and $R$ are partitioned consistently with the vectors +of endogenous variables and innovations. Provided that matrix $R_{c,c}$ +is square and full rank (a necessary condition is that the number of +free endogenous variables matches the number of free innovations), given +$y_{c,t}$, $\varepsilon_{u,t}$ and $y_{t-1}$ the first block of +equations can be solved for $\varepsilon_{c,t}$: + +> $$\varepsilon_{c,t} = R_{c,c}^{-1}\bigl( y_{c,t} - T_{c,c}y_{c,t} - T_{c,u}y_{u,t} - R_{c,u}\varepsilon_{u,t}\bigr)$$ + +and $y_{u,t}$ can be updated by evaluating the second block of +equations: + +> $$y_{u,t} = T_{u,c}y_{c,t-1} + T_{u,u}y_{u,t-1} + R_{u,c}\varepsilon_{c,t} + R_{u,u}\varepsilon_{u,t}$$ + +By iterating over these two blocks of equations, we can build a forecast +for all the endogenous variables in the system conditional on paths for +a subset of the endogenous variables. If the distribution of the free +innovations $\varepsilon_{u,t}$ is provided (*i.e.* some of them have +positive variances) this exercise is replicated (the number of +replication is controlled by the option `replic`{.interpreted-text +role="opt"} described below) by drawing different sequences of free +innovations. The result is a predictive distribution for the +uncontrolled endogenous variables, $y_{u,t}$, that Dynare will use to +report confidence bands around the point conditional forecast. + +A few things need to be noted. First, the controlled exogenous variables +are set to zero for the uncontrolled periods. This implies that there is +no forecast uncertainty arising from these exogenous variables in +uncontrolled periods. Second, by making use of the first order state +space solution, even if a higher-order approximation was performed, the +conditional forecasts will be based on a first order approximation. +Since the controlled exogenous variables are identified on the basis of +the reduced form model (*i.e.* after solving for the expectations), they +are unforeseen shocks from the perspective of the agents in the model. +That is, agents expect the endogenous variables to return to their +respective steady state levels but are surprised in each period by the +realisation of shocks keeping the endogenous variables along a +predefined (unexpected) path. Fourth, if the structural innovations are +correlated, because the calibrated or estimated covariance matrix has +non zero off diagonal elements, the results of the conditional forecasts +will depend on the ordering of the innovations (as declared after +`varexo`). As in VAR models, a Cholesky decomposition is used to +factorise the covariance matrix and identify orthogonal impulses. It is +preferable to declare the correlations in the model block (explicitly +imposing the identification restrictions), unless you are satisfied with +the implicit identification restrictions implied by the Cholesky +decomposition. + +This command has to be called after `estimation` or `stoch_simul`. + +Use `conditional_forecast_paths`{.interpreted-text role="bck"} block to +give the list of constrained endogenous, and their constrained future +path. Option `controlled_varexo` is used to specify the structural +shocks which will be matched to generate the constrained path. + +Use `plot_conditional_forecast`{.interpreted-text role="comm"} to graph +the results. + +*Options* + +::: {.option} +parameter\_set = OPTION + +See `parameter_set `{.interpreted-text +role="opt"} for possible values. No default value, mandatory option. +::: + +::: {.option} +controlled\_varexo = (VARIABLE\_NAME\...) + +Specify the exogenous variables to use as control variables. No default +value, mandatory option. +::: + +::: {.option} +periods = INTEGER + +Number of periods of the forecast. Default: `40`. `periods` cannot be +smaller than the number of constrained periods. +::: + +::: {.option} +replic = INTEGER + +Number of simulations used to compute the conditional forecast +uncertainty. Default: `5000`. +::: + +::: {.option} +conf\_sig = DOUBLE + +Level of significance for confidence interval. Default: `0.80`. +::: + +*Output* + +The results are stored in `oo_.conditional_forecast`, which is described +below. + +*Example* + +> var y a; +> varexo e u; +> ... +> estimation(...); +> +> conditional_forecast_paths; +> var y; +> periods 1:3, 4:5; +> values 2, 5; +> var a; +> periods 1:5; +> values 3; +> end; +> +> conditional_forecast(parameter_set = calibration, controlled_varexo = (e, u), replic = 3000); +> +> plot_conditional_forecast(periods = 10) a y; + +::: {.matvar} +[oo]().conditional\_forecast.cond + +Variable set by the `conditional_forecast` command. It stores the +conditional forecasts. Fields are `periods+1` by `1` vectors storing the +steady state (time 0) and the subsequent `periods` forecasts periods. +Fields are of the form: + + oo_.conditional_forecast.cond.FORECAST_MOMENT.VARIABLE_NAME + +where FORECAST\_MOMENT is one of the following: + +> `Mean` +> +> > Mean of the conditional forecast distribution. +> +> `ci` +> +> > Confidence interval of the conditional forecast distribution. The +> > size corresponds to `conf_sig`. +::: + +::: {.matvar} +[oo]().conditional\_forecast.uncond + +Variable set by the `conditional_forecast` command. It stores the +unconditional forecasts. Fields are of the form: + + oo_.conditional_forecast.uncond.FORECAST_MOMENT.VARIABLE_NAME +::: + +::: {.matvar} +forecasts.instruments + +Variable set by the `conditional_forecast command`. Stores the names of +the exogenous instruments. +::: + +::: {.matvar} +[oo]().conditional\_forecast.controlled\_variables + +Variable set by the `conditional_forecast` command. Stores the position +of the constrained endogenous variables in declaration order. +::: + +::: {.matvar} +[oo]().conditional\_forecast.controlled\_exo\_variables + +Variable set by the `conditional_forecast` command. Stores the values of +the controlled exogenous variables underlying the conditional forecasts +to achieve the constrained endogenous variables. Fields are +`[number of constrained periods]` by `1` vectors and are of the form: + + oo_.conditional_forecast.controlled_exo_variables.FORECAST_MOMENT.SHOCK_NAME +::: + +::: {.matvar} +[oo]().conditional\_forecast.graphs + +Variable set by the `conditional_forecast` command. Stores the +information for generating the conditional forecast plots. +::: +::: + +::: {.block} +conditional\_forecast\_paths ; + +Describes the path of constrained endogenous, before calling +`conditional_forecast`. The syntax is similar to deterministic shocks in +`shocks`, see `conditional_forecast` for an example. + +The syntax of the block is the same as for the deterministic shocks in +the `shocks` blocks (see `shocks-exo`{.interpreted-text role="ref"}). +Note that you need to specify the full path for all constrained +endogenous variables between the first and last specified period. If an +intermediate period is not specified, a value of 0 is assumed. That is, +if you specify only values for periods 1 and 3, the values for period 2 +will be 0. Currently, it is not possible to have uncontrolled +intermediate periods. + +It is however possible to have different number of controlled periods +for different variables. In that case, the order of declaration of +endogenous controlled variables and of `controlled_varexo` matters: if +the second endogenous variable is controlled for less periods than the +first one, the second `controlled_varexo` isn\'t set for the last +periods. + +In case of the presence of `observation_trends`, the specified +controlled path for these variables needs to include the trend +component. When using the `loglinear `{.interpreted-text +role="ref"} option, it is necessary to specify the logarithm of the +controlled variables. +::: + +::: {.block} +filter\_initial\_state ; + +This block specifies the initial values of the endogenous states at the +beginning of the Kalman filter recursions. That is, if the Kalman filter +recursion starts with time t=1 being the first observation, this block +provides the state estimate at time 0 given information at time 0, +$E_0(x_0)$. If nothing is specified, the initial condition is assumed to +be at the steady state (which is the unconditional mean for a stationary +model). + +This block is terminated by `end;`. + +Each line inside of the block should be of the form: + + VARIABLE_NAME(INTEGER)=EXPRESSION; + +`EXPRESSION` is any valid expression returning a numerical value and can +contain parameter values. This allows specifying relationships that will +be honored during estimation. `INTEGER` refers to the lag with which a +variable appears. By convention in Dynare, period 1 is the first period. +Going backwards in time, the first period before the start of the +simulation is period 0, then period -1, and so on. Note that the +`filter_initial_state` block does not take non-state variables. + +*Example* + +> filter_initial_state; +> k(0)= ((1/bet-(1-del))/alp)^(1/(alp-1))*l_ss; +> P(0)=2.5258; +> m(0)= mst; +> end; +::: + +::: {.command} +plot\_conditional\_forecast \[VARIABLE\_NAME\...\]; +plot\_conditional\_forecast (periods = INTEGER) \[VARIABLE\_NAME\...\]; + +Plots the conditional (plain lines) and unconditional (dashed lines) +forecasts. + +To be used after `conditional_forecast`. + +*Options* + +::: {.option} +periods = INTEGER + +Number of periods to be plotted. Default: equal to periods in +`conditional_forecast`. The number of periods declared in +`plot_conditional_forecast` cannot be greater than the one declared in +`conditional_forecast`. +::: +::: + +::: {.command} +bvar\_forecast ; + +This command computes (out-of-sample) forecasts for an estimated BVAR +model, using Minnesota priors. + +See `bvar-a-la-sims.pdf`, which comes with Dynare distribution, for more +information on this command. +::: + +If the model contains strong non-linearities or if some perfectly +expected shocks are considered, the forecasts and the conditional +forecasts can be computed using an extended path method. The forecast +scenario describing the shocks and/or the constrained paths on some +endogenous variables should be build. The first step is the forecast +scenario initialization using the function `init_plan`: + +::: {.matcomm} +HANDLE = init\_plan (DATES); + +Creates a new forecast scenario for a forecast period (indicated as a +dates class, see `dates class members +`{.interpreted-text role="ref"}). This function return a +handle on the new forecast scenario. +::: + +The forecast scenario can contain some simple shocks on the exogenous +variables. This shocks are described using the function `basic_plan`: + +::: {.matcomm} +HANDLE = basic\_plan (HANDLE, \`VAR\_NAME\', \`SHOCK\_TYPE\', DATES, +MATLAB VECTOR OF DOUBLE \| \[DOUBLE \| EXPR \[DOUBLE \| EXPR\] \] ); + +Adds to the forecast scenario a shock on the exogenous variable +indicated between quotes in the second argument. The shock type has to +be specified in the third argument between quotes: 'surprise' in case of +an unexpected shock or 'perfect\_foresight' for a perfectly anticipated +shock. The fourth argument indicates the period of the shock using a +dates class (see `dates class +members `{.interpreted-text role="ref"}). The last +argument is the shock path indicated as a MATLAB vector of double. This +function return the handle of the updated forecast scenario. +::: + +The forecast scenario can also contain a constrained path on an +endogenous variable. The values of the related exogenous variable +compatible with the constrained path are in this case computed. In other +words, a conditional forecast is performed. This kind of shock is +described with the function `flip_plan`: + +::: {.matcomm} +HANDLE = flip\_plan (HANDLE, \`VAR\_NAME\', \`VAR\_NAME\', +\`SHOCK\_TYPE\', DATES, MATLAB VECTOR OF DOUBLE \| \[DOUBLE \| EXPR +\[DOUBLE \| EXPR\] \] ); + +Adds to the forecast scenario a constrained path on the endogenous +variable specified between quotes in the second argument. The associated +exogenous variable provided in the third argument between quotes, is +considered as an endogenous variable and its values compatible with the +constrained path on the endogenous variable will be computed. The nature +of the expectation on the constrained path has to be specified in the +fourth argument between quotes: 'surprise' in case of an unexpected path +or 'perfect\_foresight' for a perfectly anticipated path. The fifth +argument indicates the period where the path of the endogenous variable +is constrained using a dates class (see `dates class +members `{.interpreted-text role="ref"}). The last +argument contains the constrained path as a MATLAB vector of double. +This function return the handle of the updated forecast scenario. +::: + +Once the forecast scenario if fully described, the forecast is computed +with the command `det_cond_forecast`: + +::: {.matcomm} +DSERIES = det\_cond\_forecast (HANDLE\[, DSERIES \[, DATES\]\]); + +Computes the forecast or the conditional forecast using an extended path +method for the given forecast scenario (first argument). The past values +of the endogenous and exogenous variables provided with a dseries class +(see `dseries class +members `{.interpreted-text role="ref"}) can be +indicated in the second argument. By default, the past values of the +variables are equal to their steady-state values. The initial date of +the forecast can be provided in the third argument. By default, the +forecast will start at the first date indicated in the +`init_plan command`. This function returns a dset containing the +historical and forecast values for the endogenous and exogenous +variables. +::: + +*Example* + +> % conditional forecast using extended path method +> % with perfect foresight on r path +> +> var y r; +> varexo e u; +> ... +> smoothed = dseries('smoothed_variables.csv'); +> +> fplan = init_plan(2013Q4:2029Q4); +> fplan = flip_plan(fplan, 'y', 'u', 'surprise', 2013Q4:2014Q4, [1 1.1 1.2 1.1 ]); +> fplan = flip_plan(fplan, 'r', 'e', 'perfect_foresight', 2013Q4:2014Q4, [2 1.9 1.9 1.9 ]); +> +> dset_forecast = det_cond_forecast(fplan, smoothed); +> +> plot(dset_forecast.{'y','u'}); +> plot(dset_forecast.{'r','e'}); + +::: {.command} +smoother2histval ; smoother2histval(OPTIONS\...); + +The purpose of this command is to construct initial conditions (for a +subsequent simulation) that are the smoothed values of a previous +estimation. + +More precisely, after an estimation run with the `smoother` option, +`smoother2histval` will extract the smoothed values (from +`oo_.SmoothedVariables`, and possibly from `oo_.SmoothedShocks` if there +are lagged exogenous), and will use these values to construct initial +conditions (as if they had been manually entered through `histval`). + +*Options* + +::: {.option} +period = INTEGER + +Period number to use as the starting point for the subsequent +simulation. It should be between 1 and the number of observations that +were used to produce the smoothed values. Default: the last observation. +::: + +::: {.option} +infile = FILENAME + +Load the smoothed values from a `_results.mat` file created by a +previous Dynare run. Default: use the smoothed values currently in the +global workspace. +::: + +::: {.option} +invars = ( VARIABLE\_NAME \[VARIABLE\_NAME \...\] ) + +A list of variables to read from the smoothed values. It can contain +state endogenous variables, and also exogenous variables having a lag. +Default: all the state endogenous variables, and all the exogenous +variables with a lag. +::: + +::: {.option} +outfile = FILENAME + +Write the initial conditions to a file. Default: write the initial +conditions in the current workspace, so that a simulation can be +performed. +::: + +::: {.option} +outvars = ( VARIABLE\_NAME \[VARIABLE\_NAME \...\] ) + +A list of variables which will be given the initial conditions. This +list must have the same length than the list given to `invars`, and +there will be a one-to-one mapping between the two list. Default: same +value as option `invars`. +::: + +*Use cases* + +There are three possible ways of using this command: + +> - Everything in a single file: run an estimation with a smoother, +> then run `smoother2histval` (without the `infile` and `outfile` +> options), then run a stochastic simulation. +> - In two files: in the first file, run the smoother and then run +> `smoother2histval` with the `outfile` option; in the second file, +> run `histval_file` to load the initial conditions, and run a +> (deterministic or stochastic) simulation. +> - In two files: in the first file, run the smoother; in the second +> file, run `smoother2histval` with the `infile` option equal to the +> `_results.mat` file created by the first file, and then run a +> (deterministic or stochastic) simulation. +::: + +Optimal policy +-------------- + +Dynare has tools to compute optimal policies for various types of +objectives. You can either solve for optimal policy under commitment +with `ramsey_model`, for optimal policy under discretion with +`discretionary_policy` or for optimal simple rules with `osr` (also +implying commitment). + +::: {.command} +planner\_objective MODEL\_EXPRESSION ; + +This command declares the policy maker objective, for use with +`ramsey_model` or `discretionary_policy`. + +You need to give the one-period objective, not the discounted lifetime +objective. The discount factor is given by the `planner_discount` option +of `ramsey_model` and `discretionary_policy`. The objective function can +only contain current endogenous variables and no exogenous ones. This +limitation is easily circumvented by defining an appropriate auxiliary +variable in the model. + +With `ramsey_model`, you are not limited to quadratic objectives: you +can give any arbitrary nonlinear expression. + +With `discretionary_policy`, the objective function must be quadratic. +::: + +::: {.command} +evaluate\_planner\_objective; evaluate\_planner\_objective +(OPTIONS\...); + +This command computes, displays, and stores the value of the planner +objective function under Ramsey policy or discretion in +`oo_.planner_objective_value`. It will provide both unconditional +welfare and welfare conditional on the initial (i.e. period 0) values of +the endogenous and exogenous state variables inherited by the planner. +In a deterministic context, the respective initial values are set using +`initval` or `histval` (depending on the exact context). + +In a stochastic context, if no initial state values have been specified +with `histval`, their values are taken to be the steady state values. +Because conditional welfare is computed conditional on optimal policy by +the planner in the first endogenous period (period 1), it is conditional +on the information set in the period 1. This information set includes +both the predetermined states inherited from period 0 (specified via +`histval` for both endogenous and lagged exogenous states) as well as +the period 1 values of the exogenous shocks. The latter are specified +using the perfect foresight syntax of the shocks-block. + +At the current stage, the stochastic context does not support the +`pruning` option. At `order>3`, only the computation of conditional +welfare with steady state Lagrange multipliers is supported. Note that +at [order=2]{.title-ref}, the output is based on the second-order +accurate approximation of the variance stored in [oo\_.var]{.title-ref}. + +*Options* + +::: {.option} +periods = INTEGER + +The value of the option specifies the number of periods to use in the +simulations in the computation of unconditional welfare at higher order. + +Default: `10000`. +::: + +::: {.option} +drop = INTEGER + +The number of burn-in draws out of `periods` discarded before computing +the unconditional welfare at higher order. Default: `1000`. +::: + +*Example (stochastic context)* + +> var a ...; +> varexo u; +> +> model; +> a = rho*a(-1)+u+u(-1); +> ... +> end; +> +> histval; +> u(0)=1; +> a(0)=-1; +> end; +> +> shocks; +> var u; stderr 0.008; +> var u; +> periods 1; +> values 1; +> end; +> +> evaluate_planner_objective; + +::: {.matvar} +[oo]().planner\_objective\_value.unconditional +::: + +Scalar storing the value of unconditional welfare. In a perfect +foresight context, it corresponds to welfare in the long-run, +approximated as welfare in the terminal simulation period. + +::: {.matvar} +[oo]().planner\_objective\_value.conditional +::: + +In a perfect foresight context, this field will be a scalar storing the +value of welfare conditional on the specified initial condition and zero +initial Lagrange multipliers. + +In a stochastic context, it will have two subfields: + +::: {.matvar} +[oo]().planner\_objective\_value.conditional.steady\_initial\_multiplier +::: + +Stores the value of the planner objective when the initial Lagrange +multipliers associated with the planner's problem are set to their +steady state values (see `ramsey_policy`{.interpreted-text +role="comm"}). + +::: {.matvar} +[oo]().planner\_objective\_value.conditional.zero\_initial\_multiplier +::: + +Stores the value of the planner objective when the initial Lagrange +multipliers associated with the planner's problem are set to 0, i.e. it +is assumed that the planner exploits its ability to surprise private +agents in the first period of implementing Ramsey policy. This value +corresponds to the planner implementing optimal policy for the first +time and committing not to re-optimize in the future. +::: + +### Optimal policy under commitment (Ramsey) + +Dynare allows to automatically compute optimal policy choices of a +Ramsey planner who takes the specified private sector equilibrium +conditions into account and commits to future policy choices. Doing so +requires specifying the private sector equilibrium conditions in the +`model`-block and a `planner_objective` as well as potentially some +`instruments` to facilitate computations. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +Be careful when employing forward-looking auxiliary variables in the +context of timeless perspective Ramsey computations. They may alter the +problem the Ramsey planner will solve for the first period, although +they seemingly leave the private sector equilibrium unaffected. The +reason is the planner optimizes with respect to variables dated `t` and +takes the value of time 0 variables as given, because they are +predetermined. This set of initially predetermined variables will change +with forward-looking definitions. Thus, users are strongly advised to +use model-local variables instead. + +*Example* + +> Consider a perfect foresight example where the Euler equation for the +> return to capital is given by +> +> 1/C=beta*1/C(+1)*(R(+1)+(1-delta)) +> +> The job of the Ramsey planner in period `1` is to choose $C_1$ and +> $R_1$, taking as given $C_0$. The above equation may seemingly +> equivalently be written as +> +> 1/C=beta*1/C(+1)*(R_cap); +> R_cap=R(+1)+(1-delta); +> +> due to perfect foresight. However, this changes the problem of the +> Ramsey planner in the first period to choosing $C_1$ and $R_1$, taking +> as given both $C_0$ and $R^{cap}_0$. Thus, the relevant return to +> capital in the Euler equation of the first period is not a choice of +> the planner anymore due to the forward-looking nature of the +> definition in the second line! +> +> A correct specification would be to instead define `R_cap` as a +> model-local variable: +> +> 1/C=beta*1/C(+1)*(R_cap); +> #R_cap=R(+1)+(1-delta); +::: + +::: {.command} +ramsey\_model (OPTIONS\...); + +This command computes the First Order Conditions for maximizing the +policy maker objective function subject to the constraints provided by +the equilibrium path of the private economy. + +The planner objective must be declared with the +`planner_objective`{.interpreted-text role="comm"} command. + +This command only creates the expanded model, it doesn't perform any +computations. It needs to be followed by other instructions to actually +perform desired computations. Examples are calls to `steady` to compute +the steady state of the Ramsey economy, to `stoch_simul` with various +approximation orders to conduct stochastic simulations based on +perturbation solutions, to `estimation` in order to estimate models +under optimal policy with commitment, and to perfect foresight +simulation routines. + +See `aux-variables`{.interpreted-text role="ref"}, for an explanation of +how Lagrange multipliers are automatically created. + +*Options* + +This command accepts the following options: + +::: {.option} +planner\_discount = EXPRESSION + +Declares or reassigns the discount factor of the central planner +`optimal_policy_discount_factor`. Default: `1.0`. +::: + +::: {.option} +planner\_discount\_latex\_name = LATEX\_NAME + +Sets the LaTeX name of the `optimal_policy_discount_factor` parameter. +::: + +::: {.option} +instruments = (VARIABLE\_NAME,\...) + +Declares instrument variables for the computation of the steady state +under optimal policy. Requires a `steady_state_model` block or a +`_steadystate.m` file. See below. +::: + +*Steady state* + +Dynare takes advantage of the fact that the Lagrange multipliers appear +linearly in the equations of the steady state of the model under optimal +policy. Nevertheless, it is in general very difficult to compute the +steady state with simply a numerical guess in `initval` for the +endogenous variables. + +It greatly facilitates the computation, if the user provides an +analytical solution for the steady state (in `steady_state_model` block +or in a `_steadystate.m` file). In this case, it is necessary to provide +a steady state solution CONDITIONAL on the value of the instruments in +the optimal policy problem and declared with the option `instruments`. +The initial value of the instrument for steady state finding in this +case is set with `initval`. Note that computing and displaying steady +state values using the `steady`-command or calls to `resid` must come +after the `ramsey_model` statement and the `initval`-block. + +Note that choosing the instruments is partly a matter of interpretation +and you can choose instruments that are handy from a mathematical point +of view but different from the instruments you would refer to in the +analysis of the paper. A typical example is choosing inflation or +nominal interest rate as an instrument. +::: + +::: {.block} +ramsey\_constraints ; + +This block lets you define constraints on the variables in the Ramsey +problem. The constraints take the form of a variable, an inequality +operator (\> or \<) and a constant. + +*Example* + +> ramsey_constraints; +> i > 0; +> end; +::: + +::: {.command} +ramsey\_policy \[VARIABLE\_NAME\...\]; ramsey\_policy (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +This command is deprecated and formally equivalent to the calling +sequence + +> ramsey_model; +> stoch_simul; +> evaluate_planner_objective; + +It computes an approximation of the policy that maximizes the policy +maker's objective function subject to the constraints provided by the +equilibrium path of the private economy and under commitment to this +optimal policy. The Ramsey policy is computed by approximating the +equilibrium system around the perturbation point where the Lagrange +multipliers are at their steady state, i.e. where the Ramsey planner +acts as if the initial multipliers had been set to 0 in the distant +past, giving them time to converge to their steady state value. +Consequently, the optimal decision rules are computed around this steady +state of the endogenous variables and the Lagrange multipliers. + +Note that the variables in the list after the `ramsey_policy` or +`stoch_simul`-command can also contain multiplier names, but in a +case-sensititve way (e.g. `MULT_1`). In that case, Dynare will for +example display the IRFs of the respective multipliers when `irf>0`. + +The planner objective must be declared with the +`planner_objective`{.interpreted-text role="comm"} command. + +*Options* + +This command accepts all options of `stoch_simul`, plus: + +::: {.option} +planner\_discount = EXPRESSION + +See `planner_discount `{.interpreted-text +role="opt"}. +::: + +::: {.option} +instruments = (VARIABLE\_NAME,\...) + +Declares instrument variables for the computation of the steady state +under optimal policy. Requires a `steady_state_model` block or a +`_steadystate.m` file. See below. +::: + +*Output* + +This command generates all the output variables of `stoch_simul`. For +specifying the initial values for the endogenous state variables (except +for the Lagrange multipliers), see above. + +*Steady state* + +See `Ramsey steady state `{.interpreted-text role="comm"}. +::: + +### Optimal policy under discretion + +::: {.command} +discretionary\_policy \[VARIABLE\_NAME\...\]; discretionary\_policy +(OPTIONS\...) \[VARIABLE\_NAME\...\]; + +This command computes an approximation of the optimal policy under +discretion. The algorithm implemented is essentially an LQ solver, and +is described by *Dennis (2007)*. + +You must ensure that your objective is quadratic. Regarding the model, +it must either be linear or solved at first order with an analytical +steady state provided. In the first case, you should set the `linear` +option of the `model` block. + +It is possible to use the `estimation`{.interpreted-text role="comm"} +command after the `discretionary_policy` command, in order to estimate +the model with optimal policy under discretion and +`evaluate_planner_objective`{.interpreted-text role="comm"} to compute +welfare. + +*Options* + +This command accepts the same options as `ramsey_policy`, plus: + +::: {.option} +discretionary\_tol = NON-NEGATIVE DOUBLE + +Sets the tolerance level used to assess convergence of the solution +algorithm. Default: `1e-7`. +::: + +::: {.option} +maxit = INTEGER + +Maximum number of iterations. Default: `3000`. +::: +::: + +### Optimal Simple Rules (OSR) + +::: {.command} +osr \[VARIABLE\_NAME\...\]; osr (OPTIONS\...) \[VARIABLE\_NAME\...\]; + +This command computes optimal simple policy rules for linear-quadratic +problems of the form: + +> $$\min_\gamma E(y'_tWy_t)$$ + +such that: + +> $$A_1 E_ty_{t+1}+A_2 y_t+ A_3 y_{t-1}+C e_t=0$$ + +where: + +> - $E$ denotes the unconditional expectations operator; +> - $\gamma$ are parameters to be optimized. They must be elements of +> the matrices $A_1$, $A_2$, $A_3$, i.e. be specified as parameters +> in the `params` command and be entered in the `model` block; +> - $y$ are the endogenous variables, specified in the `var` command, +> whose (co)-variance enters the loss function; +> - $e$ are the exogenous stochastic shocks, specified in the +> `varexo`- ommand; +> - $W$ is the weighting matrix; + +The linear quadratic problem consists of choosing a subset of model +parameters to minimize the weighted (co)-variance of a specified subset +of endogenous variables, subject to a linear law of motion implied by +the first order conditions of the model. A few things are worth +mentioning. First, $y$ denotes the selected endogenous variables' +deviations from their steady state, i.e. in case they are not already +mean 0 the variables entering the loss function are automatically +demeaned so that the centered second moments are minimized. Second, +`osr` only solves linear quadratic problems of the type resulting from +combining the specified quadratic loss function with a first order +approximation to the model's equilibrium conditions. The reason is that +the first order state-space representation is used to compute the +unconditional (co)-variances. Hence, `osr` will automatically select +`order=1`. Third, because the objective involves minimizing a weighted +sum of unconditional second moments, those second moments must be +finite. In particular, unit roots in $y$ are not allowed. + +The subset of the model parameters over which the optimal simple rule is +to be optimized, $\gamma$, must be listed with `osr_params`. + +The weighting matrix $W$ used for the quadratic objective function is +specified in the `optim_weights` block. By attaching weights to +endogenous variables, the subset of endogenous variables entering the +objective function, $y$, is implicitly specified. + +The linear quadratic problem is solved using the numerical optimizer +specified with `opt_algo `{.interpreted-text +role="opt"}. + +*Options* + +The `osr` command will subsequently run `stoch_simul` and accepts the +same options, including restricting the endogenous variables by listing +them after the command, as `stoch_simul` (see +`stoch-sol`{.interpreted-text role="ref"}) plus + +::: {.option} +opt\_algo = INTEGER + +Specifies the optimizer for minimizing the objective function. The same +solvers as for `mode_compute` (see +`mode_compute `{.interpreted-text +role="opt"}) are available, except for `5`, `6`, and `10`. +::: + +::: {.option} +optim = (NAME, VALUE, \...) + +A list of NAME\`[ and VALUE pairs. Can be used to set options for the +optimization routines. The set of available options depends on the +selected optimization routine (i.e. on the value of option +:opt:\`opt\_algo \]{.title-ref}). See +`optim `{.interpreted-text role="opt"}. +::: + +::: {.option} +maxit = INTEGER + +Determines the maximum number of iterations used in `opt_algo=4`. This +option is now deprecated and will be removed in a future release of +Dynare. Use `optim` instead to set optimizer-specific values. Default: +`1000`. +::: + +::: {.option} +tolf = DOUBLE + +Convergence criterion for termination based on the function value used +in `opt_algo=4`. Iteration will cease when it proves impossible to +improve the function value by more than tolf. This option is now +deprecated and will be removed in a future release of Dynare. Use +`optim` instead to set optimizer-specific values. Default: `1e-7`. +::: + +::: {.option} +silent\_optimizer + +See `silent_optimizer`{.interpreted-text role="opt"}. +::: + +::: {.option} +huge\_number = DOUBLE + +Value for replacing the infinite bounds on parameters by finite numbers. +Used by some optimizers for numerical reasons (see +`huge_number `{.interpreted-text role="opt"}). +Users need to make sure that the optimal parameters are not larger than +this value. Default: `1e7`. +::: + +The value of the objective is stored in the variable +`oo_.osr.objective_function` and the value of parameters at the optimum +is stored in `oo_.osr.optim_params`. See below for more details. + +After running `osr` the parameters entering the simple rule will be set +to their optimal value so that subsequent runs of `stoch_simul` will be +conducted at these values. +::: + +::: {.command} +osr\_params PARAMETER\_NAME\...; + +This command declares parameters to be optimized by `osr`. +::: + +::: {.block} +optim\_weights ; + +This block specifies quadratic objectives for optimal policy problems. + +More precisely, this block specifies the nonzero elements of the weight +matrix $W$ used in the quadratic form of the objective function in +`osr`. + +An element of the diagonal of the weight matrix is given by a line of +the form: + + VARIABLE_NAME EXPRESSION; + +An off-the-diagonal element of the weight matrix is given by a line of +the form: + + VARIABLE_NAME, VARIABLE_NAME EXPRESSION; +::: + +*Example* + +> var y inflation r; +> varexo y_ inf_; +> +> parameters delta sigma alpha kappa gammarr gammax0 gammac0 gamma_y_ gamma_inf_; +> +> delta = 0.44; +> kappa = 0.18; +> alpha = 0.48; +> sigma = -0.06; +> +> gammarr = 0; +> gammax0 = 0.2; +> gammac0 = 1.5; +> gamma_y_ = 8; +> gamma_inf_ = 3; +> +> model(linear); +> y = delta * y(-1) + (1-delta)*y(+1)+sigma *(r - inflation(+1)) + y_; +> inflation = alpha * inflation(-1) + (1-alpha) * inflation(+1) + kappa*y + inf_; +> r = gammax0*y(-1)+gammac0*inflation(-1)+gamma_y_*y_+gamma_inf_*inf_; +> end; +> +> shocks; +> var y_; stderr 0.63; +> var inf_; stderr 0.4; +> end; +> +> optim_weights; +> inflation 1; +> y 1; +> y, inflation 0.5; +> end; +> +> osr_params gammax0 gammac0 gamma_y_ gamma_inf_; +> osr y; + +::: {.block} +osr\_params\_bounds ; + +This block declares lower and upper bounds for parameters in the optimal +simple rule. If not specified the optimization is unconstrained. + +Each line has the following syntax: + + PARAMETER_NAME, LOWER_BOUND, UPPER_BOUND; + +Note that the use of this block requires the use of a constrained +optimizer, i.e. setting +`opt_algo `{.interpreted-text role="opt"} to `1`, +`2`, `5` or `9`. + +*Example* + +> osr_params_bounds; +> gamma_inf_, 0, 2.5; +> end; +> +> osr(opt_algo=9) y; +::: + +::: {.matvar} +[oo]().osr.objective\_function + +After an execution of the `osr` command, this variable contains the +value of the objective under optimal policy. +::: + +::: {.matvar} +[oo]().osr.optim\_params + +After an execution of the `osr` command, this variable contains the +value of parameters at the optimum, stored in fields of the form +`oo_.osr.optim_params.PARAMETER_NAME`. +::: + +::: {.matvar} +[M]().osr.param\_names + +After an execution of the `osr` command, this cell contains the names of +the parameters. +::: + +::: {.matvar} +[M]().osr.param\_indices + +After an execution of the `osr` command, this vector contains the +indices of the OSR parameters in `M_.params`. +::: + +::: {.matvar} +[M]().osr.param\_bounds + +After an execution of the `osr` command, this two by number of OSR +parameters matrix contains the lower and upper bounds of the parameters +in the first and second column, respectively. +::: + +::: {.matvar} +[M]().osr.variable\_weights + +After an execution of the `osr` command, this sparse matrix contains the +weighting matrix associated with the variables in the objective +function. +::: + +::: {.matvar} +[M]().osr.variable\_indices + +After an execution of the `osr` command, this vector contains the +indices of the variables entering the objective function in +`M_.endo_names`. +::: + + +Displaying and saving results +----------------------------- + +Dynare has comments to plot the results of a simulation and to save the +results. + +::: {.command} +rplot VARIABLE\_NAME\...; + +Plots the simulated path of one or several variables, as stored in +`oo_.endo_simul` by either `perfect_foresight_solver`, `simul` (see +`det-simul`{.interpreted-text role="ref"}) or `stoch_simul` with option +`periods` (see `stoch-sol`{.interpreted-text role="ref"}). The variables +are plotted in levels. +::: + +::: {.command} +dynatype (FILENAME) \[VARIABLE\_NAME\...\]; + +This command prints the listed endogenous or exogenous variables in a +text file named FILENAME. If no VARIABLE\_NAME is listed, all endogenous +variables are printed. +::: + +::: {.command} +dynasave (FILENAME) \[VARIABLE\_NAME\...\]; + +This command saves the listed endogenous or exogenous variables in a +binary file named FILENAME. If no VARIABLE\_NAME is listed, all +endogenous variables are saved. + +In MATLAB or Octave, variables saved with the `dynasave` command can be +retrieved by the command: + + load(FILENAME,'-mat') +::: + +Macro processing language {#macro-proc-lang} +------------------------- + +It is possible to use "macro" commands in the `.mod` file for performing +tasks such as: including modular source files, replicating blocks of +equations through loops, conditionally executing some code, writing +indexed sums or products inside equations\... + +The Dynare macro-language provides a new set of *macro-commands* which +can be used in `.mod` files. It features: + +> - File inclusion +> - Loops (`for` structure) +> - Conditional inclusion (`if/then/else` structures) +> - Expression substitution + +This macro-language is totally independent of the basic Dynare language, +and is processed by a separate component of the Dynare pre-processor. +The macro processor transforms a `.mod` file with macros into a `.mod` +file without macros (doing expansions/inclusions), and then feeds it to +the Dynare parser. The key point to understand is that the macro +processor only does text substitution (like the C preprocessor or the +PHP language). Note that it is possible to see the output of the macro +processor by using the `savemacro` option of the `dynare` command (see +`dyn-invoc`{.interpreted-text role="ref"}). + +The macro processor is invoked by placing *macro directives* in the +`.mod` file. Directives begin with an at-sign followed by a pound sign +(`@#`). They produce no output, but give instructions to the macro +processor. In most cases, directives occupy exactly one line of text. If +needed, two backslashes (`\\`) at the end of the line indicate that the +directive is continued on the next line. Macro directives following `//` +are not interpreted by the macro processor. For historical reasons, +directives in commented blocks, *ie* surrounded by `/*` and `*/`, are +interpreted by the macro processor. The user should not rely on this +behavior. The main directives are: + +> - `@#includepath`, paths to search for files that are to be +> included, +> - `@#include`, for file inclusion, +> - `@#define`, for defining a macro processor variable, +> - `@#if, @#ifdef, @#ifndef, @#elseif, @#else, @#endif` for +> conditional statements, +> - `@#for, @#endfor` for constructing loops. + +The macro processor maintains its own list of variables (distinct from +model variables and MATLAB/Octave variables). These macro-variables are +assigned using the `@#define` directive and can be of the following +basic types: boolean, real, string, tuple, function, and array (of any +of the previous types). + +### Macro expressions {#macro-exp} + +Macro-expressions can be used in two places: + +> - Inside macro directives, directly; +> - In the body of the `.mod` file, between an at-sign and curly +> braces (like `@{expr}`): the macro processor will substitute the +> expression with its value + +It is possible to construct macro-expressions that can be assigned to +macro-variables or used within a macro-directive. The expressions are +constructed using literals of the basic types (boolean, real, string, +tuple, array), comprehensions, macro-variables, macro-functions, and +standard operators. + +::: {.note} +::: {.admonition-title} +Note +::: + +Elsewhere in the manual, MACRO\_EXPRESSION designates an expression +constructed as explained in this section. +::: + +**Boolean** + +The following operators can be used on booleans: + +> - Comparison operators: `==, !=` +> - Logical operators: `&&, ||, !` + +**Real** + +The following operators can be used on reals: + +> - Arithmetic operators: `+, -, *, /, ^` +> - Comparison operators: `<, >, <=, >=, ==, !=` +> - Logical operators: `&&, ||, !` +> - Ranges with an increment of `1`: `REAL1:REAL2` (for example, `1:4` +> is equivalent to real array `[1, 2, 3, 4]`). +> +> ::: {.versionchanged} +> 4.6 Previously, putting brackets around the arguments to the colon +> operator (e.g. `[1:4]`) had no effect. Now, `[1:4]` will create an +> array containing an array (i.e. `[ [1, 2, 3, 4] ]`). +> ::: +> +> - Ranges with user-defined increment: `REAL1:REAL2:REAL3` (for +> example, `6:-2.1:-1` is equivalent to real array +> `[6, 3.9, 1.8, -0.3]`). +> - Functions: +> `max, min, mod, exp, log, log10, sin, cos, tan, asin, acos, atan, sqrt, cbrt, sign, floor, ceil, trunc, erf, erfc, gamma, lgamma, round, normpdf, normcdf`. +> NB `ln` can be used instead of `log` + +**String** + +String literals have to be enclosed by **double** quotes (like +`"name"`). + +The following operators can be used on strings: + +> - Comparison operators: `<, >, <=, >=, ==, !=` +> - Concatenation of two strings: `+` +> - Extraction of substrings: if `s` is a string, then `s[3]` is a +> string containing only the third character of `s`, and `s[4:6]` +> contains the characters from 4th to 6th +> - Function: `length` + +**Tuple** + +Tuples are enclosed by parenthesis and elements separated by commas +(like `(a,b,c)` or `(1,2,3)`). + +The following operators can be used on tuples: + +> - Comparison operators: `==, !=` +> - Functions: `empty, length` + +**Array** + +Arrays are enclosed by brackets, and their elements are separated by +commas (like `[1,[2,3],4]` or `["US", "FR"]`). + +The following operators can be used on arrays: + +> - Comparison operators: `==, !=` +> - Dereferencing: if `v` is an array, then `v[2]` is its 2nd element +> - Concatenation of two arrays: `+` +> - Set union of two arrays: `|` +> - Set intersection of two arrays: `&` +> - Difference `-`: returns the first operand from which the elements +> of the second operand have been removed. +> - Cartesian product of two arrays: `*` +> - Cartesian product of one array N times: `^N` +> - Extraction of sub-arrays: e.g. `v[4:6]` +> - Testing membership of an array: `in` operator (for example: `"b"` +> in `["a", "b", "c"]` returns `1`) +> - Functions: `empty, sum, length` + +**Comprehension** + +Comprehension syntax is a shorthand way to make arrays from other +arrays. There are three different ways the comprehension syntax can be +employed: [filtering]{.title-ref}, [mapping]{.title-ref}, and [filtering +and mapping]{.title-ref}. + +**Filtering** + +Filtering allows one to choose those elements from an array for which a +certain condition hold. + +> *Example* +> +> Create a new array, choosing the even numbers from the array `1:5`: +> +> [ i in 1:5 when mod(i,2) == 0 ] +> +> would result in: +> +> [2, 4] + +**Mapping** + +Mapping allows you to apply a transformation to every element of an +array. + +> *Example* +> +> Create a new array, squaring all elements of the array `1:5`: +> +> [ i^2 for i in 1:5 ] +> +> would result in: +> +> [1, 4, 9, 16, 25] + +**Filtering and Mapping** + +Combining the two preceding ideas would allow one to apply a +transformation to every selected element of an array. + +> *Example* +> +> Create a new array, squaring all even elements of the array `1:5`: +> +> [ i^2 for i in 1:5 when mod(i,2) == 0] +> +> would result in: +> +> [4, 16] +> +> *Further Examples* : +> +> [ (j, i+1) for (i,j) in (1:2)^2 ] +> [ (j, i+1) for (i,j) in (1:2)*(1:2) when i < j ] +> +> would result in: +> +> [(1, 2), (2, 2), (1, 3), (2, 3)] +> [(2, 2)] + +**Function** + +Functions can be defined in the macro processor using the `@#define` +directive (see below). A function is evaluated at the time it is +invoked, not at define time. Functions can be included in expressions +and the operators that can be combined with them depend on their return +type. + +**Checking variable type** + +Given a variable name or literal, you can check the type it evaluates to +using the following functions: `isboolean`, `isreal`, `isstring`, +`istuple`, and `isarray`. + +> *Examples* + + ---------------------------------- + **Code** **Output** + --------------------- ------------ + `isboolean(0)` `false` + + `isboolean(true)` `true` + + `isreal("str")` `false` + ---------------------------------- + +**Casting between types** + +Variables and literals of one type can be cast into another type. Some +type changes are straightforward (e.g. changing a [real]{.title-ref} to +a [string]{.title-ref}) whereas others have certain requirements (e.g. +to cast an [array]{.title-ref} to a [real]{.title-ref} it must be a one +element array containing a type that can be cast to [real]{.title-ref}). + +> *Examples* + + ----------------------------------------------- + **Code** **Output** + ---------------------------------- ------------ + `(bool) -1.1` `true` + + `(bool) 0` `false` + + `(real) "2.2"` `2.2` + + `(tuple) [3.3]` `(3.3)` + + `(array) 4.4` `[4.4]` + + `(real) [5.5]` `5.5` + + `(real) [6.6, 7.7]` `error` + + `(real) "8.8 in a string"` `error` + ----------------------------------------------- + +Casts can be used in expressions: + +> *Examples* + + ---------------------------------------- + **Code** **Output** + --------------------------- ------------ + `(bool) 0 && true` `false` + + `(real) "1" + 2` `3` + + `(string) (3 + 4)` `"7"` + + `(array) 5 + (array) 6` `[5, 6]` + ---------------------------------------- + +### Macro directives + +::: {.macrodir} +@\#includepath \"PATH\" @\#includepath MACRO\_EXPRESSION + +This directive adds the path contained in PATH to the list of those to +search when looking for a `.mod` file specified by `@#include`. If +provided with a MACRO\_EXPRESSION argument, the argument must evaluate +to a string. Note that these paths are added *after* any paths passed +using `-I <-I\<\\>>`{.interpreted-text role="opt"}. + +*Example* + +> @#includepath "/path/to/folder/containing/modfiles" +> @#includepath folders_containing_mod_files +::: + +::: {.macrodir} +@\#include \"FILENAME\" @\#include MACRO\_EXPRESSION + +This directive simply includes the content of another file in its place; +it is exactly equivalent to a copy/paste of the content of the included +file. If provided with a MACRO\_EXPRESSION argument, the argument must +evaluate to a string. Note that it is possible to nest includes (i.e. to +include a file from an included file). The file will be searched for in +the current directory. If it is not found, the file will be searched for +in the folders provided by `-I <-I\<\\>>`{.interpreted-text +role="opt"} and `@#includepath`. + +*Example* + +> @#include "modelcomponent.mod" +> @#include location_of_modfile +::: + +::: {.macrodir} +@\#define MACRO\_VARIABLE @\#define MACRO\_VARIABLE = MACRO\_EXPRESSION +@\#define MACRO\_FUNCTION = MACRO\_EXPRESSION + +Defines a macro-variable or macro function. + +*Example* + +> @#define var // Equals true +> @#define x = 5 // Real +> @#define y = "US" // String +> @#define v = [ 1, 2, 4 ] // Real array +> @#define w = [ "US", "EA" ] // String array +> @#define u = [ 1, ["EA"] ] // Mixed array +> @#define z = 3 + v[2] // Equals 5 +> @#define t = ("US" in w) // Equals true +> @#define f(x) = " " + x + y // Function `f` with argument `x` +> // returns the string ' ' + x + 'US' + +*Example* + +> @#define x = 1 +> @#define y = [ "B", "C" ] +> @#define i = 2 +> @#define f(x) = x + " + " + y[i] +> @#define i = 1 +> +> model; +> A = @{y[i] + f("D")}; +> end; +> +> The latter is strictly equivalent to: +> +> model; +> A = BD + B; +> end; +::: + +::: {.macrodir} +@\#if MACRO\_EXPRESSION @\#ifdef MACRO\_VARIABLE @\#ifndef +MACRO\_VARIABLE @\#elseif MACRO\_EXPRESSION @\#else @\#endif + +Conditional inclusion of some part of the `.mod` file. The lines between +`@#if`, `@#ifdef`, or `@#ifndef` and the next `@#elseif`, `@#else` or +`@#endif` is executed only if the condition evaluates to `true`. +Following the `@#if` body, you can zero or more `@#elseif` branches. An +`@#elseif` condition is only evaluated if the preceding `@#if` or +`@#elseif` condition evaluated to `false`. The `@#else` branch is +optional and is only evaluated if all `@#if` and `@#elseif` statements +evaluate to false. + +Note that when using `@#ifdef`, the condition will evaluate to `true` if +the MACRO\_VARIABLE has been previously defined, regardless of its +value. Conversely, `@#ifndef` will evaluate to true if the +MACRO\_VARIABLE has not yet been defined. + +Note that when using `@#elseif` you can check whether or not a variable +has been defined by using the `defined` operator. Hence, to enter the +body of an `@#elseif` branch if the variable `X` has not been defined, +you would write: `@#elseif !defined(X)`. + +Note that if a real appears as the result of the MACRO\_EXPRESSION, it +will be interpreted as a boolean; a value of `0` is interpreted as +`false`, otherwise it is interpreted as `true`. Further note that +because of the imprecision of reals, extra care must be taken when +testing them in the MACRO\_EXPRESSION. For example, `exp(log(5)) == 5` +will evaluate to `false`. Hence, when comparing real values, you should +generally use a zero tolerance around the value desired, e.g. +`exp(log(5)) > 5-1e-14 && exp(log(5)) < 5+1e-14` + +*Example* + +> Choose between two alternative monetary policy rules using a +> macro-variable: +> +> @#define linear_mon_pol = false // 0 would be treated the same +> ... +> model; +> @#if linear_mon_pol +> i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar); +> @#else +> i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2; +> @#endif +> ... +> end; +> +> This would result in: +> +> ... +> model; +> i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2; +> ... +> end; + +*Example* + +> Choose between two alternative monetary policy rules using a +> macro-variable. The only difference between this example and the +> previous one is the use of `@#ifdef` instead of `@#if`. Even though +> `linear_mon_pol` contains the value `false` because `@#ifdef` only +> checks that the variable has been defined, the linear monetary policy +> is output: +> +> @#define linear_mon_pol = false // 0 would be treated the same +> ... +> model; +> @#ifdef linear_mon_pol +> i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar); +> @#else +> i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2; +> @#endif +> ... +> end; +> +> This would result in: +> +> ... +> model; +> i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar); +> ... +> end; +::: + +::: {.macrodir} +@\#for MACRO\_VARIABLE in MACRO\_EXPRESSION @\#for MACRO\_VARIABLE in +MACRO\_EXPRESSION when MACRO\_EXPRESSION @\#for MACRO\_TUPLE in +MACRO\_EXPRESSION @\#for MACRO\_TUPLE in MACRO\_EXPRESSION when +MACRO\_EXPRESSION @\#endfor + +Loop construction for replicating portions of the `.mod` file. Note that +this construct can enclose variable/parameters declaration, +computational tasks, but not a model declaration. + +*Example* + +> model; +> @#for country in [ "home", "foreign" ] +> GDP_@{country} = A * K_@{country}^a * L_@{country}^(1-a); +> @#endfor +> end; +> +> The latter is equivalent to: +> +> model; +> GDP_home = A * K_home^a * L_home^(1-a); +> GDP_foreign = A * K_foreign^a * L_foreign^(1-a); +> end; + +*Example* + +> model; +> @#for (i, j) in ["GDP"] * ["home", "foreign"] +> @{i}_@{j} = A * K_@{j}^a * L_@{j}^(1-a); +> @#endfor +> end; +> +> The latter is equivalent to: +> +> model; +> GDP_home = A * K_home^a * L_home^(1-a); +> GDP_foreign = A * K_foreign^a * L_foreign^(1-a); +> end; + +*Example* + +> @#define countries = ["US", "FR", "JA"] +> @#define nth_co = "US" +> model; +> @#for co in countries when co != nth_co +> (1+i_@{co}) = (1+i_@{nth_co}) * E_@{co}(+1) / E_@{co}; +> @#endfor +> E_@{nth_co} = 1; +> end; +> +> The latter is equivalent to: +> +> model; +> (1+i_FR) = (1+i_US) * E_FR(+1) / E_FR; +> (1+i_JA) = (1+i_US) * E_JA(+1) / E_JA; +> E_US = 1; +> end; +::: + +::: {.macrodir} +@\#echo MACRO\_EXPRESSION + +Asks the preprocessor to display some message on standard output. The +argument must evaluate to a string. +::: + +::: {.macrodir} +@\#error MACRO\_EXPRESSION + +Asks the preprocessor to display some error message on standard output +and to abort. The argument must evaluate to a string. +::: + +::: {.macrodir} +@\#echomacrovars @\#echomacrovars MACRO\_VARIABLE\_LIST +@\#echomacrovars(save) MACRO\_VARIABLE\_LIST + +Asks the preprocessor to display the value of all macro variables up +until this point. If the `save` option is passed, then values of the +macro variables are saved to `options_.macrovars_line_<>`. +If `NAME_LIST` is passed, only display/save variables and functions with +that name. + +*Example* + +> @#define A = 1 +> @#define B = 2 +> @#define C(x) = x*2 +> @#echomacrovars A C D +> +> The output of the command above is: +> +> Macro Variables: +> A = 1 +> Macro Functions: +> C(x) = (x * 2) +::: + +### Typical usages + +#### Modularization + +The `@#include` directive can be used to split `.mod` files into several +modular components. + +Example setup: + +`modeldesc.mod` + +> Contains variable declarations, model equations, and shocks +> declarations. + +`simul.mod` + +> Includes `modeldesc.mod`, calibrates parameter,s and runs stochastic +> simulations. + +`estim.mod` + +> Includes `modeldesc.mod`, declares priors on parameters, and runs +> Bayesian estimation. + +Dynare can be called on `simul.mod` and `estim.mod` but it makes no +sense to run it on `modeldesc.mod`. + +The main advantage is that you don\'t have to copy/paste the whole model +(at the beginning) or changes to the model (during development). + +#### Indexed sums of products + +The following example shows how to construct a moving average: + + @#define window = 2 + + var x MA_x; + ... + model; + ... + MA_x = @{1/(2*window+1)}*( + @#for i in -window:window + +x(@{i}) + @#endfor + ); + ... + end; + +After macro processing, this is equivalent to: + + var x MA_x; + ... + model; + ... + MA_x = 0.2*( + +x(-2) + +x(-1) + +x(0) + +x(1) + +x(2) + ); + ... + end; + +#### Multi-country models + +Here is a skeleton example for a multi-country model: + + @#define countries = [ "US", "EA", "AS", "JP", "RC" ] + @#define nth_co = "US" + + @#for co in countries + var Y_@{co} K_@{co} L_@{co} i_@{co} E_@{co} ...; + parameters a_@{co} ...; + varexo ...; + @#endfor + + model; + @#for co in countries + Y_@{co} = K_@{co}^a_@{co} * L_@{co}^(1-a_@{co}); + ... + @#if co != nth_co + (1+i_@{co}) = (1+i_@{nth_co}) * E_@{co}(+1) / E_@{co}; // UIP relation + @#else + E_@{co} = 1; + @#endif + @#endfor + end; + +#### Endogeneizing parameters + +When calibrating the model, it may be useful to consider a parameter as +an endogenous variable (and vice-versa). + +For example, suppose production is defined by a CES function: + +> $$y = \left(\alpha^{1/\xi} \ell^{1-1/\xi}+(1-\alpha)^{1/\xi}k^{1-1/\xi}\right)^{\xi/(\xi-1)}$$ + +and the labor share in GDP is defined as: + +> $$\textrm{lab\_rat} = (w \ell)/(p y)$$ + +In the model, $\alpha$ is a (share) parameter and `lab_rat` is an +endogenous variable. + +It is clear that calibrating $\alpha$ is not straightforward; on the +contrary, we have real world data for `lab_rat` and it is clear that +these two variables are economically linked. + +The solution is to use a method called *variable flipping*, which +consists in changing the way of computing the steady state. During this +computation, $\alpha$ will be made an endogenous variable and `lab_rat` +will be made a parameter. An economically relevant value will be +calibrated for `lab_rat`, and the solution algorithm will deduce the +implied value for $\alpha$. + +An implementation could consist of the following files: + +`modeqs.mod` + +> This file contains variable declarations and model equations. The code +> for the declaration of $\alpha$ and `lab_rat` would look like: +> +> @#if steady +> var alpha; +> parameter lab_rat; +> @#else +> parameter alpha; +> var lab_rat; +> @#endif + +`steady.mod` + +> This file computes the steady state. It begins with: +> +> @#define steady = 1 +> @#include "modeqs.mod" +> +> Then it initializes parameters (including `lab_rat`, excluding +> $\alpha$), computes the steady state (using guess values for +> endogenous, including $\alpha$), then saves values of parameters and +> endogenous at steady state in a file, using the +> `save_params_and_steady_state` command. + +`simul.mod` + +> This file computes the simulation. It begins with: +> +> @#define steady = 0 +> @#include "modeqs.mod" +> +> Then it loads values of parameters and endogenous at steady state from +> file, using the `load_params_and_steady_state` command, and computes +> the simulations. + +### MATLAB/Octave loops versus macro processor loops + +Suppose you have a model with a parameter $\rho$ and you want to run +simulations for three values: $\rho = 0.8, 0.9, +1$. There are several ways of doing this: + +*With a MATLAB/Octave loop* + +> rhos = [ 0.8, 0.9, 1]; +> for i = 1:length(rhos) +> rho = rhos(i); +> stoch_simul(order=1); +> end +> +> Here the loop is not unrolled, MATLAB/Octave manages the iterations. +> This is interesting when there are a lot of iterations. + +*With a macro processor loop (case 1)* + +> rhos = [ 0.8, 0.9, 1]; +> @#for i in 1:3 +> rho = rhos(@{i}); +> stoch_simul(order=1); +> @#endfor +> +> This is very similar to the previous example, except that the loop is +> unrolled. The macro processor manages the loop index but not the data +> array (`rhos`). + +*With a macro processor loop (case 2)* + +> @#for rho_val in [ 0.8, 0.9, 1] +> rho = @{rho_val}; +> stoch_simul(order=1); +> @#endfor +> +> The advantage of this method is that it uses a shorter syntax, since +> the list of values is directly given in the loop construct. The +> inconvenience is that you can not reuse the macro array in +> MATLAB/Octave. + +Verbatim inclusion {#verbatim} +------------------ + +Pass everything contained within the verbatim block to the +`.m` file. + +::: {.block} +verbatim ; + +By default, whenever Dynare encounters code that is not understood by +the parser, it is directly passed to the preprocessor output. + +In order to force this behavior you can use the `verbatim` block. This +is useful when the code you want passed to the `.m` file +contains tokens recognized by the Dynare preprocessor. + +*Example* + +> verbatim; +> % Anything contained in this block will be passed +> % directly to the .m file, including comments +> var = 1; +> end; +::: + +Misc commands +------------- + +::: {.command} +set\_dynare\_seed (INTEGER) set\_dynare\_seed (\`default\') +set\_dynare\_seed (\`clock\') set\_dynare\_seed (\`reset\') +set\_dynare\_seed (\`ALGORITHM\', INTEGER) + +Sets the seed used for random number generation. It is possible to set a +given integer value, to use a default value, or to use the clock (by +using the latter, one will therefore get different results across +different Dynare runs). The `reset` option serves to reset the seed to +the value set by the last `set_dynare_seed` command. On MATLAB 7.8 or +above, it is also possible to choose a specific algorithm for random +number generation; accepted values are `mcg16807`, `mlfg6331_64`, +`mrg32k3a`, `mt19937ar` (the default), `shr3cong` and `swb2712`. +::: + +::: {.command} +save\_params\_and\_steady\_state (FILENAME); + +For all parameters, endogenous and exogenous variables, stores their +value in a text file, using a simple name/value associative table. + +> - for parameters, the value is taken from the last parameter +> initialization. +> - for exogenous, the value is taken from the last `initval` block. +> - for endogenous, the value is taken from the last steady state +> computation (or, if no steady state has been computed, from the +> last `initval` block). + +Note that no variable type is stored in the file, so that the values can +be reloaded with `load_params_and_steady_state` in a setup where the +variable types are different. + +The typical usage of this function is to compute the steady-state of a +model by calibrating the steady-state value of some endogenous variables +(which implies that some parameters must be endogeneized during the +steady-state computation). + +You would then write a first `.mod` file which computes the steady state +and saves the result of the computation at the end of the file, using +`save_params_and_steady_state`. + +In a second file designed to perform the actual simulations, you would +use `load_params_and_steady_state` just after your variable +declarations, in order to load the steady state previously computed +(including the parameters which had been endogeneized during the steady +state computation). + +The need for two separate `.mod` files arises from the fact that the +variable declarations differ between the files for steady state +calibration and for simulation (the set of endogenous and parameters +differ between the two); this leads to different `var` and `parameters` +statements. + +Also note that you can take advantage of the `@#include` directive to +share the model equations between the two files (see +`macro-proc-lang`{.interpreted-text role="ref"}). +::: + +::: {.command} +load\_params\_and\_steady\_state (FILENAME); + +For all parameters, endogenous and exogenous variables, loads their +value from a file created with `save_params_and_steady_state`. + +> - for parameters, their value will be initialized as if they had +> been calibrated in the `.mod` file. +> - for endogenous and exogenous variables, their value will be +> initialized as they would have been from an `initval` block . + +This function is used in conjunction with +`save_params_and_steady_state`; see the documentation of that function +for more information. +::: + +::: {.command} +compilation\_setup (OPTIONS); + +When the `use_dll`{.interpreted-text role="opt"} option is present, +Dynare uses the GCC compiler that was distributed with it to compile the +static and dynamic C files produced by the preprocessor. You can use +this option to change the compiler, flags, and libraries used. + +*Options* + +> ::: {.option} +> compiler = FILENAME +> +> The path to the compiler. +> ::: +> +> ::: {.option} +> substitute\_flags = QUOTED\_STRING +> +> The flags to use instead of the default flags. +> ::: +> +> ::: {.option} +> add\_flags = QUOTED\_STRING +> +> The flags to use in addition to the default flags. If +> `substitute_flags` is passed, these flags are added to the flags +> specified there. +> ::: +> +> ::: {.option} +> substitute\_libs = QUOTED\_STRING +> +> The libraries to link against instead of the default libraries. +> ::: +> +> ::: {.option} +> add\_libs = QUOTED\_STRING +> +> The libraries to link against in addition to the default libraries. If +> `substitute_libs` is passed, these libraries are added to the +> libraries specified there. +> ::: +::: + +::: {.matcomm} +dynare\_version ; + +Output the version of Dynare that is currently being used (i.e. the one +that is highest on the MATLAB/Octave path). +::: + +::: {.matcomm} +write\_latex\_definitions ; + +Writes the names, LaTeX names and long names of model variables to +tables in a file named `<>_latex_definitions.tex`. Requires +the following LaTeX packages: `longtable`. +::: + +::: {.matcomm} +write\_latex\_parameter\_table ; + +Writes the LaTeX names, parameter names, and long names of model +parameters to a table in a file named +`<>_latex_parameters.tex.` The command writes the values of +the parameters currently stored. Thus, if parameters are set or changed +in the steady state computation, the command should be called after a +steady-command to make sure the parameters were correctly updated. The +long names can be used to add parameter descriptions. Requires the +following LaTeX packages: `longtable, booktabs`. +::: + +::: {.matcomm} +write\_latex\_prior\_table ; + +Writes descriptive statistics about the prior distribution to a LaTeX +table in a file named `<>_latex_priors_table.tex`. The command +writes the prior definitions currently stored. Thus, this command must +be invoked after the `estimated_params` block. If priors are defined +over the measurement errors, the command must also be preceeded by the +declaration of the observed variables (with `varobs`). The command +displays a warning if no prior densities are defined (ML estimation) or +if the declaration of the observed variables is missing. Requires the +following LaTeX packages: `longtable, booktabs`. +::: + +::: {.matcomm} +collect\_latex\_files ; + +Writes a LaTeX file named `<>_TeX_binder.tex` that collects +all TeX output generated by Dynare into a file. This file can be +compiled using `pdflatex` and automatically tries to load all required +packages. Requires the following LaTeX packages: `breqn`, `psfrag`, +`graphicx`, `epstopdf`, `longtable`, `booktabs`, `caption`, `float,` +`amsmath`, `amsfonts`, and `morefloats`. +::: + +**Footnotes** + +[^1]: A `.mod` file must have lines that end with a line feed character, + which is not commonly visible in text editors. Files created on + Windows and Unix-based systems have always conformed to this + requirement, as have files created on OS X and macOS. Files created + on old, pre-OS X Macs used carriage returns as end of line + characters. If you get a Dynare parsing error of the form + `ERROR: <>: line 1, cols 341-347: syntax error,...` and + there\'s more than one line in your `.mod` file, know that it uses + the carriage return as an end of line character. To get more helpful + error messages, the carriage returns should be changed to line + feeds. + +[^2]: Note that arbitrary MATLAB or Octave expressions can be put in a + `.mod` file, but those expressions have to be on separate lines, + generally at the end of the file for post-processing purposes. They + are not interpreted by Dynare, and are simply passed on unmodified + to MATLAB or Octave. Those constructions are not addresses in this + section. + +[^3]: In particular, for big models, the compilation step can be very + time-consuming, and use of this option may be counter-productive in + those cases. + +[^4]: See options `conf_sig `{.interpreted-text role="ref"} and + `mh_conf_sig `{.interpreted-text role="opt"} + to change the size of the HPD interval. + +[^5]: See options `conf_sig `{.interpreted-text role="ref"} () + and `mh_conf_sig `{.interpreted-text + role="opt"} to qchange the size of the HPD interval. + +[^6]: When the shocks are correlated, it is the decomposition of + orthogonalized shocks via Cholesky decomposition according to the + order of declaration of shocks (see `var-decl`{.interpreted-text + role="ref"}) + +[^7]: See `forecast `{.interpreted-text role="opt"} + for more information. + +[^8]: In case of Excel not being installed, + + may be helpful. + +[^9]: In case of Excel not being installed, + + may be helpful. + +[^10]: See option `conf_sig `{.interpreted-text role="ref"} to + change the size of the HPD interval. + +[^11]: See option `conf_sig `{.interpreted-text role="ref"} to + change the size of the HPD interval. + +[^12]: If you want to align the paper with the description herein, + please note that $A$ is $A^0$ and $F$ is $A^+$. + +[^13]: An example can be found at + . diff --git a/doc/src/orig/time-series.md b/docs/src/orig/time-series.md similarity index 100% rename from doc/src/orig/time-series.md rename to docs/src/orig/time-series.md diff --git a/doc/src/running-dynare.md b/docs/src/running-dynare.md similarity index 100% rename from doc/src/running-dynare.md rename to docs/src/running-dynare.md diff --git a/doc/src/the-model-file.md b/docs/src/the-model-file.md similarity index 100% rename from doc/src/the-model-file.md rename to docs/src/the-model-file.md

c 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 literal 0 HcmV?d00001 diff --git a/docs/src/distributions.tex b/docs/build/development/distributions.tex similarity index 100% rename from docs/src/distributions.tex rename to docs/build/development/distributions.tex diff --git a/docs/build/development/lre_solution_derivatives.aux b/docs/build/development/lre_solution_derivatives.aux new file mode 100644 index 00000000..753dc682 --- /dev/null +++ b/docs/build/development/lre_solution_derivatives.aux @@ -0,0 +1,6 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {1}Derivatives of the steady state}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2}Derivatives of the coefficents of the linear approximation of the model}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3}Derivatives of the solution of the UQME}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {4}Derivatives of the coefficients of response to the shocks}{2}{}\protected@file@percent } +\gdef \@abspage@last{3} diff --git a/docs/build/orig/the-model-file.md.new b/docs/build/orig/the-model-file.md.new new file mode 100644 index 00000000..a488f595 --- /dev/null +++ b/docs/build/orig/the-model-file.md.new @@ -0,0 +1,10384 @@ +::: {.default-domain} +dynare +::: + +The model file {#model-file} +============== + +Conventions {#conv} +----------- + +A model file contains a list of commands and of blocks. Each command and +each element of a block is terminated by a semicolon (;). Blocks are +terminated by `end;`. + +If Dynare encounters an unknown expression at the beginning of a line or +after a semicolon, it will parse the rest of that line as native MATLAB +code, even if there are more statements separated by semicolons present. +To prevent cryptic error messages, it is strongly recommended to always +only put one statement/command into each line and start a new line after +each semicolon.[^1] + +Lines of codes can be commented out line by line or as a block. +Single-line comments begin with `//` and stop at the end of the line. +Multiline comments are introduced by `/*` and terminated by `*/`. + +*Examples* + +> // This is a single line comment +> +> var x; // This is a comment about x +> +> /* This is another inline comment about alpha */ alpha = 0.3; +> +> /* +> This comment is spanning +> two lines. +> */ + +Note that these comment marks should not be used in native MATLAB code +regions where the [%]{.title-ref} should be preferred instead to +introduce a comment. In a `verbatim` block, see +`verbatim`{.interpreted-text role="ref"}, this would result in a crash +since `//` is not a valid MATLAB statement). + +Most Dynare commands have arguments and several accept options, +indicated in parentheses after the command keyword. Several options are +separated by commas. + +In the description of Dynare commands, the following conventions are +observed: + +- Optional arguments or options are indicated between square brackets: + '\[\]'; +- Repeated arguments are indicated by ellipses: "\..."; +- Mutually exclusive arguments are separated by vertical bars: '\|'; +- INTEGER indicates an integer number; +- INTEGER\_VECTOR indicates a vector of integer numbers separated by + spaces, enclosed by square brackets; +- DOUBLE indicates a double precision number. The following syntaxes + are valid: `1.1e3`, `1.1E3`, `1.1d3`, `1.1D3`. In some places, + infinite Values `Inf` and `-Inf` are also allowed; +- NUMERICAL\_VECTOR indicates a vector of numbers separated by spaces, + enclosed by square brackets; +- EXPRESSION indicates a mathematical expression valid outside the + model description (see `expr`{.interpreted-text role="ref"}); +- MODEL\_EXPRESSION (sometimes MODEL\_EXP) indicates a mathematical + expression valid in the model description (see + `expr`{.interpreted-text role="ref"} and + `model-decl`{.interpreted-text role="ref"}); +- MACRO\_EXPRESSION designates an expression of the macro processor + (see `macro-exp`{.interpreted-text role="ref"}); +- VARIABLE\_NAME (sometimes VAR\_NAME) indicates a variable name + starting with an alphabetical character and can't contain: + '()+-\*/\^=!;:@\#.' or accentuated characters; +- PARAMETER\_NAME (sometimes PARAM\_NAME) indicates a parameter name + starting with an alphabetical character and can't contain: + '()+-\*/\^=!;:@\#.' or accentuated characters; +- LATEX\_NAME (sometimes TEX\_NAME) indicates a valid LaTeX expression + in math mode (not including the dollar signs); +- FUNCTION\_NAME indicates a valid MATLAB function name; +- FILENAME indicates a filename valid in the underlying operating + system; it is necessary to put it between quotes when specifying the + extension or if the filename contains a non-alphanumeric character; +- QUOTED\_STRING indicates an arbitrary string enclosed between + (single) quotes. + +Variable declarations {#var-decl} +--------------------- + +While Dynare allows the user to choose their own variable names, there +are some restrictions to be kept in mind. First, variables and +parameters must not have the same name as Dynare commands or built-in +functions. In this respect, Dynare is not case-sensitive. For example, +do not use `Ln` or `Sigma_e` to name your variable. Not conforming to +this rule might yield hard-to-debug error messages or crashes. Second, +when employing user-defined steady state files it is recommended to +avoid using the name of MATLAB functions as this may cause conflicts. In +particular, when working with user-defined steady state files, do not +use correctly-spelled greek names like [alpha]{.title-ref}, because +there are MATLAB functions of the same name. Rather go for `alppha` or +`alph`. Lastly, please do not name a variable or parameter `i`. This may +interfere with the imaginary number i and the index in many loops. +Rather, name investment `invest`. Using `inv` is also not recommended as +it already denotes the inverse operator. Commands for declaring +variables and parameters are described below. + +::: {.command} +var VAR\_NAME \[\$TEX\_NAME\$\] +\[(long\_name=QUOTED\_STRINGNAME=QUOTED\_STRING)\]\...; +var(deflator=MODEL\_EXPR) VAR\_NAME (\... same options apply) var(log, +deflator=MODEL\_EXPR) VAR\_NAME (\... same options apply) +var(log\_deflator=MODEL\_EXPR) VAR\_NAME (\... same options apply) + +This required command declares the endogenous variables in the model. +See `conv`{.interpreted-text role="ref"} for the syntax of *VAR\_NAME* +and *MODEL\_EXPR*. Optionally it is possible to give a LaTeX name to the +variable or, if it is nonstationary, provide information regarding its +deflator. The variables in the list can be separated by spaces or by +commas. `var` commands can appear several times in the file and Dynare +will concatenate them. Dynare stores the list of declared parameters, in +the order of declaration, in a column cell array `M_.endo_names`. + +If the model is nonstationary and is to be written as such in the +`model` block, Dynare will need the trend deflator for the appropriate +endogenous variables in order to stationarize the model. The trend +deflator must be provided alongside the variables that follow this +trend. + +*Options* + +::: {.option} +log + +In addition to the endogenous variable(s) thus declared, this option +also triggers the creation of auxiliary variable(s) equal to the log of +the corresponding endogenous variable(s). For example, given a +`var(log) y` statement, two endogenous will be created (`y` and +`LOG_y`), and an auxiliary equation linking the two will also be added +(equal to `LOG_y = log(y)`). Moreover, every occurence of `y` in the +model will be replaced by `exp(LOG_y)`. This option is for example +useful when one wants to perform a loglinear approximation of some +variable(s) in the context of a first-order stochastic approximation; or +when one wants to ensure the variable(s) stay(s) in the definition +domain of the function defining the steady state or the dynamic +residuals when the nonlinear solver is used. +::: + +::: {.option} +deflator = MODEL\_EXPR + +The expression used to detrend an endogenous variable. All trend +variables, endogenous variables and parameters referenced in MODEL\_EXPR +must already have been declared by the `trend_var, log_trend_var, var` +and `parameters` commands. The deflator is assumed to be multiplicative; +for an additive deflator, use `log_deflator`. This option can be used +together with the `log` option (the latter must come first). +::: + +::: {.option} +log\_deflator = MODEL\_EXPR + +Same as `deflator`, except that the deflator is assumed to be additive +instead of multiplicative (or, to put it otherwise, the declared +variable is equal to the log of a variable with a multiplicative trend). +This option cannot be used together with the `log` option, because it +would not make much sense from an economic point of view (the +corresponding auxiliary variable would correspond to the log taken two +times on a variable with a multiplicative trend). +::: + +::: {#long-name} +::: {.option} +long\_name = QUOTED\_STRING + +This is the long version of the variable name. Its value is stored in +`M_.endo_names_long` (a column cell array, in the same order as +`M_.endo_names`). In case multiple `long_name` options are provided, the +last one will be used. Default: `VAR_NAME`. +::: +::: + +::: {#partitioning} +::: {.option} +NAME = QUOTED\_STRING + +This is used to create a partitioning of variables. It results in the +direct output in the `.m` file analogous to: +`M_.endo_partitions.NAME = QUOTED_STRING`;. +::: +::: + +*Example (variable partitioning)* + +> var c gnp cva (country=`US', state=`VA') +> cca (country=`US', state=`CA', long_name=`Consumption CA'); +> var(deflator=A) i b; +> var c $C$ (long_name=`Consumption'); +::: + +::: {.command} +varexo\_det VAR\_NAME \[\$TEX\_NAME\$\] +\[(long\_name=QUOTED\_STRING\|NAME=QUOTED\_STRING)\...\]; + +This optional command declares exogenous deterministic variables in a +stochastic model. See `conv`{.interpreted-text role="ref"} for the +syntax of VARIABLE\_NAME. Optionally it is possible to give a LaTeX name +to the variable. The variables in the list can be separated by spaces or +by commas. `varexo_det` commands can appear several times in the file +and Dynare will concatenate them. + +It is possible to mix deterministic and stochastic shocks to build +models where agents know from the start of the simulation about future +exogenous changes. In that case `stoch_simul` will compute the rational +expectation solution adding future information to the state space +(nothing is shown in the output of `stoch_simul`) and forecast will +compute a simulation conditional on initial conditions and future +information. + +Note that exogenous deterministic variables cannot appear with a lead or +a lag in the model. + +*Options* + +::: {.option} +long\_name = QUOTED\_STRING + +Like `long_name `{.interpreted-text role="ref"} but value +stored in `M_.exo_det_names_long`. +::: + +::: {.option} +NAME = QUOTED\_STRING + +Like `partitioning `{.interpreted-text role="ref"} but +QUOTED\_STRING stored in `M_.exo_det_partitions.NAME`. +::: + +*Example* + +> varexo m gov; +> varexo_det tau; +::: + +::: {.command} +var\_remove VAR\_NAME \| PARAM\_NAME\...; + +Removes the listed variables (or parameters) from the model. Removing a +variable that has already been used in a model equation or elsewhere +will lead to an error. +::: + +::: {.command} +predetermined\_variables VAR\_NAME\...; + +In Dynare, the default convention is that the timing of a variable +reflects when this variable is decided. The typical example is for +capital stock: since the capital stock used at current period is +actually decided at the previous period, then the capital stock entering +the production function is `k(-1)`, and the law of motion of capital +must be written: + + k = i + (1-delta)*k(-1) + +Put another way, for stock variables, the default in Dynare is to use a +"stock at the end of the period" concept, instead of a "stock at the +beginning of the period" convention. + +The `predetermined_variables` is used to change that convention. The +endogenous variables declared as predetermined variables are supposed to +be decided one period ahead of all other endogenous variables. For stock +variables, they are supposed to follow a "stock at the beginning of the +period" convention. + +Note that Dynare internally always uses the "stock at the end of the +period" concept, even when the model has been entered using the +`predetermined_variables` command. Thus, when plotting, computing or +simulating variables, Dynare will follow the convention to use variables +that are decided in the current period. For example, when generating +impulse response functions for capital, Dynare will plot `k`, which is +the capital stock decided upon by investment today (and which will be +used in tomorrow's production function). This is the reason that capital +is shown to be moving on impact, because it is `k` and not the +predetermined `k(-1)` that is displayed. It is important to remember +that this also affects simulated time series and output from smoother +routines for predetermined variables. Compared to non-predetermined +variables they might otherwise appear to be falsely shifted to the +future by one period. + +*Example* + +> The following two program snippets are strictly equivalent. +> +> Using default Dynare timing convention: +> +> var y, k, i; +> ... +> model; +> y = k(-1)^alpha; +> k = i + (1-delta)*k(-1); +> ... +> end; +> +> Using the alternative timing convention: +> +> var y, k, i; +> predetermined_variables k; +> ... +> model; +> y = k^alpha; +> k(+1) = i + (1-delta)*k; +> ... +> end; +::: + +::: {.command} +trend\_var (growth\_factor = MODEL\_EXPR) VAR\_NAME +\[\$LATEX\_NAME\$\]\...; + +This optional command declares the trend variables in the model. See +`conv`{.interpreted-text role="ref"} for the syntax of MODEL\_EXPR and +VAR\_NAME. Optionally it is possible to give a LaTeX name to the +variable. + +The variable is assumed to have a multiplicative growth trend. For an +additive growth trend, use `log_trend_var` instead. + +Trend variables are required if the user wants to be able to write a +nonstationary model in the `model` block. The `trend_var` command must +appear before the var command that references the trend variable. + +`trend_var` commands can appear several times in the file and Dynare +will concatenate them. + +If the model is nonstationary and is to be written as such in the +`model` block, Dynare will need the growth factor of every trend +variable in order to stationarize the model. The growth factor must be +provided within the declaration of the trend variable, using the +`growth_factor` keyword. All endogenous variables and parameters +referenced in MODEL\_EXPR must already have been declared by the var and +parameters commands. + +*Example* + +> trend_var (growth_factor=gA) A; +::: + +::: {.command} +model\_local\_variable VARIABLE\_NAME \[LATEX\_NAME\]\... ; + +This optional command declares a model local variable. See +`conv`{.interpreted-text role="ref"} for the syntax of VARIABLE\_NAME. +As you can create model local variables on the fly in the model block +(see `model-decl`{.interpreted-text role="ref"}), the interest of this +command is primarily to assign a LATEX\_NAME to the model local +variable. + +*Example* + +> model_local_variable GDP_US $GDPUS$; +::: + +### On-the-fly Model Variable Declaration {#on-the-fly-declaration} + +Endogenous variables, exogenous variables, and parameters can also be +declared inside the model block. You can do this in two different ways: +either via the equation tag or directly in an equation. + +To declare a variable on-the-fly in an equation tag, simply state the +type of variable to be declared (`endogenous`, `exogenous`, or +`parameter` followed by an equal sign and the variable name in single +quotes. Hence, to declare a variable `c` as endogenous in an equation +tag, you can type `[endogenous='c']`. + +To perform on-the-fly variable declaration in an equation, simply follow +the symbol name with a vertical line (`|`, pipe character) and either an +`e`, an `x`, or a `p`. For example, to declare a parameter named +`alphaa` in the model block, you could write `alphaa|p` directly in an +equation where it appears. Similarly, to declare an endogenous variable +`c` in the model block you could write `c|e`. Note that in-equation +on-the-fly variable declarations must be made on contemporaneous +variables. + +On-the-fly variable declarations do not have to appear in the first +place where this variable is encountered. + +*Example* + +> The following two snippets are equivalent: +> +> > model; +> > [endogenous='k',name='law of motion of capital'] +> > k(+1) = i|e + (1-delta|p)*k; +> > y|e = k^alpha|p; +> > ... +> > end; +> > delta = 0.025; +> > alpha = 0.36; +> > +> > var k, i, y; +> > parameters delta, alpha; +> > delta = 0.025; +> > alpha = 0.36; +> > ... +> > model; +> > [name='law of motion of capital'] +> > k(1) = i|e + (1-delta|p)*k; +> > y|e = k|e^alpha|p; +> > ... +> > end; + +Expressions {#expr} +----------- + +Dynare distinguishes between two types of mathematical expressions: +those that are used to describe the model, and those that are used +outside the model block (e.g. for initializing parameters or variables, +or as command options). In this manual, those two types of expressions +are respectively denoted by MODEL\_EXPRESSION and EXPRESSION. + +Unlike MATLAB or Octave expressions, Dynare expressions are necessarily +scalar ones: they cannot contain matrices or evaluate to matrices.[^2] + +Expressions can be constructed using integers (INTEGER), floating point +numbers (DOUBLE), parameter names (PARAMETER\_NAME), variable names +(VARIABLE\_NAME), operators and functions. + +The following special constants are also accepted in some contexts: + +::: {.constant} +inf + +Represents infinity. +::: + +::: {.constant} +nan + +"Not a number": represents an undefined or unrepresentable value. +::: + +### Parameters and variables + +Parameters and variables can be introduced in expressions by simply +typing their names. The semantics of parameters and variables is quite +different whether they are used inside or outside the model block. + +#### Inside the model + +Parameters used inside the model refer to the value given through +parameter initialization (see `param-init`{.interpreted-text +role="ref"}) or `homotopy_setup` when doing a simulation, or are the +estimated variables when doing an estimation. + +Variables used in a MODEL\_EXPRESSION denote current period values when +neither a lead or a lag is given. A lead or a lag can be given by +enclosing an integer between parenthesis just after the variable name: a +positive integer means a lead, a negative one means a lag. Leads or lags +of more than one period are allowed. For example, if `c` is an +endogenous variable, then `c(+1)` is the variable one period ahead, and +`c(-2)` is the variable two periods before. + +When specifying the leads and lags of endogenous variables, it is +important to respect the following convention: in Dynare, the timing of +a variable reflects when that variable is decided. A control variable +--- which by definition is decided in the current period --- must have +no lead. A predetermined variable --- which by definition has been +decided in a previous period --- must have a lag. A consequence of this +is that all stock variables must use the "stock at the end of the +period" convention. + +Leads and lags are primarily used for endogenous variables, but can be +used for exogenous variables. They have no effect on parameters and are +forbidden for local model variables (see Model declaration). + +#### Outside the model + +When used in an expression outside the model block, a parameter or a +variable simply refers to the last value given to that variable. More +precisely, for a parameter it refers to the value given in the +corresponding parameter initialization (see +`param-init`{.interpreted-text role="ref"}); for an endogenous or +exogenous variable, it refers to the value given in the most recent +`initval` or `endval` block. + +### Operators + +The following operators are allowed in both MODEL\_EXPRESSION and +EXPRESSION: + +- Binary arithmetic operators: `+`, `-`, `*`, `/`, `^` +- Unary arithmetic operators: `+`, `-` +- Binary comparison operators (which evaluate to either 0 or 1): `<`, + `>`, `<=`, `>=`, `==`, `!=` + +Note the binary comparison operators are differentiable everywhere +except on a line of the 2-dimensional real plane. However for +facilitating convergence of Newton-type methods, Dynare assumes that, at +the points of non-differentiability, the partial derivatives of these +operators with respect to both arguments is equal to 0 (since this is +the value of the partial derivatives everywhere else). + +The following special operators are accepted in MODEL\_EXPRESSION (but +not in EXPRESSION): + +::: {.operator} +STEADY\_STATE (MODEL\_EXPRESSION) + +This operator is used to take the value of the enclosed expression at +the steady state. A typical usage is in the Taylor rule, where you may +want to use the value of GDP at steady state to compute the output gap. + +Exogenous and exogenous deterministic variables may not appear in +MODEL\_EXPRESSION. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +The concept of a steady state is ambiguous in a perfect foresight +context with permament and potentially anticipated shocks occuring. +Dynare will use the contents of `oo_.steady_state` as its reference for +calls to the `STEADY_STATE()`-operator. In the presence of `endval`, +this implies that the terminal state provided by the user is used. This +may be a steady state computed by Dynare (if `endval` is followed by +`steady`) or simply the terminal state provided by the user (if `endval` +is not followed by `steady`). Put differently, Dynare will not +automatically compute the steady state conditional on the specificed +value of the exogenous variables in the respective periods. +::: +::: + +::: {.operator} +EXPECTATION (INTEGER) (MODEL\_EXPRESSION) + +This operator is used to take the expectation of some expression using a +different information set than the information available at current +period. For example, `EXPECTATION(-1)(x(+1))` is equal to the expected +value of variable x at next period, using the information set available +at the previous period. See `aux-variables`{.interpreted-text +role="ref"} for an explanation of how this operator is handled +internally and how this affects the output. +::: + +### Functions + +#### Built-in functions + +The following standard functions are supported internally for both +MODEL\_EXPRESSION and EXPRESSION: + +::: {.function} +exp(x) + +Natural exponential. +::: + +::: {.function} +log(x) +::: + +::: {.function} +ln(x) + +Natural logarithm. +::: + +::: {.function} +log10(x) + +Base 10 logarithm. +::: + +::: {.function} +sqrt(x) + +Square root. +::: + +::: {.function} +cbrt(x) + +Cube root. +::: + +::: {.function} +sign(x) + +Signum function, defined as: + +> $$\begin{aligned} +> \textrm{sign}(x) = +> \begin{cases} +> -1 &\quad\text{if }x<0\\ +> 0 &\quad\text{if }x=0\\ +> 1 &\quad\text{if }x>0 +> \end{cases} +> \end{aligned}$$ + +Note that this function is not continuous, hence not differentiable, at +$x=0$. However, for facilitating convergence of Newton-type methods, +Dynare assumes that the derivative at $x=0$ is equal to $0$. This +assumption comes from the observation that both the right- and +left-derivatives at this point exist and are equal to $0$, so we can +remove the singularity by postulating that the derivative at $x=0$ is +$0$. +::: + +::: {.function} +abs(x) + +Absolute value. + +Note that this continuous function is not differentiable at $x=0$. +However, for facilitating convergence of Newton-type methods, Dynare +assumes that the derivative at $x=0$ is equal to $0$ (even if the +derivative does not exist). The rational for this mathematically +unfounded definition, rely on the observation that the derivative of +$\mathrm{abs}(x)$ is equal to $\mathrm{sign}(x)$ for any $x\neq 0$ in +$\mathbb R$ and from the convention for the value of $\mathrm{sign}(x)$ +at $x=0$). +::: + +::: {.function} +sin(x) +::: + +::: {.function} +cos(x) +::: + +::: {.function} +tan(x) +::: + +::: {.function} +asin(x) +::: + +::: {.function} +acos(x) +::: + +::: {.function} +atan(x) + +Trigonometric functions. +::: + +::: {.function} +sinh(x) +::: + +::: {.function} +cosh(x) +::: + +::: {.function} +tanh(x) +::: + +::: {.function} +asinh(x) +::: + +::: {.function} +acosh(x) +::: + +::: {.function} +atanh(x) + +Hyperbolic functions. +::: + +::: {.function} +max(a, b) +::: + +::: {.function} +min(a, b) + +Maximum and minimum of two reals. + +Note that these functions are differentiable everywhere except on a line +of the 2-dimensional real plane defined by $a=b$. However for +facilitating convergence of Newton-type methods, Dynare assumes that, at +the points of non-differentiability, the partial derivative of these +functions with respect to the first (resp. the second) argument is equal +to $1$ (resp. to $0$) (i.e. the derivatives at the kink are equal to the +derivatives observed on the half-plane where the function is equal to +its first argument). +::: + +::: {.function} +normcdf(x) normcdf(x, mu, sigma) + +Gaussian cumulative density function, with mean *mu* and standard +deviation *sigma*. Note that `normcdf(x)` is equivalent to +`normcdf(x,0,1)`. +::: + +::: {.function} +normpdf(x) normpdf(x, mu, sigma) + +Gaussian probability density function, with mean *mu* and standard +deviation *sigma*. Note that `normpdf(x)` is equivalent to +`normpdf(x,0,1)`. +::: + +::: {.function} +erf(x) + +Gauss error function. +::: + +::: {.function} +erfc(x) + +Complementary error function, *i.e.* +$\mathrm{erfc}(x) = 1-\mathrm{erf}(x)$. +::: + +#### External functions + +Any other user-defined (or built-in) MATLAB or Octave function may be +used in both a MODEL\_EXPRESSION and an EXPRESSION, provided that this +function has a scalar argument as a return value. + +To use an external function in a MODEL\_EXPRESSION, one must declare the +function using the `external_function` statement. This is not required +for external functions used in an EXPRESSION outside of a `model` block +or `steady_state_model` block. + +::: {.command} +external\_function (OPTIONS\...); + +This command declares the external functions used in the model block. It +is required for every unique function used in the model block. + +`external_function` commands can appear several times in the file and +must come before the model block. + +*Options* + +::: {.option} +name = NAME + +The name of the function, which must also be the name of the Julia file +implementing it. This option is mandatory. +::: + +::: {.option} +nargs = INTEGER + +The number of arguments of the function. If this option is not provided, +Dynare assumes `nargs = 1`. +::: + +::: {.option} +first\_deriv\_provided \[= NAME\] + +If NAME is provided, this tells Dynare that the Jacobian is provided as +the only output of the Julia file given as the option argument. If NAME +is not provided, this tells Dynare that the Julia file specified by the +argument passed to NAME returns the Jacobian as its second output +argument. When this option is not provided, Dynare will use finite +difference approximations for computing the derivatives of the function, +whenever needed. +::: + +::: {.option} +second\_deriv\_provided \[= NAME\] + +If NAME is provided, this tells Dynare that the Hessian is provided as +the only output of the Julia file given as the option argument. If NAME +is not provided, this tells Dynare that the Julia file specified by the +argument passed to NAME returns the Hessian as its third output +argument. NB: This option can only be used if the `first_deriv_provided` +option is used in the same `external_function` command. When this option +is not provided, Dynare will use finite difference approximations for +computing the Hessian derivatives of the function, whenever needed. +::: + +*Example* + +> external_function(name = funcname); +> external_function(name = otherfuncname, nargs = 2, first_deriv_provided, second_deriv_provided); +> external_function(name = yetotherfuncname, nargs = 3, first_deriv_provided = funcname_deriv); +::: + +### A few words of warning in stochastic context + +The use of the following functions and operators is strongly discouraged +in a stochastic context: `max`, `min`, `abs`, `sign`, `<`, `>`, `<=`, +`>=`, `==`, `!=`. + +The reason is that the local approximation used by `stoch_simul` or +`estimation` will by nature ignore the non-linearities introduced by +these functions if the steady state is away from the kink. And, if the +steady state is exactly at the kink, then the approximation will be +bogus because the derivative of these functions at the kink is bogus (as +explained in the respective documentations of these functions and +operators). + +Note that `extended_path` is not affected by this problem, because it +does not rely on a local approximation of the mode. + +Parameter initialization {#param-init} +------------------------ + +When using Dynare for computing simulations, it is necessary to +calibrate the parameters of the model. This is done through parameter +initialization. + +The syntax is the following: + + PARAMETER_NAME = EXPRESSION; + +Here is an example of calibration: + + parameters alpha, beta; + + beta = 0.99; + alpha = 0.36; + A = 1-alpha*beta; + +Internally, the parameter values are stored in `M_.params`: + +::: {.matvar} +[M]().params + +Contains the values of model parameters. The parameters are in the order +that was used in the `parameters` command, hence ordered as in +`M_.param_names`. +::: + +The parameter names are stored in `M_.param_names`: + +::: {.matvar} +[M]().param\_names + +Cell array containing the names of the model parameters. +::: + +::: {.matcomm} +get\_param\_by\_name (\'PARAMETER\_NAME\'); + +Given the name of a parameter, returns its calibrated value as it is +stored in `M_.params`. +::: + +::: {.matcomm} +set\_param\_value (\'PARAMETER\_NAME\', MATLAB\_EXPRESSION); + +Sets the calibrated value of a parameter to the provided expression. +This does essentially the same as the parameter initialization syntax +described above, except that it accepts arbitrary MATLAB/Octave +expressions, and that it works from MATLAB/Octave scripts. +::: + +Model declaration {#model-decl} +----------------- + +The model is declared inside a `model` block: + +::: {.block} +model ; model (OPTIONS\...); + +The equations of the model are written in a block delimited by `model` +and `end` keywords. + +There must be as many equations as there are endogenous variables in the +model, except when computing the unconstrained optimal policy with +`ramsey_model`, `ramsey_policy` or `discretionary_policy`. + +The syntax of equations must follow the conventions for +MODEL\_EXPRESSION as described in `expr`{.interpreted-text role="ref"}. +Each equation must be terminated by a semicolon (';'). A normal equation +looks like: + +> MODEL\_EXPRESSION = MODEL\_EXPRESSION; + +When the equations are written in homogenous form, it is possible to +omit the '=0' part and write only the left hand side of the equation. A +homogenous equation looks like: + +> MODEL\_EXPRESSION; + +Inside the model block, Dynare allows the creation of *model-local +variables*, which constitute a simple way to share a common expression +between several equations. The syntax consists of a pound sign (\#) +followed by the name of the new model local variable (which must **not** +be declared as in `var-decl`{.interpreted-text role="ref"}, but may have +been declared by `model_local_variable`{.interpreted-text role="comm"}), +an equal sign, and the expression for which this new variable will +stand. Later on, every time this variable appears in the model, Dynare +will substitute it by the expression assigned to the variable. Note that +the scope of this variable is restricted to the model block; it cannot +be used outside. To assign a LaTeX name to the model local variable, use +the declaration syntax outlined by +`model_local_variable`{.interpreted-text role="comm"}. A model local +variable declaration looks like: + +> \#VARIABLE\_NAME = MODEL\_EXPRESSION; + +It is possible to tag equations written in the model block. A tag can +serve different purposes by allowing the user to attach arbitrary +informations to each equation and to recover them at runtime. For +instance, it is possible to name the equations with a `name`-tag, using +a syntax like: + + model; + + [name = 'Budget constraint']; + c + k = k^theta*A; + + end; + +Here, `name` is the keyword indicating that the tag names the equation. +If an equation of the model is tagged with a name, the `resid` command +will display the name of the equations (which may be more informative +than the equation numbers) in addition to the equation number. Several +tags for one equation can be separated using a comma: + + model; + + [name='Taylor rule',mcp = 'r > -1.94478'] + r = rho*r(-1) + (1-rho)*(gpi*Infl+gy*YGap) + e; + + end; + +More information on tags is available at +. + +There can be several `model` blocks, in which case they are simply +concatenated. The set of effective options is also the concatenation of +the options declared in all the blocks, but in that case you may rather +want to use the `model_options`{.interpreted-text role="comm"} command. + +*Options* + +::: {.option} +linear + +Declares the model as being linear. It spares oneself from having to +declare initial values for computing the steady state of a stationary +linear model. This option can't be used with non-linear models, it will +NOT trigger linearization of the model. +::: + +::: {.option} +no\_static + +Don't create the static model file. This can be useful for models which +don't have a steady state. +::: + +::: {.option} +differentiate\_forward\_vars differentiate\_forward\_vars = ( +VARIABLE\_NAME \[VARIABLE\_NAME \...\] ) + +Tells Dynare to create a new auxiliary variable for each endogenous +variable that appears with a lead, such that the new variable is the +time differentiate of the original one. More precisely, if the model +contains `x(+1)`, then a variable `AUX_DIFF_VAR` will be created such +that `AUX_DIFF_VAR=x-x(-1)`, and `x(+1)` will be replaced with +`x+AUX_DIFF_VAR(+1)`. + +The transformation is applied to all endogenous variables with a lead if +the option is given without a list of variables. If there is a list, the +transformation is restricted to endogenous with a lead that also appear +in the list. + +This option can useful for some deterministic simulations where +convergence is hard to obtain. Bad values for terminal conditions in the +case of very persistent dynamics or permanent shocks can hinder correct +solutions or any convergence. The new differentiated variables have +obvious zero terminal conditions (if the terminal condition is a steady +state) and this in many cases helps convergence of simulations. +::: + +::: {.option} +parallel\_local\_files = ( FILENAME \[, FILENAME\]\... ) + +Declares a list of extra files that should be transferred to follower +nodes when doing a parallel computation (see +`paral-conf`{.interpreted-text role="ref"}). +::: + +::: {.option} +balanced\_growth\_test\_tol = DOUBLE + +Tolerance used for determining whether cross-derivatives are zero in the +test for balanced growth path (the latter is documented on +). Default: +`1e-6` +::: + +*Example* (Elementary RBC model) + +> var c k; +> varexo x; +> parameters aa alph bet delt gam; +> +> model; +> c = - k + aa*x*k(-1)^alph + (1-delt)*k(-1); +> c^(-gam) = (aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam)/(1+bet); +> end; + +*Example* (Use of model local variables) + +> The following program: +> +> model; +> # gamma = 1 - 1/sigma; +> u1 = c1^gamma/gamma; +> u2 = c2^gamma/gamma; +> end; +> +> \...is formally equivalent to: +> +> model; +> u1 = c1^(1-1/sigma)/(1-1/sigma); +> u2 = c2^(1-1/sigma)/(1-1/sigma); +> end; + +*Example* (A linear model) + +> model(linear); +> x = a*x(-1)+b*y(+1)+e_x; +> y = d*y(-1)+e_y; +> end; +::: + +::: {.command} +model\_options (OPTIONS\...); + +This command accepts the same options as the `model`{.interpreted-text +role="bck"} block. + +The purpose of this statement is to specify the options that apply to +the whole model, when there are several `model` blocks, so as to restore +the symmetry between those blocks (since otherwise one `model` block +would typically bear the options, while the other ones would typically +have no option). +::: + +::: {.command} +model\_remove (TAGS\...); + +This command removes equations that appeared in a previous +`model`{.interpreted-text role="bck"} block. + +The equations must be specified by a list of tag values, separated by +commas. Each element of the list is either a simple quoted string, in +which case it designates an equation by its `name` tag; or a tag name +(without quotes), followed by an equal sign, then by the tag value +(within quotes). + +Each removed equation must either have an `endogenous` tag, or have a +left hand side containing a single endogenous variable. The +corresponding endogenous variable will be either turned into an +exogenous (if it is still used in somewhere in the model at that point), +otherwise it will be removed from the model. + +*Example* + +> var c k dummy1 dummy2; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1) + dummy1; +> c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> [ name = 'eq:dummy1', endogenous = 'dummy1' ] +> c*k = dummy1; +> [ foo = 'eq:dummy2' ] +> log(dummy2) = k + 2; +> end; +> +> model_remove('eq:dummy1', foo = 'eq:dummy2'); +> +> In the above example, the last two equations will be removed, `dummy1` +> will be turned into an exogenous, and `dummy2` will be removed. +::: + +::: {.block} +model\_replace (TAGS\...); + +This block replaces several equations in the model. It removes the +equations given by the tags list (with the same syntax as in +`model_remove`{.interpreted-text role="comm"}), and it adds equations +given within the block (with the same syntax as +`model`{.interpreted-text role="bck"}). + +No variable is removed or has its type changed in the process. + +*Example* + +> var c k; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); +> [ name = 'dummy' ] +> c*k = 1; +> end; +> +> model_replace('dummy'); +> c^(-gam) = (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> end; +> +> In the above example, the dummy equation is replaced by a proper Euler +> equation. +::: + +Dynare has the ability to output the original list of model equations to +a LaTeX file, using the `write_latex_original_model` command, the list +of transformed model equations using the +`write_latex_dynamic_model command`, and the list of static model +equations using the `write_latex_static_model` command. + +::: {.command} +write\_latex\_original\_model (OPTIONS); + +This command creates two LaTeX files: one containing the model as +defined in the model block and one containing the LaTeX document header +information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/original.tex`, which includes a file called +`FILENAME/latex/original_content.tex` (also created by Dynare) +containing the list of all the original model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Time subscripts (`t`, `t+1`, `t-1`, \...) will be appended to the +variable names, as LaTeX subscripts. + +Compiling the TeX file requires the following LaTeX packages: +`geometry, fullpage, breqn`. + +*Options* + +::: {.option} +write\_equation\_tags + +Write the equation tags in the LaTeX output. The equation tags will be +interpreted with LaTeX markups. +::: +::: + +::: {.command} +write\_latex\_dynamic\_model ; write\_latex\_dynamic\_model (OPTIONS); + +This command creates two LaTeX files: one containing the dynamic model +and one containing the LaTeX document header information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/dynamic.tex`, which includes a file called +`FILENAME/latex/dynamic_content.tex` (also created by Dynare) containing +the list of all the dynamic model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Time subscripts (`t`, `t+1`, `t-1`, \...) will be appended to the +variable names, as LaTeX subscripts. + +Note that the model written in the TeX file will differ from the model +declared by the user in the following dimensions: + +> - The timing convention of predetermined variables (see +> `predetermined_variables`{.interpreted-text role="comm"}) will +> have been changed to the default Dynare timing convention; in +> other words, variables declared as predetermined will be lagged on +> period back, +> - The `EXPECTATION` operators will have been removed, replaced by +> auxiliary variables and new equations (as explained in the +> documentation of +> `EXPECTATION `{.interpreted-text +> role="op"}), +> - Endogenous variables with leads or lags greater or equal than two +> will have been removed, replaced by new auxiliary variables and +> equations, +> - Exogenous variables with leads or lags will also have been +> replaced by new auxiliary variables and equations. + +For the required LaTeX packages, see +`write_latex_original_model`{.interpreted-text role="comm"}. + +*Options* + +::: {.option} +write\_equation\_tags + +See `write_equation_tags`{.interpreted-text role="opt"} +::: +::: + +::: {.command} +write\_latex\_static\_model (OPTIONS); + +This command creates two LaTeX files: one containing the static model +and one containing the LaTeX document header information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/static.tex`, which includes a file called +`FILENAME/latex/static_content.tex` (also created by Dynare) containing +the list of all the steady state model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Note that the model written in the TeX file will differ from the model +declared by the user in the some dimensions (see +`write_latex_dynamic_model`{.interpreted-text role="comm"} for details). + +Also note that this command will not output the contents of the optional +`steady_state_model` block (see `steady_state_model`{.interpreted-text +role="bck"}); it will rather output a static version (i.e. without leads +and lags) of the dynamic `model` declared in the model block. To write +the LaTeX contents of the `steady_state_model` see +`write_latex_steady_state_model`{.interpreted-text role="comm"}. + +For the required LaTeX packages, see +`write_latex_original_model`{.interpreted-text role="comm"}. + +*Options* + +::: {.option} +write\_equation\_tags + +See `write_equation_tags`{.interpreted-text role="opt"}. +::: +::: + +::: {.command} +write\_latex\_steady\_state\_model + +This command creates two LaTeX files: one containing the steady state +model and one containing the LaTeX document header information. + +If your `.mod` file is `FILENAME.mod`, then Dynare will create a file +called `FILENAME/latex/steady_state.tex`, which includes a file called +`FILENAME/latex/steady_state_content.tex` (also created by Dynare) +containing the list of all the steady state model equations. + +If LaTeX names were given for variables and parameters (see +`var-decl`{.interpreted-text role="ref"}), then those will be used; +otherwise, the plain text names will be used. + +Note that the model written in the `.tex` file will differ from the +model declared by the user in some dimensions (see +`write_latex_dynamic_model`{.interpreted-text role="comm"} for details). + +For the required LaTeX packages, see +`write_latex_original_model`{.interpreted-text role="comm"}. +::: + +Auxiliary variables {#aux-variables} +------------------- + +The model which is solved internally by Dynare is not exactly the model +declared by the user. In some cases, Dynare will introduce auxiliary +endogenous variables---along with corresponding auxiliary +equations---which will appear in the final output. + +The main transformation concerns leads and lags. Dynare will perform a +transformation of the model so that there is only one lead and one lag +on endogenous variables and no leads/lags on exogenous variables. + +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_LEAD` or `AUX_EXO_LAG` respectively). + +Another transformation is done for the `EXPECTATION` operator. For each +occurrence of this operator, Dynare creates an auxiliary variable +defined by a new equation, and replaces the expectation operator by a +reference to the new auxiliary variable. For example, the expression +`EXPECTATION(-1)(x(+1))` is replaced by `AUX_EXPECT_LAG_1(-1)`, and the +new auxiliary variable is declared as `AUX_EXPECT_LAG_1 = x(+2)`. + +Auxiliary variables are also introduced by the preprocessor for the +`ramsey_model` and `ramsey_policy` commands. In this case, they are used +to represent the Lagrange multipliers when first order conditions of the +Ramsey problem are computed. The new variables take the form `MULT_i`, +where *i* represents the constraint with which the multiplier is +associated (counted from the order of declaration in the model block). + +Auxiliary variables are also introduced by the +`differentiate_forward_vars` option of the model block. The new +variables take the form `AUX_DIFF_FWRD_i`, and are equal to `x-x(-1)` +for some endogenous variable `x`. + +Finally, auxiliary variables will arise in the context of employing the +`diff`-operator. + +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`. + +See +for more technical details on auxiliary variables. + +Initial and terminal conditions {#init-term-cond} +------------------------------- + +For most simulation exercises, it is necessary to provide initial (and +possibly terminal) conditions. It is also necessary to provide initial +guess values for non-linear solvers. This section describes the +statements used for those purposes. + +In many contexts (deterministic or stochastic), it is necessary to +compute the steady state of a non-linear model: `initval` then specifies +numerical initial values for the non-linear solver. The command `resid` +can be used to compute the equation residuals for the given initial +values. + +Used in perfect foresight mode, the types of forward-looking models for +which Dynare was designed require both initial and terminal conditions. +Most often these initial and terminal conditions are static equilibria, +but not necessarily. + +One typical application is to consider an economy at the equilibrium at +time 0, trigger a shock in first period, and study the trajectory of +return to the initial equilibrium. To do that, one needs `initval` and +`shocks` (see `shocks-exo`{.interpreted-text role="ref"}). + +Another one is to study how an economy, starting from arbitrary initial +conditions at time 0 converges towards equilibrium. In this case models, +the command `histval` permits to specify different historical initial +values for variables with lags for the periods before the beginning of +the simulation. Due to the design of Dynare, in this case `initval` is +used to specify the terminal conditions. + +::: {.block} +initval ; initval(OPTIONS\...); + +The `initval` block has two main purposes: providing guess values for +non-linear solvers in the context of perfect foresight simulations and +providing guess values for steady state computations in both perfect +foresight and stochastic simulations. Depending on the presence of +`histval` and `endval` blocks it is also used for declaring the initial +and terminal conditions in a perfect foresight simulation exercise. +Because of this interaction of the meaning of an `initval` block with +the presence of `histval` and `endval` blocks in perfect foresight +simulations, it is strongly recommended to check that the constructed +`oo_.endo_simul` and `oo_.exo_simul` variables contain the desired +values after running `perfect_foresight_setup` and before running +`perfect_foresight_solver`. In the presence of leads and lags, these +subfields of the results structure will store the historical values for +the lags in the first column/row and the terminal values for the leads +in the last column/row. + +The `initval` block is terminated by `end;` and contains lines of the +form: + +> VARIABLE\_NAME = EXPRESSION; + +*In a deterministic (i.e. perfect foresight) model* + +First, both the `oo_.endo_simul` and `oo_.exo_simul` variables storing +the endogenous and exogenous variables will be filled with the values +provided by this block. If there are no other blocks present, it will +therefore provide the initial and terminal conditions for all the +endogenous and exogenous variables, because it will also fill the last +column/row of these matrices. For the intermediate simulation periods it +thereby provides the starting values for the solver. In the presence of +a `histval` block (and therefore absence of an `endval` block), this +`histval` block will provide/overwrite the historical values for the +state variables (lags) by setting the first column/row of +`oo_.endo_simul` and `oo_.exo_simul`. This implies that the `initval` +block in the presence of `histval` only sets the terminal values for the +variables with leads and provides initial values for the perfect +foresight solver. + +Because of these various functions of `initval` it is often necessary to +provide values for all the endogenous variables in an `initval` block. +Initial and terminal conditions are strictly necessary for lagged/leaded +variables, while feasible starting values are required for the solver. +It is important to be aware that if some variables, endogenous or +exogenous, are not mentioned in the `initval` block, a zero value is +assumed. It is particularly important to keep this in mind when +specifying exogenous variables using `varexo` that are not allowed to +take on the value of zero, like e.g. TFP. + +Note that if the `initval` block is immediately followed by a `steady` +command, its semantics are slightly changed. The `steady` command will +compute the steady state of the model for all the endogenous variables, +assuming that exogenous variables are kept constant at the value +declared in the `initval` block. These steady state values conditional +on the declared exogenous variables are then written into +`oo_.endo_simul` and take up the potential roles as historical and +terminal conditions as well as starting values for the solver. An +`initval` block followed by `steady` is therefore formally equivalent to +an `initval` block with the specified values for the exogenous +variables, and the endogenous variables set to the associated steady +state values conditional on the exogenous variables. + +*In a stochastic model* + +The main purpose of `initval` is to provide initial guess values for the +non-linear solver in the steady state computation. Note that if the +`initval` block is not followed by `steady`, the steady state +computation will still be triggered by subsequent commands +(`stoch_simul`, `estimation`\...). + +As such, `initval` allows specifying the initial instrument value for +steady state finding when providing an analytical conditional steady +state file for `ramsey_model`-computations. + +It is not necessary to declare 0 as initial value for exogenous +stochastic variables, since it is the only possible value. + +The subsequently computed steady state (not the initial values, use +histval for this) will be used as the initial condition at all the +periods preceeding the first simulation period for the three possible +types of simulations in stochastic mode: + +> - `stoch_simul`{.interpreted-text role="comm"}, if the `periods` +> option is specified. +> - `forecast`{.interpreted-text role="comm"} as the initial point at +> which the forecasts are computed. +> - `conditional_forecast`{.interpreted-text role="comm"} as the +> initial point at which the conditional forecasts are computed. + +To start simulations at a particular set of starting values that are not +a computed steady state, use `histval`{.interpreted-text role="bck"}. + +*Options* + +::: {.option} +all\_values\_required + +Issues an error and stops processing the .mod file if there is at least +one endogenous or exogenous variable that has not been set in the +initval block. +::: + +*Example* + +: initval; + c = 1.2; + k = 12; + x = 1; + end; + + steady; +::: + +::: {.block} +endval ; endval (OPTIONS\...); + +This block is terminated by `end;` and contains lines of the form: + +> VARIABLE\_NAME = EXPRESSION; + +The `endval` block makes only sense in a deterministic model and cannot +be used together with `histval`. Similar to the `initval` command, it +will fill both the `oo_.endo_simul` and `oo_.exo_simul` variables +storing the endogenous and exogenous variables with the values provided +by this block. If no `initval` block is present, it will fill the whole +matrices, therefore providing the initial and terminal conditions for +all the endogenous and exogenous variables, because it will also fill +the first and last column/row of these matrices. Due to also filling the +intermediate simulation periods it will provide the starting values for +the solver as well. + +If an `initval` block is present, `initval` will provide the historical +values for the variables (if there are states/lags), while `endval` will +fill the remainder of the matrices, thereby still providing *i*) the +terminal conditions for variables entering the model with a lead and +*ii*) the initial guess values for all endogenous variables at all the +simulation dates for the perfect foresight solver. + +Note that if some variables, endogenous or exogenous, are NOT mentioned +in the `endval` block, the value assumed is that of the last `initval` +block or `steady` command (if present). Therefore, in contrast to +`initval`, omitted variables are not automatically assumed to be 0 in +this case. Again, it is strongly recommended to check the constructed +`oo_.endo_simul` and `oo_.exo_simul` variables after running +`perfect_foresight_setup` and before running `perfect_foresight_solver` +to see whether the desired outcome has been achieved. + +Like `initval`, if the `endval` block is immediately followed by a +`steady` command, its semantics are slightly changed. The `steady` +command will compute the steady state of the model for all the +endogenous variables, assuming that exogenous variables are kept +constant to the value declared in the `endval` block. These steady state +values conditional on the declared exogenous variables are then written +into `oo_.endo_simul` and therefore take up the potential roles as +historical and terminal conditions as well as starting values for the +solver. An `endval` block followed by `steady` is therefore formally +equivalent to an `endval` block with the specified values for the +exogenous variables, and the endogenous variables set to the associated +steady state values. + +*Options* + +::: {.option} +all\_values\_required + +See `all_values_required`{.interpreted-text role="opt"}. +::: + +*Example* + +> var c k; +> varexo x; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); +> c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> end; +> +> initval; +> c = 1.2; +> k = 12; +> x = 1; +> end; +> +> steady; +> +> endval; +> c = 2; +> k = 20; +> x = 2; +> end; +> +> steady; +> +> perfect_foresight_setup(periods=200); +> perfect_foresight_solver; +> +> In this example, the problem is finding the optimal path for +> consumption and capital for the periods $t=1$ to $T=200$, given the +> path of the exogenous technology level `x`. `c` is a forward-looking +> variable and the exogenous variable `x` appears with a lead in the +> expected return of physical capital, while `k` is a purely +> backward-looking (state) variable. +> +> The initial equilibrium is computed by `steady` conditional on `x=1`, +> and the terminal one conditional on `x=2`. The `initval` block sets +> the initial condition for `k` (since it is the only backward-looking +> variable), while the `endval` block sets the terminal condition for +> `c` (since it is the only forward-looking endogenous variable). The +> starting values for the perfect foresight solver are given by the +> `endval` block. See below for more details. + +*Example* + +> var c k; +> varexo x; +> +> model; +> c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); +> c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); +> end; +> +> initval; +> k = 12; +> end; +> +> endval; +> c = 2; +> x = 1.1; +> end; +> +> perfect_foresight_setup(periods=200); +> perfect_foresight_solver; +> +> In this example, there is no [steady]{.title-ref} command, hence the +> conditions are exactly those specified in the [initval]{.title-ref} +> and [endval]{.title-ref} blocks. We need terminal conditions for `c` +> and `x`, since both appear with a lead, and an initial condition for +> `k`, since it appears with a lag. +> +> Setting `x=1.1` in the `endval` block without a `shocks` block implies +> that technology is at $1.1$ in $t=1$ and stays there forever, because +> `endval` is filling all entries of `oo_.endo_simul` and +> `oo_.exo_simul` except for the very first one, which stores the +> initial conditions and was set to $0$ by the `initval` block when not +> explicitly specifying a value for it. +> +> Because the law of motion for capital is backward-looking, we need an +> initial condition for `k` at time $0$. Due to the presence of +> `endval`, this cannot be done via a `histval` block, but rather must +> be specified in the `initval` block. Similarly, because the Euler +> equation is forward-looking, we need a terminal condition for `c` at +> $t=201$, which is specified in the `endval` block. +> +> As can be seen, it is not necessary to specify `c` and `x` in the +> `initval` block and `k` in the `endval` block, because they have no +> impact on the results. Due to the optimization problem in the first +> period being to choose `c,k` at $t=1$ given the predetermined capital +> stock `k` inherited from $t=0$ as well as the current and future +> values for technology `x`, the values for `c` and `x` at time $t=0$ +> play no role. The same applies to the choice of `c,k` at time $t=200$, +> which does not depend on `k` at $t=201$. As the Euler equation shows, +> that choice only depends on current capital as well as future +> consumption `c` and technology `x`, but not on future capital `k`. The +> intuitive reason is that those variables are the consequence of +> optimization problems taking place in at periods $t=0$ and $t=201$, +> respectively, which are not modeled here. + +*Example* + +> initval; +> c = 1.2; +> k = 12; +> x = 1; +> end; +> +> endval; +> c = 2; +> k = 20; +> x = 1.1; +> end; +> +> In this example, initial conditions for the forward-looking variables +> `x` and `c` are provided, together with a terminal condition for the +> backward-looking variable `k`. As shown in the previous example, these +> values will not affect the simulation results. Dynare simply takes +> them as given and basically assumes that there were realizations of +> exogenous variables and states that make those choices equilibrium +> values (basically initial/terminal conditions at the unspecified time +> periods $t<0$ and $t>201$). +> +> The above example suggests another way of looking at the use of +> `steady` after `initval` and `endval`. Instead of saying that the +> implicit unspecified conditions before and after the simulation range +> have to fit the initial/terminal conditions of the endogenous +> variables in those blocks, steady specifies that those conditions at +> $t<0$ and $t>201$ are equal to being at the steady state given the +> exogenous variables in the `initval` and `endval` blocks. The +> endogenous variables at $t=0$ and $t=201$ are then set to the +> corresponding steady state equilibrium values. +> +> The fact that `c` at $t=0$ and `k` at $t=201$ specified in `initval` +> and `endval` are taken as given has an important implication for +> plotting the simulated vector for the endogenous variables, i.e. the +> rows of `oo_.endo_simul`: this vector will also contain the initial +> and terminal conditions and thus is 202 periods long in the example. +> When you specify arbitrary values for the initial and terminal +> conditions for forward- and backward-looking variables, respectively, +> these values can be very far away from the endogenously determined +> values at $t=1$ and $t=200$. While the values at $t=0$ and $t=201$ are +> unrelated to the dynamics for $0 strange-looking large jumps. In the example above, consumption will +> display a large jump from $t=0$ to $t=1$ and capital will jump from +> $t=200$ to $t=201$ when using `rplot`{.interpreted-text role="comm"} +> or manually plotting `oo_.endo_val`. +::: + +::: {.block} +histval ; histval (OPTIONS\...); + +*In a deterministic perfect foresight context* + +In models with lags on more than one period, the `histval` block permits +to specify different historical initial values for different periods of +the state variables. In this case, the `initval` block takes over the +role of specifying terminal conditions and starting values for the +solver. Note that the `histval` block does not take non-state variables. + +This block is terminated by `end;` and contains lines of the form: + +> VARIABLE\_NAME(INTEGER) = EXPRESSION; + +EXPRESSION is any valid expression returning a numerical value and can +contain already initialized variable names. + +By convention in Dynare, period 1 is the first period of the simulation. +Going backward in time, the first period before the start of the +simulation is period 0, then period -1, and so on. + +State variables not initialized in the `histval` block are assumed to +have a value of zero at period 0 and before. Note that `histval` cannot +be followed by `steady`. + +*Example* + +> model; +> x=1.5*x(-1)-0.6*x(-2)+epsilon; +> log(c)=0.5*x+0.5*log(c(+1)); +> end; +> +> histval; +> x(0)=-1; +> x(-1)=0.2; +> end; +> +> initval; +> c=1; +> x=1; +> end; +> +> In this example, `histval` is used to set the historical conditions +> for the two lags of the endogenous variable `x`, stored in the first +> column of `oo_.endo_simul`. The `initval` block is used to set the +> terminal condition for the forward looking variable `c`, stored in the +> last column of `oo_.endo_simul`. Moreover, the `initval` block defines +> the starting values for the perfect foresight solver for both +> endogenous variables `c` and `x`. + +*In a stochastic simulation context* + +In the context of stochastic simulations, `histval` allows setting the +starting point of those simulations in the state space. As for the case +of perfect foresight simulations, all not explicitly specified variables +are set to 0. Moreover, as only states enter the recursive policy +functions, all values specified for control variables will be ignored. +This can be used + +> - In `stoch_simul`{.interpreted-text role="comm"}, if the `periods` +> option is specified. Note that this only affects the starting +> point for the simulation, but not for the impulse response +> functions. When using the `loglinear `{.interpreted-text +> role="ref"} option, the `histval` block nevertheless takes the +> unlogged starting values. +> - In `forecast`{.interpreted-text role="comm"} as the initial point +> at which the forecasts are computed. When using the `loglinear +> `{.interpreted-text role="ref"} option, the `histval` block +> nevertheless takes the unlogged starting values. +> - In `conditional_forecast`{.interpreted-text role="comm"} for a +> calibrated model as the initial point at which the conditional +> forecasts are computed. When using the +> `loglinear `{.interpreted-text role="ref"} option, the +> histval-block nevertheless takes the unlogged starting values. +> - In `Ramsey policy `{.interpreted-text role="comm"}, +> where it also specifies the values of the endogenous states +> (including lagged exogenous) at which the objective function of +> the planner is computed. Note that the initial values of the +> Lagrange multipliers associated with the planner's problem cannot +> be set (see `evaluate_planner_objective`{.interpreted-text +> role="comm"}). + +*Options* + +::: {.option} +all\_values\_required + +See `all_values_required`{.interpreted-text role="opt"}. +::: + +*Example* + +> var x y; +> varexo e; +> +> model; +> x = y(-1)^alpha*y(-2)^(1-alpha)+e; +> +> end; +> +> initval; +> x = 1; +> y = 1; +> e = 0.5; +> end; +> +> steady; +> +> histval; +> y(0) = 1.1; +> y(-1) = 0.9; +> end; +> +> stoch_simul(periods=100); +::: + +::: {.command} +resid ; + +This command will display the residuals of the static equations of the +model, using the values given for the endogenous in the last `initval` +or `endval` block (or the steady state file if you provided one, see +`st-st`{.interpreted-text role="ref"}). + +*Options* + +::: {.option} +non\_zero + +Only display non-zero residuals. +::: +::: + +::: {.command} +initval\_file (OPTIONS\...); + +In a deterministic setup, this command is used to specify a path for all +endogenous and exogenous variables. The length of these paths must be +equal to the number of simulation periods, plus the number of leads and +the number of lags of the model (for example, with 50 simulation +periods, in a model with 2 lags and 1 lead, the paths must have a length +of 53). Note that these paths cover two different things: + +> - The constraints of the problem, which are given by the path for +> exogenous and the initial and terminal values for endogenous +> - The initial guess for the non-linear solver, which is given by the +> path for endogenous variables for the simulation periods +> (excluding initial and terminal conditions) + +In perfect foresight and stochastic contexts, `steady` uses the first +observation loaded by `initval_file` as guess value to solve for the +steady state of the model. This first observation is determined by the +`first_obs` option when it is used. + +Don't mix `initval_file` with `initval` statements. However, after +`initval_file`, you can modify the historical initial values with +`histval` or `histval_file` statement. + +There can be several `initval_file` statements in a model file. Each +statement resets `oo_.initval_series`. + +*Options* + +::: {.option} +datafile = FILENAME filename = FILENAME (deprecated) + +The name of the file containing the data. It must be included in quotes +if the filename contains a path or an extension. The command accepts the +following file formats: + +- M-file (extension `.m`): for each endogenous and exogenous variable, + the file must contain a row or column vector of the same name. +- MAT-file (extension `.mat`): same as for M-files. +- Excel file (extension `.xls` or `.xlsx`): for each endogenous and + exogenous variable, the file must contain a column of the same name. + NB: Octave only supports the `.xlsx` file extension and must have + the [io](https://octave.sourceforge.io/io/) package installed + (easily done via octave by typing '`pkg install -forge io`'). The + first column may contain the date +::: + +> of each observation. +> +> : - CSV files (extension `.csv`): for each endogenous and +> exogenous variable, the file must contain a column of the same +> name. The first column may contain the date of each +> observation. +> +::: {.option} +first\_obs = {INTEGER \| DATE} + +The observation number or the date (see +::: + +`dates-members`{.interpreted-text role="ref"}) of the first observation +to be used in the file + +::: {.option} +first\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates `{.interpreted-text role="ref"}) at which the +simulation (or the forecast) is starting. This option avoids to have to +compute the maximum number of lags in the model. The observation +corresponding to the first period of simulation doesn't need to exist in +the file as the only dates necessary for initialization are before that +date. + +::: {.option} +last\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates `{.interpreted-text role="ref"}) at which the +simulation (or the forecast) is ending. This option avoids to have to +compute the maximum number of leads in the model. + +::: {.option} +last\_obs = {INTEGER \| DATE} + +The observaton number or the date (see +::: + +`dates-members`{.interpreted-text role="ref"}) of the last observation +to be used in the file. + +::: {.option} +nobs = INTEGER +::: + +The number of observations to be used in the file (starting with first +of `first_obs` observation). + +::: {.option} +series = DSERIES NAME + +The name of a DSERIES containing the data (see +`dseries-members`{.interpreted-text role="ref"}) +::: + +*Example 1* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv` +(nothing guarantees that these vales are the steady state of the model). +The guess value for the trajectories are also taken from the file. The +file must contain at least 203 observations of variables `c`, `x` and +`e`. If there are more than 203 observations available in the file, the +first 203 are used by `perfect_foresight_setup(periods=200)`. Note that +the values for the auxiliary variable corresponding to `x(-2)` are +automatically computed by `initval_file`. + +*Example 2* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs=10); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv` +starting with the 10th observation in the file. There must be at least +212 observations in the file. + +*Example 3* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> ds = dseries(mydata.csv); lds = log(ds); +> +> initval\_file(series=lds, +> +> : first\_obs=2010Q1); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from dseries `lds`. All +observations are loaded starting with the 1st quarter of 2010 until the +end of the file. There must be data available at least until 2050Q3. + +*Example 4* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_simulation\_period=2010Q1); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv`. The +observations in the file must have dates. All observations are loaded +from the 3rd quarter of 2009 until the end of the file. There must be +data available in the file at least until 2050Q1. + +*Example 5* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : last\_obs = 212); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv`. The +first 212 observations are loaded and the first 203 observations will be +used by `perfect_foresight_setup(periods=200)`. + +*Example 6* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs = 10, +> +> > nobs = 203); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +The initial and terminal values are taken from file `mydata.csv`. +Observations 10 to 212 are loaded. + +*Example 7* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs = 10); +> +> steady; +> +> The values of the 10th observation of `mydata.csv` are used + +as guess value to compute the steady state. The exogenous variables are +set to values found in the file or zero if these variables aren\'t +present. +::: + +::: {.command} +histval\_file (OPTIONS\...); + +This command is equivalent to `histval`, except that it reads its input +from a file, and is typically used in conjunction with +`smoother2histval`. + +> *Options* + +::: {.option} +datafile = FILENAME filename = FILENAME (deprecated) + +The name of the file containing the data. The command accepts +::: + +the following file formats: + +> - M-file (extension `.m`): for each endogenous and exogenous +> variable, the file must contain a row or column vector of the same +> name. +> - MAT-file (extension `.mat`): same as for M-files. +> - Excel file (extension `.xls` or `.xlsx`): for each endogenous and +> exogenous variable, the file must contain a column of the same +> name. NB: Octave only supports the `.xlsx` file extension and must +> have the [io](https://octave.sourceforge.io/io/) package installed +> (easily done via octave by typing '`pkg install -forge io`'). The +> first column may contain the date of each observation. +> - CSV files (extension `.csv`): for each endogenous and exogenous +> variable, the file must contain a column of the same name. The +> first column may contain the date of each observation. + +::: {.option} +first\_obs = {INTEGER \| DATE} + +The observation number or the date (see +`dates-members`{.interpreted-text role="ref"}) of +::: + +the first observation to be used in the file + +::: {.option} +first\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates-members`{.interpreted-text role="ref"}) at which the simulation +(or the forecast) is starting. This option avoids to have to compute the +maximum number of lags in the model. The observation corresponding to +the first period of simulation doesn't need to exist in the file as the +only dates necessary for initialization are before that date. + +::: {.option} +last\_simulation\_period = {INTEGER \| DATE} +::: + +The observation number in the file or the date (see +`dates `{.interpreted-text role="ref"}) at which the +simulation (or the forecast) is ending. This option avoids to have to +compute the maximum number of leads in the model. + +::: {.option} +last\_obs = {INTEGER \| DATE} + +The observation number or the date (see +`dates-members`{.interpreted-text role="ref"}) of the +::: + +last observation to be used in the file. + +::: {.option} +nobs = INTEGER +::: + +The number of observations to be used in the file (starting with first +of `first_obs` observation). + +::: {.option} +series = DSERIES NAME + +The name of a DSERIES containing the data (see +`dseries-members`{.interpreted-text role="ref"}) +::: + +*Example 1* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> steady\_state\_model; x = 0; c = exp(c\*x/(1 - d)); end; +> +> histval\_file(datafile=mydata.csv); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from the two +first rows of file `mydata.csv`. + +*Example 2* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : first\_obs=10); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from rows 10 +and 11 of file `mydata.csv`. + +*Example 3* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : first\_obs=2010Q1); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from +observations 2010Q1 and 2010Q2 of file `mydata.csv`. + +*Example 4* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : first\_simulation\_period=2010Q1) +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from +observations 2009Q3 and 2009Q4 of file `mydata.csv`. + +*Example 5* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> histval\_file(datafile=mydata.csv, +> +> : last\_obs = 4); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from the two +first rows of file `mydata.csv`. + +*Example 6* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs = 10, +> +> > nobs = 4); +> +> stoch\_simul(order=1,periods=100); + +The initial values for the stochastic simulation are taken from rows 10 +and 11 of file `mydata.csv`. + +*Example 7* + +> var c x; +> varexo e; +> +> parameters a b c d; +> +> a = 1.5; b = -0,6; c = 0.5; d = 0.5; +> +> > model; x = a\*x(-1) + b\*x(-2) + e; log(c) = c\*x + d\*log(c(+1)); +> > end; +> +> initval\_file(datafile=mydata.csv, +> +> : first\_obs=10); +> +> > histval\_file(datafile=myotherdata.csv); +> +> perfect\_foresight\_setup(periods=200); perfect\_foresight\_solver; + +Historical initial values for the simulation are taken from the two +first rows of file `myotherdata.csv`. + +> Terminal values and guess values for the simulation are taken + +from file `mydata.csv` starting with the 12th observation in the file. +There must be at least 212 observations in the file. +::: + +Shocks on exogenous variables {#shocks-exo} +----------------------------- + +In a deterministic context, when one wants to study the transition of +one equilibrium position to another, it is equivalent to analyze the +consequences of a permanent shock and this in done in Dynare through the +proper use of `initval` and `endval`. + +Another typical experiment is to study the effects of a temporary shock +after which the system goes back to the original equilibrium (if the +model is stable\...). A temporary shock is a temporary change of value +of one or several exogenous variables in the model. Temporary shocks are +specified with the command `shocks`. + +In a stochastic framework, the exogenous variables take random values in +each period. In Dynare, these random values follow a normal distribution +with zero mean, but it belongs to the user to specify the variability of +these shocks. The non-zero elements of the matrix of variance-covariance +of the shocks can be entered with the `shocks` command. Or, the entire +matrix can be directly entered with `Sigma_e` (this use is however +deprecated). + +If the variance of an exogenous variable is set to zero, this variable +will appear in the report on policy and transition functions, but isn't +used in the computation of moments and of Impulse Response Functions. +Setting a variance to zero is an easy way of removing an exogenous +shock. + +Note that, by default, if there are several `shocks` or `mshocks` blocks +in the same `.mod` file, then they are cumulative: all the shocks +declared in all the blocks are considered; however, if a `shocks` or +`mshocks` block is declared with the `overwrite` option, then it +replaces all the previous `shocks` and `mshocks` blocks. + +::: {.block} +shocks ; shocks(overwrite); + +See above for the meaning of the `overwrite` option. + +*In deterministic context* + +For deterministic simulations, the `shocks` block specifies temporary +changes in the value of exogenous variables. For permanent shocks, use +an `endval` block. + +The block should contain one or more occurrences of the following group +of three lines: + + var VARIABLE_NAME; + periods INTEGER[:INTEGER] [[,] INTEGER[:INTEGER]]...; + values DOUBLE | (EXPRESSION) [[,] DOUBLE | (EXPRESSION) ]...; + +It is possible to specify shocks which last several periods and which +can vary over time. The `periods` keyword accepts a list of several +dates or date ranges, which must be matched by as many shock values in +the `values` keyword. Note that a range in the `periods` keyword can be +matched by only one value in the `values` keyword. If `values` +represents a scalar, the same value applies to the whole range. If +`values` represents a vector, it must have as many elements as there are +periods in the range. + +Note that shock values are not restricted to numerical constants: +arbitrary expressions are also allowed, but you have to enclose them +inside parentheses. + +The feasible range of `periods` is from 0 to the number of `periods` +specified in `perfect_foresight_setup`. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +Note that the first endogenous simulation period is period 1. Thus, a +shock value specified for the initial period 0 may conflict with (i.e. +may overwrite or be overwritten by) values for the initial period +specified with `initval` or `endval` (depending on the exact context). +Users should always verify the correct setting of `oo_.exo_simul` after +`perfect_foresight_setup`. +::: + +*Example* (with scalar values) + + shocks; + + var e; + periods 1; + values 0.5; + var u; + periods 4:5; + values 0; + var v; + periods 4:5 6 7:9; + values 1 1.1 0.9; + var w; + periods 1 2; + values (1+p) (exp(z)); + + end; + +*Example* (with vector values) + + xx = [1.2; 1.3; 1]; + + shocks; + var e; + periods 1:3; + values (xx); + end; + +*In stochastic context* + +For stochastic simulations, the `shocks` block specifies the non zero +elements of the covariance matrix of the shocks of exogenous variables. + +You can use the following types of entries in the block: + +- Specification of the standard error of an exogenous variable. + + var VARIABLE_NAME; stderr EXPRESSION; + +- Specification of the variance of an exogenous variable. + + var VARIABLE_NAME = EXPRESSION; + +- Specification the covariance of two exogenous variables. + + var VARIABLE_NAME, VARIABLE_NAME = EXPRESSION; + +- Specification of the correlation of two exogenous variables. + + corr VARIABLE_NAME, VARIABLE_NAME = EXPRESSION; + +In an estimation context, it is also possible to specify variances and +covariances on endogenous variables: in that case, these values are +interpreted as the calibration of the measurement errors on these +variables. This requires the `varobs` command to be specified before the +`shocks` block. + +*Example* + + shocks; + var e = 0.000081; + var u; stderr 0.009; + corr e, u = 0.8; + var v, w = 2; + end; + +*In stochastic optimal policy context* + +When computing conditional welfare in a `ramsey_model` or +`discretionary_policy` context, welfare is conditional on the state +values inherited by planner when making choices in the first period. The +information set of the first period includes the respective exogenous +shock realizations. Thus, their known value can be specified using the +perfect foresight syntax. Note that i) all other values specified for +periods than period 1 will be ignored and ii) the value of lagged shocks +(e.g. in the case of news shocks) is specified with `histval`. + +*Example* + + shocks; + var u; stderr 0.008; + var u; + periods 1; + values 1; + end; + +*Mixing deterministic and stochastic shocks* + +It is possible to mix deterministic and stochastic shocks to build +models where agents know from the start of the simulation about future +exogenous changes. In that case `stoch_simul` will compute the rational +expectation solution adding future information to the state space +(nothing is shown in the output of `stoch_simul`) and `forecast` will +compute a simulation conditional on initial conditions and future +information. + +*Example* + + varexo_det tau; + varexo e; + ... + shocks; + var e; stderr 0.01; + var tau; + periods 1:9; + values -0.15; + end; + + stoch_simul(irf=0); + + forecast; +::: + + + +::: {.matcomm} +get\_shock\_stderr\_by\_name (\'EXOGENOUS\_NAME\'); + +Given the name of an exogenous variable, returns its standard deviation, +as set by a previous `shocks` block. +::: + +::: {.matcomm} +set\_shock\_stderr\_value (\'EXOGENOUS\_NAME\', MATLAB\_EXPRESSION); + +Sets the standard deviation of an exgonous variable. This does +essentially the same as setting the standard error via a `shocks` block, +except that it accepts arbitrary Julia expressions, and that it +works from Julia scripts. +::: + +Steady state {#st-st} +------------ + +There are two ways of computing the steady state (i.e. the static +equilibrium) of a model. The first way is to let Dynare compute the +steady state using a nonlinear Newton-type solver; this should work for +most models, and is relatively simple to use. The second way is to give +more guidance to Dynare, using your knowledge of the model, by providing +it with a method to compute the steady state, either using a +[steady\_state\_model]{.title-ref} block or writing matlab routine. + +### Finding the steady state with Dynare nonlinear solver + +::: {.command} +steady ; steady (OPTIONS\...); + +This command computes the steady state of a model using a nonlinear +Newton-type solver and displays it. When a steady state file is used +`steady` displays the steady state and checks that it is a solution of +the static model. + +More precisely, it computes the equilibrium value of the endogenous +variables for the value of the exogenous variables specified in the +previous `initval` or `endval` block. + +`steady` uses an iterative procedure and takes as initial guess the +value of the endogenous variables set in the previous `initval` or +`endval` block. + +For complicated models, finding good numerical initial values for the +endogenous variables is the trickiest part of finding the equilibrium of +that model. Often, it is better to start with a smaller model and add +new variables one by one. + +*Options* + +::: {#steady_maxit} +::: {.option} +maxit = INTEGER + +Determines the maximum number of iterations used in the non-linear +solver. The default value of `maxit` is 50. +::: +::: + +::: {#steady_tolf} +::: {.option} +tolf = DOUBLE + +Convergence criterion for termination based on the function value. +Iteration will cease when the residuals are smaller than `tolf`. +Default: `eps^(1/3)` +::: +::: + +::: {.option} +tolx = DOUBLE + +Convergence criterion for termination based on the step tolerance along. +Iteration will cease when the attempted step size is smaller than +`tolx`. Default: `eps^(2/3)` +::: + + +::: {.option} +homotopy\_mode = INTEGER + +Use a homotopy (or divide-and-conquer) technique to solve for the steady +state. If you use this option, you must specify a `homotopy_setup` +block. This option can take three possible values: + +> `1` +> +> > In this mode, all the parameters are changed simultaneously, and the +> > distance between the boundaries for each parameter is divided in as +> > many intervals as there are steps (as defined by the +> > `homotopy_steps` option); the problem is solved as many times as +> > there are steps. +> +> `2` +> +> > Same as mode `1`, except that only one parameter is changed at a +> > time; the problem is solved as many times as steps times number of +> > parameters. +> +> `3` +> +> > Dynare tries first the most extreme values. If it fails to compute +> > the steady state, the interval between initial and desired values is +> > divided by two for all parameters. Every time that it is impossible +> > to find a steady state, the previous interval is divided by two. +> > When it succeeds to find a steady state, the previous interval is +> > multiplied by two. In that last case `homotopy_steps` contains the +> > maximum number of computations attempted before giving up. +::: + +::: {.option} +homotopy\_steps = INTEGER + +Defines the number of steps when performing a homotopy. See +`homotopy_mode` option for more details. +::: + +::: {.option} +homotopy\_force\_continue = INTEGER + +This option controls what happens when homotopy fails. + +> `0` +> +> > `steady` fails with an error message +> +> `1` +> +> > `steady` keeps the values of the last homotopy step that was +> > successful and continues. **BE CAREFUL**: parameters and/or +> > exogenous variables are NOT at the value expected by the user + +Default is `0`. +::: + +::: {.option} +nocheck + +Don't check the steady state values when they are provided explicitly +either by a steady state file or a `steady_state_model` block. This is +useful for models with unit roots as, in this case, the steady state is +not unique or doesn't exist. +::: + + +*Example* + +See `init-term-cond`{.interpreted-text role="ref"}. +::: + +After computation, the steady state is available in the following +variable: + +::: {.matvar} +[oo]().steady\_state + +Contains the computed steady state. Endogenous variables are ordered in +the order of declaration used in the `var` command (which is also the +order used in `M_.endo_names`). +::: + +::: {.matcomm} +get\_mean (\'ENDOGENOUS\_NAME\' \[, \'ENDOGENOUS\_NAME\'\]\... ); + +Returns the steady of state of the given endogenous variable(s), as it +is stored in `oo_.steady_state`. Note that, if the steady state has not +yet been computed with `steady`, it will first try to compute it. +::: + +::: {.block} +homotopy\_setup ; + +This block is used to declare initial and final values when using a +homotopy method. It is used in conjunction with the option +`homotopy_mode` of the steady command. + +The idea of homotopy (also called divide-and-conquer by some authors) is +to subdivide the problem of finding the steady state into smaller +problems. It assumes that you know how to compute the steady state for a +given set of parameters, and it helps you finding the steady state for +another set of parameters, by incrementally moving from one to another +set of parameters. + +The purpose of the `homotopy_setup` block is to declare the final (and +possibly also the initial) values for the parameters or exogenous that +will be changed during the homotopy. It should contain lines of the +form: + + VARIABLE_NAME, EXPRESSION, EXPRESSION; + +This syntax specifies the initial and final values of a given +parameter/exogenous. + +There is an alternative syntax: + + VARIABLE_NAME, EXPRESSION; + +Here only the final value is specified for a given parameter/exogenous; +the initial value is taken from the preceeding `initval` block. + +A necessary condition for a successful homotopy is that Dynare must be +able to solve the steady state for the initial parameters/exogenous +without additional help (using the guess values given in the `initval` +block). + +If the homotopy fails, a possible solution is to increase the number of +steps (given in `homotopy_steps` option of `steady`). + +*Example* + +In the following example, Dynare will first compute the steady state for +the initial values (`gam=0.5` and `x=1`), and then subdivide the problem +into 50 smaller problems to find the steady state for the final values +(`gam=2` and `x=2`): + + var c k; + varexo x; + + parameters alph gam delt bet aa; + alph=0.5; + delt=0.02; + aa=0.5; + bet=0.05; + + model; + c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); + c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); + end; + + initval; + x = 1; + k = ((delt+bet)/(aa*x*alph))^(1/(alph-1)); + c = aa*x*k^alph-delt*k; + end; + + homotopy_setup; + gam, 0.5, 2; + x, 2; + end; + + steady(homotopy_mode = 1, homotopy_steps = 50); +::: + +### Providing the steady state to Dynare + +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 +`steady`. Again, there are two options for doing that: + +> - The easiest way is to write a `steady_state_model` block, which is +> described below in more details. See also `fs2000.mod` in the +> `examples` directory for an example. The steady state file +> generated by Dynare will be called `+FILENAME/steadystate.m.` +> - You can write the corresponding MATLAB function by hand. If your +> MOD-file is called `FILENAME.mod`, the steady state file must be +> called `FILENAME_steadystate.m`. See `NK_baseline_steadystate.m` +> in the examples directory for an example. This option gives a bit +> more flexibility (loops and conditional structures can be used), +> at the expense of a heavier programming burden and a lesser +> efficiency. + +Note that both files allow to update parameters in each call of the +function. This allows for example to calibrate a model to a labor supply +of 0.2 in steady state by setting the labor disutility parameter to a +corresponding value (see `NK_baseline_steadystate.m` in the `examples` +directory). They can also be used in estimation where some parameter may +be a function of an estimated parameter and needs to be updated for +every parameter draw. For example, one might want to set the capital +utilization cost parameter as a function of the discount rate to ensure +that capacity utilization is 1 in steady state. Treating both parameters +as independent or not updating one as a function of the other would lead +to wrong results. But this also means that care is required. Do not +accidentally overwrite your parameters with new values as it will lead +to wrong results. + +::: {.block} +steady\_state\_model ; + +When the analytical solution of the model is known, this command can be +used to help Dynare find the steady state in a more efficient and +reliable way, especially during estimation where the steady state has to +be recomputed for every point in the parameter space. + +Each line of this block consists of a variable (either an endogenous, a +temporary variable or a parameter) which is assigned an expression +(which can contain parameters, exogenous at the steady state, or any +endogenous or temporary variable already declared above). Each line +therefore looks like: + + VARIABLE_NAME = EXPRESSION; + +Note that it is also possible to assign several variables at the same +time, if the main function in the right hand side is a MATLAB/Octave +function returning several arguments: + + [ VARIABLE_NAME, VARIABLE_NAME... ] = EXPRESSION; + +Dynare will automatically generate a steady state file (of the form +`+FILENAME/steadystate.m`) using the information provided in this block. + +*Steady state file for deterministic models* + +The `steady_state_model` block also works with deterministic models. An +`initval` block and, when necessary, an `endval` block, is used to set +the value of the exogenous variables. Each `initval` or `endval` block +must be followed by `steady` to execute the function created by +`steady_state_model` and set the initial, respectively terminal, steady +state. + +*Example* + +> var m P c e W R k d n l gy_obs gp_obs y dA; +> varexo e_a e_m; +> +> parameters alp bet gam mst rho psi del; +> +> ... +> // parameter calibration, (dynamic) model declaration, shock calibration... +> ... +> +> steady_state_model; +> dA = exp(gam); +> gst = 1/dA; // A temporary variable +> m = mst; +> +> // Three other temporary variables +> khst = ( (1-gst*bet*(1-del)) / (alp*gst^alp*bet) )^(1/(alp-1)); +> xist = ( ((khst*gst)^alp - (1-gst*(1-del))*khst)/mst )^(-1); +> nust = psi*mst^2/( (1-alp)*(1-psi)*bet*gst^alp*khst^alp ); +> +> n = xist/(nust+xist); +> P = xist + nust; +> k = khst*n; +> +> l = psi*mst*n/( (1-psi)*(1-n) ); +> c = mst/P; +> d = l - mst + 1; +> y = k^alp*n^(1-alp)*gst^alp; +> R = mst/bet; +> +> // You can use MATLAB functions which return several arguments +> [W, e] = my_function(l, n); +> +> gp_obs = m/dA; +> gy_obs = dA; +> end; +> +> steady; +::: + +### Replace some equations during steady state computations {#eq-tag-ss} + +When there is no steady state file, Dynare computes the steady state by +solving the static model, i.e. the model from the `.mod` file from which +leads and lags have been removed. + +In some specific cases, one may want to have more control over the way +this static model is created. Dynare therefore offers the possibility to +explicitly give the form of equations that should be in the static +model. + +More precisely, if an equation is prepended by a `[static]` tag, then it +will appear in the static model used for steady state computation, but +that equation will not be used for other computations. For every +equation tagged in this way, you must tag another equation with +`[dynamic]`: that equation will not be used for steady state +computation, but will be used for other computations. + +This functionality can be useful on models with a unit root, where there +is an infinity of steady states. An equation (tagged `[dynamic]`) would +give the law of motion of the nonstationary variable (like a random +walk). To pin down one specific steady state, an equation tagged +`[static]` would affect a constant value to the nonstationary variable. +Another situation where the `[static]` tag can be useful is when one has +only a partial closed form solution for the steady state. + +*Example* + +This is a trivial example with two endogenous variables. The second +equation takes a different form in the static model: + + var c k; + varexo x; + ... + model; + c + k - aa*x*k(-1)^alph - (1-delt)*k(-1); + [dynamic] c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam); + [static] k = ((delt+bet)/(x*aa*alph))^(1/(alph-1)); + end; + +Getting information about the model +----------------------------------- + +::: {.command} +check ; check (OPTIONS\...); + +Computes the eigenvalues of the model linearized around the values +specified by the last `initval`, `endval` or `steady` statement. +Generally, the eigenvalues are only meaningful if the linearization is +done around a steady state of the model. It is a device for local +analysis in the neighborhood of this steady state. + +A necessary condition for the uniqueness of a stable equilibrium in the +neighborhood of the steady state is that there are as many eigenvalues +larger than one in modulus as there are forward looking variables in the +system. An additional rank condition requires that the square submatrix +of the right Schur vectors corresponding to the forward looking +variables (jumpers) and to the explosive eigenvalues must have full +rank. + +Note that the outcome may be different from what would be suggested by +`sum(abs(oo_.dr.eigval))` when eigenvalues are very close to +`qz_criterium `{.interpreted-text role="opt"}. + +*Options* + +::: {.option} +solve\_algo = INTEGER + +See `solve_algo `{.interpreted-text role="ref"}, for the +possible values and their meaning. +::: + +::: {.option} +qz\_zero\_threshold = DOUBLE + +Value used to test if a generalized eigenvalue is $0/0$ in the +generalized Schur decomposition (in which case the model does not admit +a unique solution). Default: `1e-6`. +::: + +*Output* + +`check` returns the eigenvalues in the global variable `oo_.dr.eigval`. +::: + +::: {.matvar} +[oo]().dr.eigval + +Contains the eigenvalues of the model, as computed by the `check` +command. +::: + +::: {.command} +model\_diagnostics ; + +This command performs various sanity checks on the model, and prints a +message if a problem is detected (missing variables at current period, +invalid steady state, singular Jacobian of static model). +::: + +::: {.command} +model\_info ; model\_info (OPTIONS\...); + +This command provides information about the model. + +When used outside the context of the `block` option of the `model` +block, it will provide a list of predetermined state variables, +forward-looking variables, and purely static variables. + + +Deterministic simulation {#det-simul} +------------------------ + +### Perfect foresight + +When the framework is deterministic, Dynare can be used for models with +the assumption of perfect foresight. Typically, the system is supposed +to be in a state of equilibrium before a period `1` when the news of a +contemporaneous or of a future shock is learned by the agents in the +model. The purpose of the simulation is to describe the reaction in +anticipation of, then in reaction to the shock, until the system returns +to the old or to a new state of equilibrium. In most models, this return +to equilibrium is only an asymptotic phenomenon, which one must +approximate by an horizon of simulation far enough in the future. +Another exercise for which Dynare is well suited is to study the +transition path to a new equilibrium following a permanent shock. For +deterministic simulations, the numerical problem consists of solving a +nonlinear system of simultaneous equations in `n` endogenous variables +in `T` periods. Dynare offers several algorithms for solving this +problem, which can be chosen via the `stack_solve_algo` option. By +default (`stack_solve_algo=0`), Dynare uses a Newton-type method to +solve the simultaneous equation system. Because the resulting Jacobian +is in the order of `n` by `T` and hence will be very large for long +simulations with many variables, Dynare makes use of the sparse matrix +capacities of MATLAB/Octave. A slower but potentially less memory +consuming alternative (`stack_solve_algo=1`) is based on a Newton-type +algorithm first proposed by *Laffargue (1990)* and *Boucekkine (1995)*, +which avoids ever storing the full Jacobian. The details of the +algorithm can be found in *Juillard (1996)*. The third type of +algorithms makes use of block decomposition techniques +(divide-and-conquer methods) that exploit the structure of the model. +The principle is to identify recursive and simultaneous blocks in the +model structure and use this information to aid the solution process. +These solution algorithms can provide a significant speed-up on large +models. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +Be careful when employing auxiliary variables in the context of perfect +foresight computations. The same model may work for stochastic +simulations, but fail for perfect foresight simulations. The issue +arises when an equation suddenly only contains variables dated `t+1` (or +`t-1` for that matter). In this case, the derivative in the last (first) +period with respect to all variables will be 0, rendering the stacked +Jacobian singular. + +*Example* + +> Consider the following specification of an Euler equation with log +> utility: +> +> Lambda = beta*C(-1)/C; +> Lambda(+1)*R(+1)= 1; +> +> Clearly, the derivative of the second equation with respect to all +> endogenous variables at time `t` is zero, causing +> `perfect_foresight_solver` to generally fail. This is due to the use +> of the Lagrange multiplier `Lambda` as an auxiliary variable. Instead, +> employing the identical +> +> beta*C/C(+1)*R(+1)= 1; +> +> will work. +::: + +::: {.command} +perfect\_foresight\_setup ; perfect\_foresight\_setup (OPTIONS\...); + +Prepares a perfect foresight simulation, by extracting the information +in the `initval`, `endval` and `shocks` blocks and converting them into +simulation paths for exogenous and endogenous variables. + +This command must always be called before running the simulation with +`perfect_foresight_solver`. + +*Options* + +::: {.option} +periods = INTEGER + +Number of periods of the simulation. +::: + +::: {.option} +datafile = FILENAME + +Used to specify path for all endogenous and exogenous variables. +Strictly equivalent to `initval_file`{.interpreted-text role="comm"}. +::: + +*Output* + +The paths for the exogenous variables are stored into `oo_.exo_simul`. + +The initial and terminal conditions for the endogenous variables and the +initial guess for the path of endogenous variables are stored into +`oo_.endo_simul`. +::: + +::: {.command} +perfect\_foresight\_solver ; perfect\_foresight\_solver (OPTIONS\...); + +Computes the perfect foresight (or deterministic) simulation of the +model. + +Note that `perfect_foresight_setup` must be called before this command, +in order to setup the environment for the simulation. + +*Options* + +::: {.option} +maxit = INTEGER + +Determines the maximum number of iterations used in the non-linear +solver. The default value of `maxit` is `50`. +::: + +::: {.option} +tolf = DOUBLE + +Convergence criterion for termination based on the function value. +Iteration will cease when it proves impossible to improve the function +value by more than `tolf`. Default: `1e-5` +::: + +::: {.option} +tolx = DOUBLE + +Convergence criterion for termination based on the change in the +function argument. Iteration will cease when the solver attempts to take +a step that is smaller than `tolx`. Default: `1e-5` +::: + +::: {.option} +noprint + +Don't print anything. Useful for loops. +::: + +::: {.option} +print + +Print results (opposite of `noprint`). +::: + + +::: {.option} +lmmcp + +Solves the perfect foresight model with a Levenberg-Marquardt mixed +complementarity problem (LMMCP) solver (*Kanzow and Petra (2004)*), +which allows to consider inequality constraints on the endogenous +variables (such as a ZLB on the nominal interest rate or a model with +irreversible investment). This option is equivalent to +`stack_solve_algo=7` **and** `solve_algo=10`. Using the LMMCP solver +requires a particular model setup as the goal is to get rid of any +min/max operators and complementary slackness conditions that might +introduce a singularity into the Jacobian. This is done by attaching an +equation tag (see `model-decl`{.interpreted-text role="ref"}) with the +`mcp` keyword to affected equations. This tag states that the equation +to which the tag is attached has to hold unless the expression within +the tag is binding. For instance, a ZLB on the nominal interest rate +would be specified as follows in the model block: + + model; + ... + [mcp = 'r > -1.94478'] + r = rho*r(-1) + (1-rho)*(gpi*Infl+gy*YGap) + e; + ... + end; + +where `1.94478` is the steady state level of the nominal interest rate +and `r` is the nominal interest rate in deviation from the steady state. +This construct implies that the Taylor rule is operative, unless the +implied interest rate `r<=-1.94478`, in which case the `r` is fixed at +`-1.94478` (thereby being equivalent to a complementary slackness +condition). By restricting the value of `r` coming out of this equation, +the `mcp` tag also avoids using `max(r,-1.94478)` for other occurrences +of `r` in the rest of the model. It is important to keep in mind that, +because the `mcp` tag effectively replaces a complementary slackness +condition, it cannot be simply attached to any equation. Rather, it must +be attached to the correct affected equation as otherwise the solver +will solve a different problem than originally intended. Also, since the +problem to be solved is nonlinear, the sign of the residuals of the +dynamic equation matters. In the previous example, for the nominal +interest rate rule, if the LHS and RHS are reversed the sign of the +residuals (the difference between the LHS and the RHS) will change and +it may happen that solver fails to identify the solution path. More +generally, convergence of the nonlinear solver is not guaranteed when +using mathematically equivalent representations of the same equation. + +Note that in the current implementation, the content of the `mcp` +equation tag is not parsed by the preprocessor. The inequalities must +therefore be as simple as possible: an endogenous variable, followed by +a relational operator, followed by a number (not a variable, parameter +or expression). +::: + +::: {.option} +endogenous\_terminal\_period + +The number of periods is not constant across Newton iterations when +solving the perfect foresight model. The size of the nonlinear system of +equations is reduced by removing the portion of the paths (and +associated equations) for which the solution has already been identified +(up to the tolerance parameter). This strategy can be interpreted as a +mix of the shooting and relaxation approaches. Note that round off +errors are more important with this mixed strategy (user should check +the reported value of the maximum absolute error). Only available with +option `stack_solve_algo==0`. +::: + +::: {.option} +linear\_approximation + +Solves the linearized version of the perfect foresight model. The model +must be stationary. Only available with option `stack_solve_algo==0` or +`stack_solve_algo==7`. +::: + +*Output* + +The simulated endogenous variables are available in global matrix +`oo_.endo_simul`. +::: + + +This variable stores the path of exogenous variables during a simulation +(computed by `perfect_foresight_solver`, `simul`, `stoch_simul` or +`extended_path`). The variables are arranged in columns, in order of +declaration (as in `M_.exo_names`). Periods are in rows. Note that this +convention regarding columns and rows is the opposite of the convention +for `oo_.endo_simul`! +::: + + +Stochastic solution and simulation {#stoch-sol} +---------------------------------- + +In a stochastic context, Dynare computes one or several simulations +corresponding to a random draw of the shocks. + +The main algorithm for solving stochastic models relies on a Taylor +approximation, up to third order, of the expectation functions (see +*Judd (1996)*, *Collard and Juillard (2001a, 2001b)*, and *Schmitt-Grohé +and Uríbe (2004)*). The details of the Dynare implementation of the +first order solution are given in *Villemot (2011)*. Such a solution is +computed using the `stoch_simul` command. + +As an alternative, it is possible to compute a simulation to a +stochastic model using the *extended path* method presented by *Fair and +Taylor (1983)*. This method is especially useful when there are strong +nonlinearities or binding constraints. Such a solution is computed using +the `extended_path` command. + +### Computing the stochastic solution {#stoch-sol-simul} + +::: {.command} +stoch\_simul \[VARIABLE\_NAME\...\]; stoch\_simul (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +Solves a stochastic (i.e. rational expectations) model, using +perturbation techniques. + +More precisely, `stoch_simul` computes a Taylor approximation of the +model around the deterministic steady state and solves of the the +decision and transition functions for the approximated model. Using +this, it computes 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 (see +`st-st`{.interpreted-text role="ref"}). + +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. More details on the computation of IRFs can be found at +. + +Variance decomposition, correlation, autocorrelation are only displayed +for variables with strictly 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%`. + +The covariance matrix of the shocks is specified with the `shocks` +command (see `shocks-exo`{.interpreted-text role="ref"}). + +When a list of `VARIABLE_NAME` is specified, results are displayed only +for these variables. + +The `stoch_simul` command with a first order approximation can benefit +from the block decomposition of the model (see `block`{.interpreted-text +role="opt"}). + +*Options* + +::: {.option} +ar = INTEGER + +Order of autocorrelation coefficients to compute and to print. Default: +`5`. +::: + +::: {.option} +drop = INTEGER + +Number of points (burnin) dropped at the beginning of simulation before +computing the summary statistics. Note that this option does not affect +the simulated series stored in `oo_.endo_simul` and the workspace. Here, +no periods are dropped. Default: `100`. +::: + +::: {.option} +hp\_filter = DOUBLE + +Uses HP filter with $\lambda =$ `DOUBLE` before computing moments. If +theoretical moments are requested, the spectrum of the model solution is +filtered following the approach outlined in Uhlig (2001). Default: no +filter. +::: + +::: {.option} +one\_sided\_hp\_filter = DOUBLE + +Uses the one-sided HP filter with $\lambda =$ `DOUBLE` described in +*Stock and Watson (1999)* before computing moments. This option is only +available with simulated moments. Default: no filter. +::: + +::: {.option} +bandpass\_filter + +Uses a bandpass filter with the default passband before computing +moments. If theoretical moments are requested, the spectrum of the model +solution is filtered using an ideal bandpass filter. If empirical +moments are requested, the *Baxter and King (1999)* filter is used. +Default: no filter. +::: + +::: {.option} +bandpass\_filter = \[HIGHEST\_PERIODICITY LOWEST\_PERIODICITY\] + +Uses a bandpass filter before computing moments. The passband is set to +a periodicity of to LOWEST\_PERIODICITY, e.g. $6$ to $32$ quarters if +the model frequency is quarterly. Default: `[6,32]`. +::: + +::: {.option} +filtered\_theoretical\_moments\_grid = INTEGER + +When computing filtered theoretical moments (with either option +`hp_filter` or option `bandpass_filter`), this option governs the number +of points in the grid for the discrete Inverse Fast Fourier Transform. +It may be necessary to increase it for highly autocorrelated processes. +Default: `512`. +::: + +::: {.option} +irf = INTEGER + +Number of periods on which to compute the IRFs. Setting `irf=0` +suppresses the plotting of IRFs. Default: `40`. +::: + +::: {.option} +irf\_shocks = ( VARIABLE\_NAME \[\[,\] VARIABLE\_NAME \...\] ) + +The exogenous variables for which to compute IRFs. Default: all. +::: + +::: {.option} +relative\_irf + +Requests the computation of normalized IRFs. At first order, the normal +shock vector of size one standard deviation is divided by the standard +deviation of the current shock and multiplied by 100. The impulse +responses are hence the responses to a unit shock of size 1 (as opposed +to the regular shock size of one standard deviation), multiplied by 100. +Thus, for a loglinearized model where the variables are measured in +percent, the IRFs have the interpretation of the percent responses to a +100 percent shock. For example, a response of 400 of output to a TFP +shock shows that output increases by 400 percent after a 100 percent TFP +shock (you will see that TFP increases by 100 on impact). Given +linearity at `order=1`, it is straightforward to rescale the IRFs stored +in `oo_.irfs` to any desired size. At higher order, the interpretation +is different. The `relative_irf` option then triggers the generation of +IRFs as the response to a 0.01 unit shock (corresponding to 1 percent +for shocks measured in percent) and no multiplication with 100 is +performed. That is, the normal shock vector of size one standard +deviation is divided by the standard deviation of the current shock and +divided by 100. For example, a response of 0.04 of log output (thus +measured in percent of the steady state output level) to a TFP shock +also measured in percent then shows that output increases by 4 percent +after a 1 percent TFP shock (you will see that TFP increases by 0.01 on +impact). +::: + +::: {.option} +irf\_plot\_threshold = DOUBLE + +Threshold size for plotting IRFs. All IRFs for a particular variable +with a maximum absolute deviation from the steady state smaller than +this value are not displayed. Default: `1e-10`. +::: + +::: {.option} +nocorr + +Don't print the correlation matrix (printing them is the default). +::: + +::: {.option} +nodecomposition + +Don't compute (and don't print) unconditional variance decomposition. +::: + +::: {.option} +nofunctions + +Don't print the coefficients of the approximated solution (printing them +is the default). +::: + +::: {.option} +nomoments + +Don't print moments of the endogenous variables (printing them is the +default). +::: + +::: {.option} +nograph + +Do not create graphs (which implies that they are not saved to the disk +nor displayed). If this option is not used, graphs will be saved to disk +(to the format specified by `graph_format` option, except if +`graph_format=none`) and displayed to screen (unless `nodisplay` option +is used). +::: + +::: {.option} +graph + +Re-enables the generation of graphs previously shut off with `nograph`. +::: + +::: {.option} +nodisplay + +Do not display the graphs, but still save them to disk (unless `nograph` +is used). +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +Specify the file format(s) for graphs saved to disk. Possible values are +`eps` (the default), `pdf`, `fig` and `none` (under Octave, `fig` is +unavailable). If the file format is set equal to `none`, the graphs are +displayed but not saved to the disk. +::: + +::: {.option} +noprint + +See `noprint`{.interpreted-text role="opt"}. +::: + +::: {.option} +print + +See `print`{.interpreted-text role="opt"}. +::: + +::: {.option} +order = INTEGER + +Order of Taylor approximation. Note that for third order and above, the +`k_order_solver` option is implied and only empirical moments are +available (you must provide a value for `periods` option). Default: `2` +(except after an `estimation` command, in which case the default is the +value used for the estimation). +::: + +::: {.option} +k\_order\_solver + +Use a k-order solver (implemented in C++) instead of the default Dynare +solver. This option is not yet compatible with the `bytecode` option +(see `model-decl`{.interpreted-text role="ref"}). Default: disabled for +order 1 and 2, enabled for order 3 and above. +::: + +::: {.option} +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` (see `oo_.endo_simul`{.interpreted-text role="mvar"}). +The simulated exogenous variables are made available in `oo_.exo_simul` +(see `oo_.exo_simul`{.interpreted-text role="mvar"}). Default: `0`. +::: + +::: {.option} +qz\_criterium = DOUBLE + +Value used to split stable from unstable eigenvalues in reordering the +Generalized Schur decomposition used for solving first order problems. +Default: `1.000001` (except when estimating with `lik_init` option equal +to `1`: the default is `0.999999` in that case; see +`estim`{.interpreted-text role="ref"}). +::: + +::: {.option} +qz\_zero\_threshold = DOUBLE + +See `qz_zero_threshold `{.interpreted-text +role="opt"}. +::: + +::: {.option} +replic = INTEGER + +Number of simulated series used to compute the IRFs. Default: `1` if +`order=1`, and `50` otherwise. +::: + +::: {.option} +simul\_replic = INTEGER + +Number of series to simulate when empirical moments are requested (i.e. +`periods` $>$ 0). Note that if this option is greater than 1, the +additional series will not be used for computing the empirical moments +but will simply be saved in binary form to the file `FILENAME_simul` in +the `FILENAME/Output`-folder. Default: `1`. +::: + +::: {.option} +solve\_algo = INTEGER + +See `solve_algo `{.interpreted-text role="ref"}, for the +possible values and their meaning. +::: + + +::: {.option} +conditional\_variance\_decomposition = INTEGER +conditional\_variance\_decomposition = \[INTEGER1:INTEGER2\] +conditional\_variance\_decomposition = \[INTEGER1 INTEGER2 \...\] + +Computes a conditional variance decomposition for the specified +period(s). The periods must be strictly positive. Conditional variances +are given by $var(y_{t+k}\vert t)$. For period 1, the conditional +variance decomposition provides the decomposition of the effects of +shocks upon impact. + +The results are stored in `oo_.conditional_variance_decomposition` (see +`oo_.conditional_variance_decomposition`{.interpreted-text +role="mvar"}). In the presence of measurement error, the +`oo_.conditional_variance_decomposition` field will contain the variance +contribution after measurement error has been taken out, i.e. the +decomposition will be conducted of the actual as opposed to the measured +variables. The variance decomposition of the measured variables will be +stored in `oo_.conditional_variance_decomposition_ME` (see +`oo_.conditional_variance_decomposition_ME`{.interpreted-text +role="mvar"}). The variance decomposition is only conducted, if +theoretical moments are requested, *i.e.* using the `periods=0`-option. +Only available at `order<3` and without +`pruning''. In case of`order=2`, Dynare provides a second-order accurate approximation to the true second moments based on the linear terms of the second-order solution (see *Kim, Kim, Schaumburg and Sims (2008)*). Note that the unconditional variance decomposition *i.e.* at horizon infinity) is automatically conducted if theoretical moments are requested and if`nodecomposition\`[ +is not set (see :mvar:\`oo\_.variance\_decomposition]{.title-ref}). +::: + +::: {.option} +pruning + +Discard higher order terms when iteratively computing simulations of the +solution. At second order, Dynare uses the algorithm of *Kim, Kim, +Schaumburg and Sims (2008)*, while at third order its generalization by +*Andreasen, Fernández-Villaverde and Rubio-Ramírez (2018)* is used. Not +available above third order. When specified, theoretical moments are +based on the pruned state space, i.e. the computation of second moments +uses all terms as in *Andreasen, Fernández-Villaverde and Rubio-Ramírez +(2018), page 10* as opposed to simply providing a second-order accurate +result based on the linear solution as in *Kim, Kim, Schaumburg and Sims +(2008)*. +::: + + +::: {.option} +sylvester = OPTION + +Determines the algorithm used to solve the Sylvester equation for block +decomposed model. Possible values for OPTION are: + +> `default` +> +> > Uses the default solver for Sylvester equations (`gensylv`) based on +> > Ondra Kamenik's algorithm (see +> > [here](https://www.dynare.org/assets/dynare++/sylvester.pdf) for +> > more information). +> +> `fixed_point` +> +> > Uses a fixed point algorithm to solve the Sylvester equation +> > (`gensylv_fp`). This method is faster than the default one for large +> > scale models. + +Default value is `default`. +::: + +::: {.option} +sylvester\_fixed\_point\_tol = DOUBLE + +The convergence criterion used in the fixed point Sylvester solver. Its +default value is `1e-12`. +::: + +::: {.option} +dr = OPTION + +Determines the method used to compute the decision rule. Possible values +for OPTION are: + +> `default` +> +> > Uses the default method to compute the decision rule based on the +> > generalized Schur decomposition (see *Villemot (2011)* for more +> > information). +> +> `cycle_reduction` +> +> > Uses the cycle reduction algorithm to solve the polynomial equation +> > for retrieving the coefficients associated to the endogenous +> > variables in the decision rule. This method is faster than the +> > default one for large scale models. +> + +Default value is `default`. +::: + +::: {.option} +dr\_cycle\_reduction\_tol = DOUBLE + +The convergence criterion used in the cycle reduction algorithm. Its +default value is `1e-7`. +::: + +::: {.option} +tex + +Requests the printing of results and graphs in TeX tables and graphics +that can be later directly included in LaTeX files. +::: + +::: {.option} +dr\_display\_tol = DOUBLE + +Tolerance for the suppression of small terms in the display of decision +rules. Rows where all terms are smaller than `dr_display_tol` are not +displayed. Default value: `1e-6`. +::: + +::: {.option} +contemporaneous\_correlation + +Saves the contemporaneous correlation between the endogenous variables +in `oo_.contemporaneous_correlation`. Requires the `nocorr` option not +to be set. +::: + +::: {.option} +spectral\_density + +Triggers the computation and display of the theoretical spectral density +of the (filtered) model variables. Results are stored in +`oo_.SpectralDensity`, defined below. Default: do not request spectral +density estimates. +::: + +::: {.option} +hp\_ngrid = INTEGER + +Deprecated option. It has the same effect as +`filtered_theoretical_moments_grid `{.interpreted-text +role="opt"}. +::: + +*Output* + +This command sets `oo_.dr`, `oo_.mean`, `oo_.var`, `oo_.var_list`, and +`oo_.autocorr`, which are described below. + +If the `periods` option is present, sets `oo_.skewness`, `oo_.kurtosis`, +and `oo_.endo_simul` (see `oo_.endo_simul`{.interpreted-text +role="mvar"}), and also saves the simulated variables in MATLAB/Octave +vectors of the global workspace with the same name as the endogenous +variables. + +If option `irf` is different from zero, sets `oo_.irfs` (see below) and +also saves the IRFs in MATLAB/Octave vectors of the global workspace +(this latter way of accessing the IRFs is deprecated and will disappear +in a future version). + +If the option `contemporaneous_correlation` is different from `0`, sets +`oo_.contemporaneous_correlation`, which is described below. + +*Example* + +> shocks; +> var e; +> stderr 0.0348; +> end; +> +> stoch_simul; +> +> Performs the simulation of the 2nd-order approximation of a model with +> a single stochastic shock `e`, with a standard error of `0.0348`. + +*Example* + +> stoch_simul(irf=60) y k; +> +> Performs the simulation of a model and displays impulse response +> functions on 60 periods for variables `y` and `k`. +::: + +::: {.matvar} +[oo]().mean + +After a run of `stoch_simul`, contains the mean of the endogenous +variables. Contains theoretical mean if the `periods` option is not +present, and simulated mean otherwise. The variables are arranged in +declaration order. +::: + +::: {.matvar} +[oo]().var + +After a run of `stoch_simul`, contains the variance-covariance of the +endogenous variables. Contains theoretical variance if the `periods` +option is not present and simulated variance otherwise. Only available +for `order<4`. At `order=2` it will be be a second-order accurate +approximation (i.e. ignoring terms of order 3 and 4 that would arise +when using the full second-order policy function). At `order=3`, +theoretical moments are only available with `pruning`. The variables are +arranged in declaration order. +::: + +::: {.matvar} +[oo]().var\_list + +The list of variables for which results are displayed. +::: + +::: {.matvar} +[oo]().skewness + +After a run of `stoch_simul` contains the skewness (standardized third +moment) of the simulated variables if the `periods` option is present. +The variables are arranged in declaration order. +::: + +::: {.matvar} +[oo]().kurtosis + +After a run of `stoch_simul` contains the excess kurtosis (standardized +fourth moment) of the simulated variables if the `periods` option is +present. The variables are arranged in declaration order. +::: + +::: {.matvar} +[oo]().autocorr + +After a run of `stoch_simul`, contains a cell array of the +autocorrelation matrices of the endogenous variables. 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. Contains theoretical autocorrelations if the +`periods` option is not present and simulated autocorrelations +otherwise. Only available for `order<4`. At `order=2` it will be be a +second-order accurate approximation. At `order=3`, theoretical moments +are only available with `pruning`. The field is only created if +stationary variables are present. + +The element `oo_.autocorr{i}(k,l)` is equal to the correlation between +$y^k_t$ and $y^l_{t-i}$, where $y^k$ (resp. $y^l$) is the $k$-th (resp. +$l$-th) endogenous variable in the declaration order. + +Note that if theoretical moments have been requested, `oo_.autocorr{i}` +is the same than `oo_.gamma_y{i+1}`. +::: + +::: {.matvar} +[oo]().gamma\_y + +After a run of `stoch_simul`, if theoretical moments have been requested +(i.e. if the `periods` option is not present), this variable contains a +cell array with the following values (where `ar` is the value of the +option of the same name): + +> `oo_.gamma{1}` +> +> > Variance/covariance matrix. +> +> `oo_.gamma{i+1}` (for i=1:ar) +> +> > Autocorrelation function. See `oo_.autocorr`{.interpreted-text +> > role="mvar"} for more details. **Beware**, this is the +> > autocorrelation function, not the autocovariance function. +> +> `oo_.gamma{ar+2}` +> +> > Unconditional variance decomposition, see +> > `oo_.variance_decomposition`{.interpreted-text role="mvar"}. +> +> `oo_.gamma{ar+3}` +> +> > If a second order approximation has been requested, contains the +> > vector of the mean correction terms. +> > +> > Only available at `order<4`. In case `order=2`, the theoretical +> > second moments are a second order accurate approximation of the true +> > second moments. See conditional\_variance\_decomposition. At +> > `order=3`, theoretical moments are only available with `pruning`. +::: + +::: {.matvar} +[oo]().variance\_decomposition + +After a run of `stoch_simul` when requesting theoretical moments +(`periods=0`), contains a matrix with the result of the unconditional +variance decomposition (i.e. at horizon infinity). The first dimension +corresponds to the endogenous variables (in the order of declaration +after the command or in `M_.endo_names`) and the second dimension +corresponds to exogenous variables (in the order of declaration). +Numbers are in percent and sum up to 100 across columns. In the presence +of measurement error, the field will contain the variance contribution +after measurement error has been taken out, *i.e.* the decomposition +will be conducted of the actual as opposed to the measured variables. +::: + +::: {.matvar} +[oo]().variance\_decomposition\_ME + +Field set after a run of `stoch_simul` when requesting theoretical +moments (`periods=0`) if measurement error is present. It is similar to +`oo_.variance_decomposition`{.interpreted-text role="mvar"}, but the +decomposition will be conducted of the measured variables. The field +contains a matrix with the result of the unconditional variance +decomposition (*i.e.* at horizon infinity). The first dimension +corresponds to the observed endoogenous variables (in the order of +declaration after the command) and the second dimension corresponds to +exogenous variables (in the order of declaration), with the last column +corresponding to the contribution of measurement error. Numbers are in +percent and sum up to 100 across columns. +::: + +::: {.matvar} +[oo]().conditional\_variance\_decomposition + +After a run of `stoch_simul` with the +`conditional_variance_decomposition` option, contains a +three-dimensional array with the result of the decomposition. The first +dimension corresponds to the endogenous variables (in the order of +declaration after the command or in `M_.endo_names` if not specified), +the second dimension corresponds to the forecast horizons (as declared +with the option), and the third dimension corresponds to the exogenous +variables (in the order of declaration). In the presence of measurement +error, the field will contain the variance contribution after +measurement error has been taken out, *i.e.* the decomposition will be +conductedof the actual as opposed to the measured variables. +::: + +::: {.matvar} +[oo]().conditional\_variance\_decomposition\_ME + +Field set after a run of `stoch_simul` with the +`conditional_variance_decomposition` option if measurement error is +present. It is similar to +`oo_.conditional_variance_decomposition`{.interpreted-text role="mvar"}, +but the decomposition will be conducted of the measured variables. It +contains a three-dimensional array with the result of the decomposition. +The first dimension corresponds to the endogenous variables (in the +order of declaration after the command or in `M_.endo_names` if not +specified), the second dimension corresponds to the forecast horizons +(as declared with the option), and the third dimension corresponds to +the exogenous variables (in the order of declaration), with the last +column corresponding to the contribution of the measurement error. +::: + +::: {.matvar} +[oo]().contemporaneous\_correlation + +After a run of `stoch_simul` with the +`contemporaneous_correlation option`, contains theoretical +contemporaneous correlations if the `periods` option is not present, and +simulated contemporaneous correlations otherwise. Only available for +`order<4`. At `order=2` it will be be a second-order accurate +approximation. At `order=3`, theoretical moments are only available with +`pruning`. The variables are arranged in declaration order. +::: + +::: {.matvar} +[oo]().SpectralDensity + +After a run of `stoch_simul` with option `spectral_density`, contains +the spectral density of the model variables. There will be a `nvars` by +`nfrequencies` subfield `freqs` storing the respective frequency grid +points ranging from $0$ to $2\pi$ and a same sized subfield `density` +storing the corresponding density. +::: + +::: {.matvar} +[oo]().irfs + +After a run of `stoch_simul` with option `irf` different from zero, +contains the impulse responses, with the following naming convention: +[VARIABLE\_NAME\_SHOCK\_NAME]{.title-ref}. + +> For example, `oo_.irfs.gnp_ea` contains the effect on `gnp` of a +> one-standard deviation shock on `ea`. +::: + +::: {.matcomm} +get\_irf (\'EXOGENOUS\_NAME\' \[, \'ENDOGENOUS\_NAME\'\]\... ); + +Given the name of an exogenous variables, returns the IRFs for the +requested endogenous variable(s), as they are stored in `oo_.irfs`. +::: + +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 observed at the beginning of the period. The +decision rules are stored in the structure `oo_.dr` which is described +below. + +::: {.matvar} +[oo]().dr + +Structure storing the decision rules. The subfields for different orders +of approximation are explained below. +::: + +::: {.command} +extended\_path ; extended\_path (OPTIONS\...); + +Simulates a stochastic (i.e. rational expectations) model, using the +extended path method presented by *Fair and Taylor (1983)*. Time series +for the endogenous variables are generated by assuming that the agents +believe that there will no more shocks in the following periods. + +This function first computes a random path for the exogenous variables +(stored in `oo_.exo_simul`, see `oo_.exo_simul`{.interpreted-text +role="mvar"}) and then computes the corresponding path for endogenous +variables, taking the steady state as starting point. The result of the +simulation is stored in `oo_.endo_simul` (see +`oo_.endo_simul`{.interpreted-text role="mvar"}). Note that this +simulation approach does not solve for the policy and transition +equations but for paths for the endogenous variables. + +*Options* + +::: {.option} +periods = INTEGER + +The number of periods for which the simulation is to be computed. No +default value, mandatory option. +::: + +::: {.option} +solver\_periods = INTEGER + +The number of periods used to compute the solution of the perfect +foresight at every iteration of the algorithm. Default: `200`. +::: + +::: {.option} +order = INTEGER + +If order is greater than `0` Dynare uses a gaussian quadrature to take +into account the effects of future uncertainty. If `order` $=S$ then the +time series for the endogenous variables are generated by assuming that +the agents believe that there will no more shocks after period $t+S$. +This is an experimental feature and can be quite slow. A non-zero value +is not compatible with either the `bytecode` or the `block` option of +the `model` block. Default: `0`. +::: + +::: {.option} +hybrid + +Use the constant of the second order perturbation reduced form to +correct the paths generated by the (stochastic) extended path algorithm. +::: + +::: {.option} +lmmcp + +Solves the perfect foresight model with a Levenberg-Marquardt mixed +complementarity problem (LMMCP) solver (*Kanzow and Petra (2004)*), +which allows to consider inequality constraints on the endogenous +variables (such as a ZLB on the nominal interest rate or a model with +irreversible investment). For specifying the necessary `mcp`-tag, see +`lmmcp`{.interpreted-text role="opt"}. +::: +::: + +### Typology and ordering of variables + +Dynare distinguishes four types of endogenous variables: + +*Purely backward (or purely predetermined) 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 `M_.npred`. + +*Purely forward variables* + +> 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 `M_.nfwrd`. + +*Mixed variables* + +> 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 `M_.nboth`. + +*Static variables* + +> 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 `M_.nstatic`. + +Note that all endogenous variables fall into one of these four +categories, since after the creation of auxiliary variables (see +`aux-variables`{.interpreted-text role="ref"}), all endogenous have at +most one lead and one lag. We therefore have the following identity: + +> ``` {.sourceCode .matlab} +> M_.npred + M_.both + M_.nfwrd + M_.nstatic = M_.endo_nbr +> ``` + +::: {.matvar} +[M]().state\_var + +Vector of numerical indices identifying the state variables in the +vector of declared variables. `M_.endo_names(M_.state_var)` therefore +yields the name of all variables that are states in the model +declaration, i.e. that show up with a lag. +::: + +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. + +::: {.matvar} +[oo]().dr.order\_var + +This variables maps DR-order to declaration order. +::: + +::: {.matvar} +[oo]().dr.inv\_order\_var + +This variable 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 ordered in DR-order when +they appear in decision rules elements. There are +`M_.nspred = M_.npred + M_.nboth` such variables. Similarly, one has +`M_.nsfwrd = M_.nfwrd + M_.nboth`, and +`M_.ndynamic = M_.nfwrd + M_.nboth + M_.npred`. + +### First-order approximation + +The approximation has the stylized form: + +$$y_t = y^s + A y^h_{t-1} + B u_t$$ + +where $y^s$ is the steady state value of $y$ and $y^h_t=y_t-y^s$. + +::: {.matvar} +oo.dr.state\_var + +Vector of numerical indices identifying the state variables in the +vector of declared variables, *given the current parameter values* for +which the decision rules have been computed. It may differ from +`M_.state_var` in case a state variable drops from the model given the +current parameterization, because it only gets 0 coefficients in the +decision rules. See `M_.state_var`{.interpreted-text role="mvar"}. +::: + +The coefficients of the decision rules are stored as follows: + +- $y^s$ 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, as given by `oo_.dr.state_var`. (N.B.: if the + `block` option to the `model` block has been specified, then rows + are in declaration order, and columns are ordered according to + `oo_.dr.state_var` which may differ from 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. (N.B.: if the `block` option to the + `model` block has been specified, then rows are in declaration + order.) + +Of course, the shown form of the approximation is only stylized, because +it neglects the required different ordering in $y^s$ and $y^h_t$. The +precise form of the approximation that shows the way Dynare deals with +differences between declaration and DR-order, is + +$$y_t(\mathrm{oo\_.dr.order\_var}) = +y^s(\mathrm{oo\_.dr.order\_var}) + A \cdot +y_{t-1}(\mathrm{oo\_.dr.order\_var(k2)}) - +y^s(\mathrm{oo\_.dr.order\_var(k2)}) + B\cdot u_t$$ + +where $\mathrm{k2}$ selects the state variables, $y_t$ and $y^s$ are in +declaration order and the coefficient matrices are in DR-order. +Effectively, all variables on the right hand side are brought into DR +order for computations and then assigned to $y_t$ in declaration order. + +### Second-order approximation + +The approximation has the form: + +$$y_t = y^s + 0.5 \Delta^2 + A y^h_{t-1} + B u_t + 0.5 C (y^h_{t-1}\otimes y^h_{t-1}) + 0.5 D (u_t \otimes u_t) + E (y^h_{t-1} \otimes u_t)$$ + +where $y^s$ is the steady state value of $y$, $y^h_t=y_t-y^s$, and +$\Delta^2$ is the shift effect of the variance of future shocks. For the +reordering required due to differences in declaration and DR order, see +the first order approximation. + +The coefficients of the decision rules are stored in the variables +described for first order approximation, plus the following variables: + +- $\Delta^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). + +### Third-order approximation + +The approximation has the form: + +$$y_t = y^s + G_0 + G_1 z_t + G_2 (z_t \otimes z_t) + G_3 (z_t \otimes z_t \otimes z_t)$$ + +where $y^s$ is the steady state value of $y$, and $z_t$ 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 $z_t$ is therefore of size $n_z$ += `M_.nspred` + `M_.exo_nbr`. + +The coefficients of the decision rules are stored as follows: + +- $y^s$ is stored in `oo_.dr.ys`. The vector rows correspond to all + endogenous in the declaration order. +- $G_0$ is stored in `oo_.dr.g_0`. The vector rows correspond to all + endogenous in DR-order. +- $G_1$ 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. +- $G_2$ 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 $n_z(n_z+1)/2$ columns. More + precisely, each column of this matrix corresponds to a pair + $(i_1, i_2)$ where each index represents an element of $z_t$ and is + therefore between $1$ and $n_z$. Only non-decreasing pairs are + stored, i.e. those for which $i_1 + \leq i_2$. The columns are arranged in the lexicographical order of + non-decreasing pairs. Also note that for those pairs where + $i_1 \neq i_2$, since the element is stored only once but appears + two times in the unfolded $G_2$ matrix, it must be multiplied by 2 + when computing the decision rules. +- $G_3$ 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 $n_z(n_z+1)(n_z+2)/6$ + columns. More precisely, each column of this matrix corresponds to a + tuple $(i_1, i_2, i_3)$ where each index represents an element of + $z_t$ and is therefore between $1$ and $n_z$. Only non-decreasing + tuples are stored, i.e. those for which $i_1 \leq i_2 \leq i_3$. The + columns are arranged in the lexicographical order of non-decreasing + tuples. Also note that for tuples that have three distinct indices + (i.e. $i_1 \neq i_2$ and $i_1 \neq i_3$ and $i_2 + \neq i_3$), since these elements are stored only once but appears + six times in the unfolded $G_3$ 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 $G_3$ matrix, they must be multiplied by + 3 when computing the decision rules. + +### Higher-order approximation + +Higher-order approximations are simply a generalization of what is done +at order 3. + +The steady state is stored in `oo_.dr.ys` and the constant correction is +stored in `oo_.dr.g_0`. The coefficient for orders 1, 2, 3, 4... are +respectively stored in `oo_.dr.g_0`, `oo_.dr.g_1`, `oo_.dr.g_2`, +`oo_.dr.g_3`, `oo_.dr.g_4`... The columns of those matrices correspond +to multidimensional indices of state variables, in such a way that +symmetric elements are never repeated (for more details, see the +description of `oo_.dr.g_3` in the third-order case). + + +Estimation based on likelihood {#estim} +------------------------------ + +Provided that you have observations on some endogenous variables, it is +possible to use Dynare to estimate some or all parameters. Both maximum +likelihood (as in *Ireland (2004)*) and Bayesian techniques (as in +*Fernández-Villaverde and Rubio-Ramírez (2004)*, *Rabanal and +Rubio-Ramirez (2003)*, *Schorfheide (2000)* or *Smets and Wouters +(2003)*) are available. Using Bayesian methods, it is possible to +estimate DSGE models, VAR models, or a combination of the two techniques +called DSGE-VAR. + +Note that in order to avoid stochastic singularity, you must have at +least as many shocks or measurement errors in your model as you have +observed variables. + +The estimation using a first order approximation can benefit from the +block decomposition of the model (see `block`{.interpreted-text +role="opt"}). + +::: {#varobs} +::: {.command} +varobs VARIABLE\_NAME\...; + +This command lists the name of observed endogenous variables for the +estimation procedure. These variables must be available in the data file +(see `estimation_cmd `{.interpreted-text role="ref"}). + +Alternatively, this command is also used in conjunction with the +`partial_information` option of `stoch_simul`, for declaring the set of +observed variables when solving the model under partial information. + +Only one instance of `varobs` is allowed in a model file. If one needs +to declare observed variables in a loop, the macro processor can be used +as shown in the second example below. + +*Example* + +> varobs C y rr; +> +> Declares endogenous variables `C`, `y` and `rr` as observed variables. + +*Example* (with a macro processor loop) + +> varobs +> @#for co in countries +> GDP_@{co} +> @#endfor +> ; +::: +::: + +::: {.block} +observation\_trends ; + +This block specifies linear trends for observed variables as functions +of model parameters. In case the `loglinear` option is used, this +corresponds to a linear trend in the logged observables, i.e. an +exponential trend in the level of the observables. + +Each line inside of the block should be of the form: + + VARIABLE_NAME(EXPRESSION); + +In most cases, variables shouldn't be centered when `observation_trends` +is used. + +*Example* + +> observation_trends; +> Y (eta); +> P (mu/eta); +> end; +::: + +::: {.block} +estimated\_params ; estimated\_params (overwrite) ; + +This block lists all parameters to be estimated and specifies bounds and +priors as necessary. + +Each line corresponds to an estimated parameter. + +In a maximum likelihood or a method of moments estimation, each line +follows this syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME + , INITIAL_VALUE [, LOWER_BOUND, UPPER_BOUND ]; + +In a Bayesian MCMC or a penalized method of moments estimation, each +line follows this syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME | DSGE_PRIOR_WEIGHT + [, INITIAL_VALUE [, LOWER_BOUND, UPPER_BOUND]], PRIOR_SHAPE, + PRIOR_MEAN, PRIOR_STANDARD_ERROR [, PRIOR_3RD_PARAMETER [, + PRIOR_4TH_PARAMETER [, SCALE_PARAMETER ] ] ]; + +The first part of the line consists of one of the four following +alternatives: + +- `stderr VARIABLE_NAME` + + Indicates that the standard error of the exogenous variable + VARIABLE\_NAME, or of the observation error/measurement errors + associated with endogenous observed variable VARIABLE\_NAME, is to + be estimated. + +- `corr VARIABLE_NAME1, VARIABLE_NAME2` + + Indicates that the correlation between the exogenous variables + VARIABLE\_NAME1 and VARIABLE\_NAME2, or the correlation of the + observation errors/measurement errors associated with endogenous + observed variables VARIABLE\_NAME1 and VARIABLE\_NAME2, is to be + estimated. Note that correlations set by previous shocks-blocks or + estimation-commands are kept at their value set prior to estimation + if they are not estimated again subsequently. Thus, the treatment is + the same as in the case of deep parameters set during model + calibration and not estimated. + +- `PARAMETER_NAME` + + The name of a model parameter to be estimated + +- `DSGE_PRIOR_WEIGHT` + + Special name for the weigh of the DSGE model in DSGE-VAR model. + +The rest of the line consists of the following fields, some of them +being optional: + +::: {.option} +INITIAL\_VALUE + +Specifies a starting value for the posterior mode optimizer or the +maximum likelihood estimation. If unset, defaults to the prior mean. +::: + +::: {.option} +LOWER\_BOUND + +Specifies a lower bound for the parameter value in maximum likelihood +estimation. In a Bayesian estimation context, sets a lower bound only +effective while maximizing the posterior kernel. This lower bound does +not modify the shape of the prior density, and is only aimed at helping +the optimizer in identifying the posterior mode (no consequences for the +MCMC). For some prior densities (namely inverse gamma, gamma, uniform, +beta or Weibull) it is possible to shift the support of the prior +distributions to the left or the right using +`prior_3rd_parameter `{.interpreted-text +role="opt"}. In this case the prior density is effectively modified +(note that the truncated Gaussian density is not implemented in Dynare). +If unset, defaults to minus infinity (ML) or the natural lower bound of +the prior (Bayesian estimation). +::: + +::: {.option} +UPPER\_BOUND + +Same as `lower_bound`, but specifying an upper bound instead. +::: + +::: {.option} +PRIOR\_SHAPE + +A keyword specifying the shape of the prior density. The possible values +are: `beta_pdf`, `gamma_pdf`, `normal_pdf`, `uniform_pdf`, +`inv_gamma_pdf`, `inv_gamma1_pdf`, `inv_gamma2_pdf` and `weibull_pdf`. +Note that `inv_gamma_pdf` is equivalent to `inv_gamma1_pdf`. +::: + +::: {.option} +PRIOR\_MEAN + +The mean of the prior distribution. +::: + +::: {.option} +PRIOR\_STANDARD\_ERROR + +The standard error of the prior distribution. +::: + +::: {.option} +PRIOR\_3RD\_PARAMETER + +A third parameter of the prior used for generalized beta distribution, +generalized gamma, generalized Weibull and for the uniform distribution. +Default: `0`. +::: + +::: {.option} +PRIOR\_4TH\_PARAMETER + +A fourth parameter of the prior used for generalized beta distribution +and for the uniform distribution. Default: `1`. +::: + +::: {.option} +SCALE\_PARAMETER + +A parameter specific scale parameter for the jumping distribution's +covariance matrix of the Metropolis-Hasting algorithm. +::: + +Note that INITIAL\_VALUE, LOWER\_BOUND, UPPER\_BOUND, PRIOR\_MEAN, +PRIOR\_STANDARD\_ERROR, PRIOR\_3RD\_PARAMETER, PRIOR\_4TH\_PARAMETER and +SCALE\_PARAMETER can be any valid EXPRESSION. Some of them can be empty, +in which Dynare will select a default value depending on the context and +the prior shape. + +In case of the uniform distribution, it can be specified either by +providing an upper and a lower bound using +`PRIOR_3RD_PARAMETER`{.interpreted-text role="opt"} and +`PRIOR_4TH_PARAMETER`{.interpreted-text role="opt"} or via mean and +standard deviation using `PRIOR_MEAN`{.interpreted-text role="opt"}, +`PRIOR_STANDARD_ERROR`{.interpreted-text role="opt"}. The other two will +automatically be filled out. Note that providing both sets of +hyperparameters will yield an error message. + +As one uses options more towards the end of the list, all previous +options must be filled: for example, if you want to specify +SCALE\_PARAMETER, you must specify `PRIOR_3RD_PARAMETER` and +`PRIOR_4TH_PARAMETER`. Use empty values, if these parameters don't +apply. + +*Example* + +> corr eps_1, eps_2, 0.5, , , beta_pdf, 0, 0.3, -1, 1; +> +> Sets a generalized beta prior for the correlation between `eps_1` and +> `eps_2` with mean `0` and variance `0.3`. By setting +> `PRIOR_3RD_PARAMETER` to `-1` and `PRIOR_4TH_PARAMETER` to `1` the +> standard beta distribution with support `[0,1]` is changed to a +> generalized beta with support `[-1,1]`. Note that LOWER\_BOUND and +> UPPER\_BOUND are left empty and thus default to `-1` and `1`, +> respectively. The initial value is set to `0.5`. + +*Example* + +> corr eps_1, eps_2, 0.5, -0.5, 1, beta_pdf, 0, 0.3, -1, 1; +> +> Sets the same generalized beta distribution as before, but now +> truncates this distribution to `[-0.5,1]` through the use of +> LOWER\_BOUND and UPPER\_BOUND. + +*Parameter transformation* + +Sometimes, it is desirable to estimate a transformation of a parameter +appearing in the model, rather than the parameter itself. It is of +course possible to replace the original parameter by a function of the +estimated parameter everywhere is the model, but it is often +unpractical. + +In such a case, it is possible to declare the parameter to be estimated +in the parameters statement and to define the transformation, using a +pound sign (\#) expression (see `model-decl`{.interpreted-text +role="ref"}). + +*Example* + +> parameters bet; +> +> model; +> # sig = 1/bet; +> c = sig*c(+1)*mpk; +> end; +> +> estimated_params; +> bet, normal_pdf, 1, 0.05; +> end; + +It is possible to have several `estimated_params` blocks. By default, +subsequent blocks are concatenated with the previous ones; this can be +useful when building models in a modular fashion (see also +`estimated_params_remove`{.interpreted-text role="bck"} for that use +case). However, if an `estimated_params` block has the `overwrite` +option, its contents becomes the new list of estimated parameters, +cancelling previous blocks; this can be useful when doing several +estimations in a single `.mod` file. +::: + +::: {.block} +estimated\_params\_init ; estimated\_params\_init (OPTIONS\...); + +This block declares numerical initial values for the optimizer when +these ones are different from the prior mean. It should be specified +after the `estimated_params` block as otherwise the specified starting +values are overwritten by the latter. + +Each line has the following syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME, INITIAL_VALUE; + +*Options* + +::: {.option} +use\_calibration + +For not specifically initialized parameters, use the deep parameters and +the elements of the covariance matrix specified in the `shocks` block +from calibration as starting values for estimation. For components of +the `shocks` block that were not explicitly specified during calibration +or which violate the prior, the prior mean is used. +::: + +See `estimated_params`{.interpreted-text role="bck"}, for the meaning +and syntax of the various components. +::: + +::: {.block} +estimated\_params\_bounds ; + +This block declares lower and upper bounds for parameters in maximum +likelihood estimation. + +Each line has the following syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME, LOWER_BOUND, UPPER_BOUND; + +See `estimated_params`{.interpreted-text role="bck"}, for the meaning +and syntax of the various components. +::: + +::: {.block} +estimated\_params\_remove ; + +This block partially undoes the effect of a previous +`estimated_params`{.interpreted-text role="bck"} block, by removing some +parameters from the estimation. + +Each line has the following syntax: + + stderr VARIABLE_NAME | corr VARIABLE_NAME_1, VARIABLE_NAME_2 | PARAMETER_NAME; +::: + +::: {#estim-comm} +::: {.command} +estimation \[VARIABLE\_NAME\...\]; estimation (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +This command runs Bayesian or maximum likelihood estimation. + +The following information will be displayed by the command: + +- Results from posterior optimization (also for maximum likelihood) +- Marginal log data density +- Posterior mean and highest posterior density interval (shortest + credible set) from posterior simulation +- Convergence diagnostic table when only one MCM chain is used or + Metropolis-Hastings convergence graphs documented in + *Pfeifer (2014)* in case of multiple MCM chains +- Table with numerical inefficiency factors of the MCMC +- Graphs with prior, posterior, and mode +- Graphs of smoothed shocks, smoothed observation errors, smoothed and + historical variables + +Note that the posterior moments, smoothed variables, k-step ahead +filtered variables and forecasts (when requested) will only be computed +on the variables listed after the `estimation` command. Alternatively, +one can choose to compute these quantities on all endogenous or on all +observed variables (see `consider_all_endogenous`, +`consider_all_endogenous_and_auxiliary`, and `consider_only_observed` +options below). If no variable is listed after the estimation command, +then Dynare will interactively ask which variable set to use. + +Also, during the MCMC (Bayesian estimation with `mh_replic` $>0$) a +(graphical or text) waiting bar is displayed showing the progress of the +Monte-Carlo and the current value of the acceptance ratio. Note that if +the `load_mh_file` option is used (see below) the reported acceptance +ratio does not take into account the draws from the previous MCMC. In +the literature there is a general agreement for saying that the +acceptance ratio should be close to one third or one quarter. If this +not the case, you can stop the MCMC (`Ctrl-C`) and change the value of +option `mh_jscale` (see below). + +Note that by default Dynare generates random numbers using the algorithm +`mt199937ar` (i.e. Mersenne Twister method) with a seed set equal to +`0`. Consequently the MCMCs in Dynare are deterministic: one will get +exactly the same results across different Dynare runs (*ceteris +paribus*). For instance, the posterior moments or posterior densities +will be exactly the same. This behaviour allows to easily identify the +consequences of a change on the model, the priors or the estimation +options. But one may also want to check that across multiple runs, with +different sequences of proposals, the returned results are almost +identical. This should be true if the number of iterations (i.e. the +value of `mh_replic`) is important enough to ensure the convergence of +the MCMC to its ergodic distribution. In this case the default behaviour +of the random number generators in not wanted, and the user should set +the seed according to the system clock before the estimation command +using the following command: + + set_dynare_seed('clock'); + +so that the sequence of proposals will be different across different +runs. + +Finally, Dynare does not always properly distinguish between maximum +likelihood and Bayesian estimation in its field names. While there is an +important conceptual distinction between frequentist confidence +intervals and Bayesian highest posterior density intervals (HPDI) as +well as between posterior density and likelilhood, Dynare sometimes uses +the Bayesian terms as a stand-in in its display of maximum likelihood +results. An example is the storage of the output of the +`forecast`-option of `estimation` with ML, which will use +`HPDinf/HPDsup` to denote the confidence interval. + +*Algorithms* + +The Monte Carlo Markov Chain (MCMC) diagnostics are generated by the +estimation command if +`mh_replic `{.interpreted-text role="opt"} is +larger than 2000 and if option `nodiagnostic`{.interpreted-text +role="opt"} is not used. If +`mh_nblocks `{.interpreted-text role="opt"} is +equal to one, the convergence diagnostics of *Geweke (1992,1999)* is +computed. It uses a chi-square test to compare the means of the first +and last draws specified by `geweke_interval +`{.interpreted-text role="opt"} after +discarding the burn-in of `mh_drop `{.interpreted-text +role="opt"}. The test is computed using variance estimates under the +assumption of no serial correlation as well as using tapering windows +specified in `taper_steps +`{.interpreted-text role="opt"}. +If `mh_nblocks +`{.interpreted-text role="opt"} is larger than 1, +the convergence diagnostics of *Brooks and Gelman (1998)* are used +instead. As described in section 3 of *Brooks and Gelman (1998)* the +univariate convergence diagnostics are based on comparing pooled and +within MCMC moments (Dynare displays the second and third order moments, +and the length of the Highest Probability Density interval covering 80% +of the posterior distribution). Due to computational reasons, the +multivariate convergence diagnostic does not follow *Brooks and Gelman +(1998)* strictly, but rather applies their idea for univariate +convergence diagnostics to the range of the posterior likelihood +function instead of the individual parameters. The posterior kernel is +used to aggregate the parameters into a scalar statistic whose +convergence is then checked using the *Brooks and Gelman (1998)* +univariate convergence diagnostic. + +The inefficiency factors are computed as in *Giordano et al.(2011)* +based on Parzen windows as in e.g. *Andrews (1991)*. + +*Options* + +::: {#dataf} +::: {.option} +datafile = FILENAME + +The datafile: a `.m` file, a `.mat` file, a `.csv` file, or a +`.xls/.xlsx` file (under Octave, the +[io](https://octave.sourceforge.io/io/) package from Octave-Forge is +required for the `.csv` and `.xlsx` formats and the `.xls` file +extension is not supported). Note that the base name (i.e. without +extension) of the datafile has to be different from the base name of the +model file. If there are several files named FILENAME, but with +different file endings, the file name must be included in quoted strings +and provide the file ending like: + + estimation(datafile='../fsdat_simul.mat',...); +::: +::: + +::: {.option} +dirname = FILENAME + +Directory in which to store `estimation` output. To pass a subdirectory +of a directory, you must quote the argument. Default: ``. +::: + +::: {.option} +xls\_sheet = QUOTED\_STRING + +The name of the sheet with the data in an Excel file. +::: + +::: {.option} +xls\_range = RANGE + +The range with the data in an Excel file. For example, +`xls_range=B2:D200`. +::: + +::: {.option} +nobs = INTEGER + +The number of observations following `first_obs `{.interpreted-text role="opt"} to be used. +Default: all observations in the file after `first_obs`. +::: + +::: {.option} +nobs = \[INTEGER1:INTEGER2\] + +Runs a recursive estimation and forecast for samples of size ranging of +`INTEGER1` to `INTEGER2`. Option `forecast` must also be specified. The +forecasts are stored in the `RecursiveForecast` field of the results +structure (see +`RecursiveForecast `{.interpreted-text +role="mvar"}). The respective results structures `oo_` are saved in +`oo_recursive_` (see `oo_recursive_`{.interpreted-text role="mvar"}) and +are indexed with the respective sample length. +::: + +::: {.option} +first\_obs = INTEGER + +The number of the first observation to be used. In case of estimating a +DSGE-VAR, `first_obs` needs to be larger than the number of lags. +Default: `1`. +::: + +::: {.option} +first\_obs = \[INTEGER1:INTEGER2\] + +Runs a rolling window estimation and forecast for samples of fixed size +`nobs` starting with the first observation ranging from `INTEGER1` to +`INTEGER2`. Option `forecast` must also be specified. This option is +incompatible with requesting recursive forecasts using an expanding +window (see `nobs +`{.interpreted-text role="opt"}). The +respective results structures `oo_` are saved in `oo_recursive_` (see +`oo_recursive_`{.interpreted-text role="mvar"}) and are indexed with the +respective first observation of the rolling window. +::: + +::: {.option} +prefilter = INTEGER + +A value of 1 means that the estimation procedure will demean each data +series by its empirical mean. If the `loglinear +`{.interpreted-text role="ref"} option without the +`logdata`{.interpreted-text role="opt"} option is requested, the data +will first be logged and then demeaned. Default: `0`, i.e. no +prefiltering. +::: + +::: {.option} +presample = INTEGER + +The number of observations after `first_obs `{.interpreted-text role="opt"} to be skipped before +evaluating the likelihood. These presample observations do not enter the +likelihood, but are used as a training sample for starting the Kalman +filter iterations. This option is incompatible with estimating a +DSGE-VAR. Default: `0`. +::: + +::: {#logl} +::: {.option} +loglinear + +Computes a log-linear approximation of the model instead of a linear +approximation. As always in the context of estimation, the data must +correspond to the definition of the variables used in the model (see +*Pfeifer (2013)* for more details on how to correctly specify +observation equations linking model variables and the data). If you +specify the loglinear option, Dynare will take the logarithm of both +your model variables and of your data as it assumes the data to +correspond to the original non-logged model variables. The displayed +posterior results like impulse responses, smoothed variables, and +moments will be for the logged variables, not the original un-logged +ones. Default: computes a linear approximation. +::: +::: + +::: {.option} +logdata + +Dynare applies the $log$ transformation to the provided data if a +log-linearization of the model is requested +(`loglinear`{.interpreted-text role="opt"}) unless `logdata` option is +used. This option is necessary if the user provides data already in +logs, otherwise the $log$ transformation will be applied twice (this may +result in complex data). +::: + +::: {.option} +plot\_priors = INTEGER + +Control the plotting of priors. + +> `0` +> +> > No prior plot. +> +> `1` +> +> > Prior density for each estimated parameter is plotted. It is +> > important to check that the actual shape of prior densities matches +> > what you have in mind. Ill-chosen values for the prior standard +> > density can result in absurd prior densities. + +Default value is `1`. +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +posterior\_nograph + +Suppresses the generation of graphs associated with Bayesian IRFs +(`bayesian_irf`{.interpreted-text role="opt"}), posterior smoothed +objects (`smoother`{.interpreted-text role="opt"}), and posterior +forecasts (`forecast`{.interpreted-text role="opt"}). +::: + +::: {.option} +posterior\_graph + +Re-enables the generation of graphs previously shut off with +`posterior_nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See +`graph_format `{.interpreted-text +role="opt"}. +::: + +::: {.option} +no\_init\_estimation\_check\_first\_obs + +Do not check for stochastic singularity in first period. If used, +[ESTIMATION CHECKS]{.title-ref} does not return an error if the check +fails only in first observation. This should only be used when observing +stock variables (e.g. capital) in first period, on top of their +associated flow (e.g. investment). Using this option may lead to a crash +or provide undesired/wrong results for badly specified problems (e.g. +the additional variable observed in first period is not predetermined). + +For advanced use only. +::: + +::: {.option} +lik\_init = INTEGER + +Type of initialization of Kalman filter: + +> `1` +> +> > For stationary models, the initial matrix of variance of the error +> > of forecast is set equal to the unconditional variance of the state +> > variables. +> +> `2` +> +> > For nonstationary models: a wide prior is used with an initial +> > matrix of variance of the error of forecast diagonal with 10 on the +> > diagonal (follows the suggestion of *Harvey and Phillips(1979)*). +> +> `3` +> +> > For nonstationary models: use a diffuse filter (use rather the +> > `diffuse_filter` option). +> +> `4` +> +> > The filter is initialized with the fixed point of the Riccati +> > equation. +> +> `5` +> +> > Use i) option 2 for the non-stationary elements by setting their +> > initial variance in the forecast error matrix to 10 on the diagonal +> > and all covariances to 0 and ii) option 1 for the stationary +> > elements. + +Default value is 1. For advanced use only. +::: + +::: {.option} +lik\_algo = INTEGER + +For internal use and testing only. +::: + +::: {.option} +conf\_sig = DOUBLE + +Level of significance of the confidence interval used for classical +forecasting after estimation. Default: 0.9. +::: + +::: {.option} +mh\_conf\_sig = DOUBLE + +Confidence/HPD interval used for the computation of prior and posterior +statistics like: parameter distributions, prior/posterior moments, +conditional variance decomposition, impulse response functions, Bayesian +forecasting. Default: `0.9`. +::: + +::: {.option} +mh\_replic = INTEGER + +Number of replications for each chain of the Metropolis-Hastings +algorithm. The number of draws should be sufficient to achieve +convergence of the MCMC and to meaningfully compute posterior objects. +Default: `20000`. +::: + +::: {.option} +sub\_draws = INTEGER + +Number of draws from the MCMC that are used to compute posterior +distribution of various objects (smoothed variable, smoothed shocks, +forecast, moments, IRF). The draws used to compute these posterior +moments are sampled uniformly in the estimated empirical posterior +distribution (i.e. draws of the MCMC). `sub_draws` should be smaller +than the total number of MCMC draws available. Default: +`min(posterior_max_subsample_draws, (Total number of draws)*(number of chains) )`. +::: + +::: {.option} +posterior\_max\_subsample\_draws = INTEGER + +Maximum number of draws from the MCMC used to compute posterior +distribution of various objects (smoothed variable, smoothed shocks, +forecast, moments, IRF), if not overriden by option `sub_draws`. +Default: `1200`. +::: + +::: {.option} +mh\_nblocks = INTEGER + +Number of parallel chains for Metropolis-Hastings algorithm. Default: +`2`. +::: + +::: {.option} +mh\_drop = DOUBLE + +The fraction of initially generated parameter vectors to be dropped as a +burn-in before using posterior simulations. Default: `0.5`. +::: + +::: {.option} +mh\_jscale = DOUBLE + +The scale parameter of the jumping distribution's covariance matrix +(Metropolis-Hastings or TaRB-algorithm). The default value is rarely +satisfactory. This option must be tuned to obtain, ideally, an +acceptance ratio of 25%-33%. Basically, the idea is to increase the +variance of the jumping distribution if the acceptance ratio is too +high, and decrease the same variance if the acceptance ratio is too low. +In some situations it may help to consider parameter-specific values for +this scale parameter. This can be done in the +`estimated_params`{.interpreted-text role="bck"} block. + +Note that `mode_compute=6` will tune the scale parameter to achieve an +acceptance rate of `AcceptanceRateTarget`{.interpreted-text +role="ref"}. The resulting scale parameter will be saved into a file +named `MODEL_FILENAME_mh_scale.mat` in the `FILENAME/Output`-folder. +This file can be loaded in subsequent runs via the +`posterior_sampler_options` option +`scale_file `{.interpreted-text role="ref"}. Both +`mode_compute=6` and `scale_file` will overwrite any value specified in +`estimated_params` with the tuned value. Default: `0.2`. + +Note also that for the Random Walk Metropolis Hastings algorithm, it is +possible to use option `mh_tune_jscale +`{.interpreted-text role="opt"}, to +automatically tune the value of `mh_jscale`. In this case, the +`mh_jscale` option must not be used. +::: + +::: {.option} +mh\_init\_scale = DOUBLE + +The scale to be used for drawing the initial value of the +Metropolis-Hastings chain. Generally, the starting points should be +overdispersed for the *Brooks and Gelman (1998)* convergence diagnostics +to be meaningful. Default: `2*mh_jscale.` + +It is important to keep in mind that `mh_init_scale` is set at the +beginning of Dynare execution, i.e. the default will not take into +account potential changes in `mh_jscale` introduced by either +`mode_compute=6` or the `posterior_sampler_options` option `scale_file +`{.interpreted-text role="ref"}. If `mh_init_scale` is too +wide during initalization of the posterior sampler so that 100 tested +draws are inadmissible (e.g. Blanchard-Kahn conditions are always +violated), Dynare will request user input of a new `mh_init_scale` value +with which the next 100 draws will be drawn and tested. If the +`nointeractive`{.interpreted-text role="opt"} option has been invoked, +the program will instead automatically decrease `mh_init_scale` by 10 +percent after 100 futile draws and try another 100 draws. This iterative +procedure will take place at most 10 times, at which point Dynare will +abort with an error message. +::: + +::: {.option} +mh\_tune\_jscale \[= DOUBLE\] + +Automatically tunes the scale parameter of the jumping distribution\'s +covariance matrix (Metropolis-Hastings), so that the overall acceptance +ratio is close to the desired level. Default value is `0.33`. It is not +possible to match exactly the desired acceptance ratio because of the +stochastic nature of the algorithm (the proposals and the initial +conditions of the markov chains if `mh_nblocks>1`). This option is only +available for the Random Walk Metropolis Hastings algorithm. Must not be +used in conjunction with `mh_jscale = DOUBLE`{.interpreted-text +role="opt"}. +::: + +::: {.option} +mh\_tune\_guess = DOUBLE + +Specifies the initial value for the `mh_tune_jscale +`{.interpreted-text role="opt"} option. +Default: `0.2`. Must not be set if +`mh_tune_jscale `{.interpreted-text +role="opt"} is not used. +::: + +::: {.option} +mh\_recover + +Attempts to recover a Metropolis-Hastings simulation that crashed +prematurely, starting with the last available saved `mh`-file. Shouldn't +be used together with `load_mh_file` or a different `mh_replic` than in +the crashed run. Since Dynare 4.5 the proposal density from the previous +run will automatically be loaded. In older versions, to assure a neat +continuation of the chain with the same proposal density, you should +provide the `mode_file` used in the previous run or the same +user-defined `mcmc_jumping_covariance` when using this option. Note that +under Octave, a neat continuation of the crashed chain with the +respective last random number generator state is currently not +supported. +::: + +::: {.option} +mh\_posterior\_mode\_estimation + +Skip optimizer-based mode-finding and instead compute the mode based on +a run of a MCMC. The MCMC will start at the prior mode and use the prior +variances to compute the inverse Hessian. +::: + +::: {.option} +mode\_file = FILENAME + +Name of the file containing previous value for the mode. When computing +the mode, Dynare stores the mode (`xparam1`) and the hessian (`hh`, only +if `cova_compute=1`) in a file called `MODEL_FILENAME_mode.mat` in the +`FILENAME/Output`-folder. After a successful run of the estimation +command, the `mode_file` will be disabled to prevent other function +calls from implicitly using an updated mode-file. Thus, if the `.mod` +file contains subsequent `estimation` commands, the `mode_file` option, +if desired, needs to be specified again. +::: + + +::: {.option} +silent\_optimizer + +Instructs Dynare to run mode computing/optimization silently without +displaying results or saving files in between. Useful when running +loops. +::: + +::: {.option} +mcmc\_jumping\_covariance = OPTION + +Tells Dynare which covariance to use for the proposal density of the +MCMC sampler. OPTION can be one of the following: + +> `hessian` +> +> > Uses the Hessian matrix computed at the mode. +> +> `prior_variance` +> +> > Uses the prior variances. No infinite prior variances are allowed in +> > this case. +> +> `identity_matrix` +> +> > Uses an identity matrix. +> +> `FILENAME` +> +> > Loads an arbitrary user-specified covariance matrix from +> > `FILENAME.mat`. The covariance matrix must be saved in a variable +> > named `jumping_covariance`, must be square, positive definite, and +> > have the same dimension as the number of estimated parameters. + +Note that the covariance matrices are still scaled with +`mh_jscale `{.interpreted-text role="opt"}. Default +value is `hessian`. +::: + +::: {.option} +mode\_check + +Tells Dynare to plot the posterior density for values around the +computed mode for each estimated parameter in turn. This is helpful to +diagnose problems with the optimizer. Note that for `order>1` the +likelihood function resulting from the particle filter is not +differentiable anymore due to the resampling step. For this reason, the +`mode_check` plot may look wiggly. +::: + +::: {.option} +mode\_check\_neighbourhood\_size = DOUBLE + +Used in conjunction with option `mode_check`, gives the width of the +window around the posterior mode to be displayed on the diagnostic +plots. This width is expressed in percentage deviation. The `Inf` value +is allowed, and will trigger a plot over the entire domain (see also +`mode_check_symmetric_plots`). Default:`0.5`. +::: + +::: {.option} +mode\_check\_symmetric\_plots = INTEGER + +Used in conjunction with option `mode_check`, if set to `1`, tells +Dynare to ensure that the check plots are symmetric around the posterior +mode. A value of `0` allows to have asymmetric plots, which can be +useful if the posterior mode is close to a domain boundary, or in +conjunction with `mode_check_neighbourhood_size = Inf` when the domain +in not the entire real line. Default: `1`. +::: + +::: {.option} +mode\_check\_number\_of\_points = INTEGER + +Number of points around the posterior mode where the posterior kernel is +evaluated (for each parameter). Default is `20`. +::: + +::: {.option} +prior\_trunc = DOUBLE + +Probability of extreme values of the prior density that is ignored when +computing bounds for the parameters. Default: `1e-32`. +::: + +::: {.option} +huge\_number = DOUBLE + +Value for replacing infinite values in the definition of (prior) bounds +when finite values are required for computational reasons. Default: +`1e7`. +::: + +::: {.option} +load\_mh\_file + +Tells Dynare to add to previous Metropolis-Hastings simulations instead +of starting from scratch. Since Dynare 4.5 the proposal density from the +previous run will automatically be loaded. In older versions, to assure +a neat continuation of the chain with the same proposal density, you +should provide the `mode_file` used in the previous run or the same +user-defined `mcmc_jumping_covariance` when using this option. Shouldn't +be used together with `mh_recover`. Note that under Octave, a neat +continuation of the chain with the last random number generator state of +the already present draws is currently not supported. +::: + +::: {.option} +load\_results\_after\_load\_mh + +This option is available when loading a previous MCMC run without adding +additional draws, i.e. when `load_mh_file` is specified with +`mh_replic=0`. It tells Dynare to load the previously computed +convergence diagnostics, marginal data density, and posterior statistics +from an existing `_results` file instead of recomputing them. +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc + +This option allows to pick initial values for new MCMC from a previous +one, where the model specification, the number of estimated parameters, +(some) prior might have changed (so a situation where `load_mh_file` +would not work). If an additional parameter is estimated, it is +automatically initialized from prior\_draw. Note that, if this option is +used to skip the optimization step, you should use a sampling method +which does not require a proposal density, like slice. Otherwise, +optimization should always be done beforehand or a mode file with an +appropriate posterior covariance matrix should be used. +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc\_directory = FILENAME + +If `mh_initialize_from_previous_mcmc` is set, users must provide here +the path to the standard FNAME folder from where to load prior +definitions and last MCMC values to be used to initialize the new MCMC. + +Example: if previous project directory is `/my_previous_dir` and FNAME +is `mymodel`, users should set the option as + +`mh_initialize_from_previous_mcmc_directory = '/my_previous_dir/mymodel'` + +Dynare will then look for the last record file into + +`/my_previous_dir/mymodel/metropolis/mymodel_mh_history_.mat` + +and for the prior definition file into + +`/my_previous_dir/mymodel/prior/definition.mat` +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc\_record = FILENAME + +If `mh_initialize_from_previous_mcmc` is set, and whenever the standard +file or directory tree is not applicable to load initial values, users +may directly provide here the path to the record file from which to load +values to be used to initialize the new MCMC. +::: + +::: {.option} +mh\_initialize\_from\_previous\_mcmc\_prior = FILENAME + +If `mh_initialize_from_previous_mcmc` is set, and whenever the standard +file or directory tree is not applicable to load initial values, users +may directly provide here the path to the prior definition file, to get +info in the priors used in previous MCMC. +::: + +::: {.option} +optim = (NAME, VALUE, \...) + +A list of NAME and VALUE pairs. Can be used to set options for the +optimization routines. The set of available options depends on the +selected optimization routine (i.e. on the value of option +`mode_compute `{.interpreted-text role="opt"}): + +> `1, 3, 7, 12, 13` +> +> > Available options are given in the documentation of the MATLAB +> > Optimization Toolbox or in Octave's documentation. +> +> `2` +> +> > Available options are: +> > +> > > `'initial_step_length'` +> > > +> > > > Initial step length. Default: `1`. +> > > +> > > `'initial_temperature'` +> > > +> > > > Initial temperature. Default: `15`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of function evaluations. Default: `100000`. +> > > +> > > `'neps'` +> > > +> > > > Number of final function values used to decide upon termination. +> > > > Default: `10`. +> > > +> > > `'ns'` +> > > +> > > > Number of cycles. Default: `10`. +> > > +> > > `'nt'` +> > > +> > > > Number of iterations before temperature reduction. Default: +> > > > `10`. +> > > +> > > `'step_length_c'` +> > > +> > > > Step length adjustment. Default: `0.1`. +> > > +> > > `'TolFun'` +> > > +> > > > Stopping criteria. Default: `1e-8`. +> > > +> > > `'rt'` +> > > +> > > > Temperature reduction factor. Default: `0.1`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization, ranging from +> > > > `0` (silent) to `3` (each function evaluation). Default: `1` +> +> `4` +> +> > Available options are: +> > +> > > `'InitialInverseHessian'` +> > > +> > > > Initial approximation for the inverse of the Hessian matrix of +> > > > the posterior kernel (or likelihood). Obviously this +> > > > approximation has to be a square, positive definite and +> > > > symmetric matrix. Default: `'1e-4*eye(nx)'`, where nx is the +> > > > number of parameters to be estimated. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `1000`. +> > > +> > > `'NumgradAlgorithm'` +> > > +> > > > Possible values are `2`, `3` and `5`, respectively, +> > > > corresponding to the two, three and five points formula used to +> > > > compute the gradient of the objective function (see *Abramowitz +> > > > and Stegun (1964)*). Values `13` and `15` are more experimental. +> > > > If perturbations on the right and the left increase the value of +> > > > the objective function (we minimize this function) then we force +> > > > the corresponding element of the gradient to be zero. The idea +> > > > is to temporarily reduce the size of the optimization problem. +> > > > Default: `2`. +> > > +> > > `'NumgradEpsilon'` +> > > +> > > > Size of the perturbation used to compute numerically the +> > > > gradient of the objective function. Default: `1e-6`. +> > > +> > > `'TolFun'` +> > > +> > > > Stopping criteria. Default: `1e-7`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> > > +> > > `'SaveFiles'` +> > > +> > > > Controls saving of intermediate results during optimization. Set +> > > > to `0` to shut off saving. Default: `1`. +> +> `5` +> +> > Available options are: +> > +> > `'Hessian'` +> > +> > > Triggers three types of Hessian computations. `0`: outer product +> > > gradient; `1`: default Dynare Hessian routine; `2`: 'mixed' outer +> > > product gradient, where diagonal elements are obtained using +> > > second order derivation formula and outer product is used for +> > > correlation structure. Both {0} and {2} options require univariate +> > > filters, to ensure using maximum number of individual densities +> > > and a positive definite Hessian. Both {0} and {2} are quicker than +> > > default Dynare numeric Hessian, but provide decent starting values +> > > for Metropolis for large models (option {2} being more accurate +> > > than {0}). Default: `1`. +> > +> > `'MaxIter'` +> > +> > > Maximum number of iterations. Default: `1000`. +> > +> > `'TolFun'` +> > +> > > Stopping criteria. Default: `1e-5` for numerical derivatives, +> > > `1e-7` for analytic derivatives. +> > +> > `'verbosity'` +> > +> > > Controls verbosity of display during optimization. Set to `0` to +> > > set to silent. Default: `1`. +> > +> > `'SaveFiles'` +> > +> > > Controls saving of intermediate results during optimization. Set +> > > to `0` to shut off saving. Default: `1`. +> +> `6` +> +> > Available options are: +> > +> > > ::: {#art} +> > > `'AcceptanceRateTarget'` +> > > ::: +> > > +> > > > A real number between zero and one. The scale parameter of the +> > > > jumping distribution is adjusted so that the effective +> > > > acceptance rate matches the value of option +> > > > `'AcceptanceRateTarget'`. Default: `1.0/3.0`. +> > > +> > > `'InitialCovarianceMatrix'` +> > > +> > > > Initial covariance matrix of the jumping distribution. Default +> > > > is `'previous'` if option `mode_file` is used, `'prior'` +> > > > otherwise. +> > > +> > > `'nclimb-mh'` +> > > +> > > > Number of iterations in the last MCMC (climbing mode). Default: +> > > > `200000`. +> > > +> > > `'ncov-mh'` +> > > +> > > > Number of iterations used for updating the covariance matrix of +> > > > the jumping distribution. Default: `20000`. +> > > +> > > `'nscale-mh'` +> > > +> > > > Maximum number of iterations used for adjusting the scale +> > > > parameter of the jumping distribution. Default: `200000`. +> > > +> > > `'NumberOfMh'` +> > > +> > > > Number of MCMC run sequentially. Default: `3`. +> +> `8` +> +> > Available options are: +> > +> > > `'InitialSimplexSize'` +> > > +> > > > Initial size of the simplex, expressed as percentage deviation +> > > > from the provided initial guess in each direction. Default: +> > > > `.05`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `5000`. +> > > +> > > `'MaxFunEvals'` +> > > +> > > > Maximum number of objective function evaluations. No default. +> > > +> > > `'MaxFunvEvalFactor'` +> > > +> > > > Set `MaxFunvEvals` equal to `MaxFunvEvalFactor` times the number +> > > > of estimated parameters. Default: `500`. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-4`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-4`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> +> `9` +> +> > Available options are: +> > +> > > `'CMAESResume'` +> > > +> > > > Resume previous run. Requires the `variablescmaes.mat` from the +> > > > last run. Set to `1` to enable. Default: `0`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. +> > > +> > > `'MaxFunEvals'` +> > > +> > > > Maximum number of objective function evaluations. Default: +> > > > `Inf`. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-7`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-7`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> > > +> > > `'SaveFiles'` +> > > +> > > > Controls saving of intermediate results during optimization. Set +> > > > to `0` to shut off saving. Default: `1`. +> +> `10` +> +> > Available options are: +> > +> > > `'EndTemperature'` +> > > +> > > > Terminal condition w.r.t the temperature. When the temperature +> > > > reaches `EndTemperature`, the temperature is set to zero and the +> > > > algorithm falls back into a standard simplex algorithm. Default: +> > > > `0.1`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `5000`. +> > > +> > > `'MaxFunvEvals'` +> > > +> > > > Maximum number of objective function evaluations. No default. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-4`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-4`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> +> `101` +> +> > Available options are: +> > +> > > `'LBGradientStep'` +> > > +> > > > Lower bound for the stepsize used for the difference +> > > > approximation of gradients. Default: `1e-11`. +> > > +> > > `'MaxIter'` +> > > +> > > > Maximum number of iterations. Default: `15000` +> > > +> > > `'SpaceDilation'` +> > > +> > > > Coefficient of space dilation. Default: `2.5`. +> > > +> > > `'TolFun'` +> > > +> > > > Tolerance parameter (w.r.t the objective function). Default: +> > > > `1e-6`. +> > > +> > > `'TolX'` +> > > +> > > > Tolerance parameter (w.r.t the instruments). Default: `1e-6`. +> > > +> > > `'verbosity'` +> > > +> > > > Controls verbosity of display during optimization. Set to `0` to +> > > > set to silent. Default: `1`. +> +> `102` +> +> > Available options are given in the documentation of the MATLAB +> > Global Optimization Toolbox. + +*Example* + +> To change the defaults of `csminwel` (`mode_compute=4`): +> +> estimation(..., mode_compute=4,optim=('NumgradAlgorithm',3,'TolFun',1e-5),...); +::: + +::: {.option} +nodiagnostic + +Does not compute the convergence diagnostics for Metropolis-Hastings. +Default: diagnostics are computed and displayed. +::: + +::: {.option} +bayesian\_irf + +Triggers the computation of the posterior distribution of IRFs. The +length of the IRFs are controlled by the `irf` option. Results are +stored in `oo_.PosteriorIRF.dsge` (see below for a description of this +variable). +::: + +::: {.option} +relative\_irf + +See `relative_irf`{.interpreted-text role="opt"}. +::: + + +::: {.option} +posterior\_sampling\_method = NAME + +Selects the sampler used to sample from the posterior distribution +during Bayesian estimation. Default:`’random_walk_metropolis_hastings’`. + +> `'random_walk_metropolis_hastings'` +> +> > Instructs Dynare to use the Random-Walk Metropolis-Hastings. In this +> > algorithm, the proposal density is recentered to the previous draw +> > in every step. +> +> `'tailored_random_block_metropolis_hastings'` +> +> > Instructs Dynare to use the Tailored randomized block (TaRB) +> > Metropolis-Hastings algorithm proposed by *Chib and Ramamurthy +> > (2010)* instead of the standard Random-Walk Metropolis-Hastings. In +> > this algorithm, at each iteration the estimated parameters are +> > randomly assigned to different blocks. For each of these blocks a +> > mode-finding step is conducted. The inverse Hessian at this mode is +> > then used as the covariance of the proposal density for a +> > Random-Walk Metropolis-Hastings step. If the numerical Hessian is +> > not positive definite, the generalized Cholesky decomposition of +> > *Schnabel and Eskow (1990)* is used, but without pivoting. The +> > TaRB-MH algorithm massively reduces the autocorrelation in the MH +> > draws and thus reduces the number of draws required to +> > representatively sample from the posterior. However, this comes at a +> > computational cost as the algorithm takes more time to run. +> +> `'independent_metropolis_hastings'` +> +> > Use the Independent Metropolis-Hastings algorithm where the proposal +> > distribution - in contrast to the Random Walk Metropolis-Hastings +> > algorithm - does not depend on the state of the chain. +> +> `'slice'` +> +> > Instructs Dynare to use the Slice sampler of *Planas, Ratto, and +> > Rossi (2015)*. Note that `'slice'` is incompatible with +> > `prior_trunc=0`. +::: + +::: {.option} +posterior\_sampler\_options = (NAME, VALUE, \...) + +A list of NAME and VALUE pairs. Can be used to set options for the +posterior sampling methods. The set of available options depends on the +selected posterior sampling routine (i.e. on the value of option +`posterior_sampling_method +`{.interpreted-text role="opt"}): + +> `'random_walk_metropolis_hastings'` +> +> > Available options are: +> +> ::: {#prop_distrib} +> `'proposal_distribution'` +> ::: +> +> > Specifies the statistical distribution used for the proposal +> > density. +> +> `'rand_multivariate_normal'` +> +> > Use a multivariate normal distribution. This is the default. +> +> `'rand_multivariate_student'` +> +> > Use a multivariate student distribution. +> +> `'student_degrees_of_freedom'` +> +> > Specifies the degrees of freedom to be used with the multivariate +> > student distribution. Default: `3`. +> +> ::: {#usemhcov} +> `'use_mh_covariance_matrix'` +> ::: +> +> > Indicates to use the covariance matrix of the draws from a previous +> > MCMC run to define the covariance of the proposal distribution. +> > Requires the `load_mh_file`{.interpreted-text role="opt"} option to +> > be specified. Default: `0`. +> +> ::: {#scale-file} +> `'scale_file'` +> ::: +> +> > Provides the name of a `_mh_scale.mat` file storing the tuned scale +> > factor from a previous run of `mode_compute=6`. +> +> ::: {#savetmp} +> `'save_tmp_file'` +> ::: +> +> > Save the MCMC draws into a `_mh_tmp_blck` file at the refresh rate +> > of the status bar instead of just saving the draws when the current +> > `_mh*_blck` file is full. Default: `0` +> +> `'independent_metropolis_hastings'` +> +> > Takes the same options as in the case of +> > `random_walk_metropolis_hastings`. +> +> `'slice'` +> +> `'rotated'` +> +> > Triggers rotated slice iterations using a covariance matrix from +> > initial burn-in iterations. Requires either +> > `use_mh_covariance_matrix` or `slice_initialize_with_mode`. Default: +> > `0`. +> +> `'mode_files'` +> +> > For multimodal posteriors, provide the name of a file containing a +> > `nparam` by `nmodes` variable called `xparams` storing the different +> > modes. This array must have one column vector per mode and the +> > estimated parameters along the row dimension. With this info, the +> > code will automatically trigger the `rotated` and `mode` options. +> > Default: `[]`. +> +> `'slice_initialize_with_mode'` +> +> > The default for slice is to set `mode_compute=0` and start the +> > chain(s) from a random location in the prior space. This option +> > first runs the mode-finder and then starts the chain from the mode. +> > Together with `rotated`, it will use the inverse Hessian from the +> > mode to perform rotated slice iterations. Default: `0`. +> +> `'initial_step_size'` +> +> > Sets the initial size of the interval in the stepping-out procedure +> > as fraction of the prior support, i.e. the size will be +> > `initial_step_size * (UB-LB)`. `initial_step_size` must be a real +> > number in the interval `[0,1]`. Default: `0.8`. +> +> `'use_mh_covariance_matrix'` +> +> > See `use_mh_covariance_matrix `{.interpreted-text +> > role="ref"}. Must be used with `'rotated'`. Default: `0`. +> +> `'save_tmp_file'` +> +> > See `save_tmp_file `{.interpreted-text role="ref"}. +> > Default: `1`. +> +> `'tailored_random_block_metropolis_hastings'` +> +> `'proposal_distribution'` +> +> > Specifies the statistical distribution used for the proposal +> > density. See +> > `proposal_distribution `{.interpreted-text +> > role="ref"}. +> +> `new_block_probability = DOUBLE` +> +> > Specifies the probability of the next parameter belonging to a new +> > block when the random blocking in the TaRB Metropolis-Hastings +> > algorithm is conducted. The higher this number, the smaller is the +> > average block size and the more random blocks are formed during each +> > parameter sweep. Default: `0.25`. +> +> `mode_compute = INTEGER` +> +> > Specifies the mode-finder run in every iteration for every block of +> > the TaRB Metropolis-Hastings algorithm. See +> > `mode_compute > INTEGER | FUNCTION_NAME>`{.interpreted-text role="opt"}. Default: +> > `4`. +> +> `optim = (NAME, VALUE,...)` +> +> > Specifies the options for the mode-finder used in the TaRB +> > Metropolis-Hastings algorithm. See `optim +> > `{.interpreted-text role="opt"}. +> +> `'scale_file'` +> +> > See `scale_file `{.interpreted-text role="ref"}.. +> +> `'save_tmp_file'` +> +> > See `save_tmp_file `{.interpreted-text role="ref"}. +> > Default: `1`. +::: + +::: {.option} +moments\_varendo + +Triggers the computation of the posterior distribution of the +theoretical moments of the endogenous variables. Results are stored in +`oo_.PosteriorTheoreticalMoments` (see +`oo_.PosteriorTheoreticalMoments`{.interpreted-text role="mvar"}). The +number of lags in the autocorrelation function is controlled by the `ar` +option. +::: + +::: {.option} +contemporaneous\_correlation + +See `contemporaneous_correlation`{.interpreted-text role="opt"}. Results +are stored in `oo_.PosteriorTheoreticalMoments`. Note that the `nocorr` +option has no effect. +::: + +::: {.option} +no\_posterior\_kernel\_density + +Shuts off the computation of the kernel density estimator for the +posterior objects (see `density `{.interpreted-text role="ref"} +field). +::: + +::: {.option} +conditional\_variance\_decomposition = INTEGER +conditional\_variance\_decomposition = \[INTEGER1:INTEGER2\] +conditional\_variance\_decomposition = \[INTEGER1 INTEGER2 \...\] + +Computes the posterior distribution of the conditional variance +decomposition for the specified period(s). The periods must be strictly +positive. Conditional variances are given by $var(y_{t+k}\vert t)$. For +period 1, the conditional variance decomposition provides the +decomposition of the effects of shocks upon impact. The results are +stored in +`oo_.PosteriorTheoreticalMoments.dsge.ConditionalVarianceDecomposition`.. +Note that this option requires the option `moments_varendo` to be +specified. In the presence of measurement error, the field will contain +the variance contribution after measurement error has been taken out, +*i.e.* the decomposition will be conducted of the actual as opposed to +the measured variables. The variance decomposition of the measured +variables will be stored in +`oo_.PosteriorTheoreticalMoments.dsge.ConditionalVarianceDecompositionME`. +::: + +::: {.option} +filtered\_vars + +Triggers the computation of the posterior distribution of filtered +endogenous variables/one-step ahead forecasts, i.e. $E_{t}{y_{t+1}}$. +Results are stored in `oo_.FilteredVariables` (see below for a +description of this variable) +::: + +::: {.option} +smoother + +Triggers the computation of the posterior distribution of smoothed +endogenous variables and shocks, i.e. the expected value of variables +and shocks given the information available in all observations up to the +final date ($E_{T}{y_t}$). Results are stored in +`oo_.SmoothedVariables`, `oo_.SmoothedShocks` and +`oo_.SmoothedMeasurementErrors`. Also triggers the computation of +`oo_.UpdatedVariables`, which contains the estimation of the expected +value of variables given the information available at the current date +($E_{t}{y_t}$). See below for a description of all these variables. +::: + +::: {.option} +smoother\_redux + +Triggers a faster computation of the smoothed endogenous variables and +shocks for large models. It runs the smoother only for the state +variables (i.e. with the same representation used for likelihood +computations) and computes the remaining variables ex-post. Static +unobserved objects (filtered, smoothed, updated, k-step ahead) are +recovered, but there are exceptions to a full recovery, depending on how +static unobserved variables depend on the restricted state space +adopted. For example, lagged shocks which are ONLY used to recover +NON-observed static variables will not be recovered). For such +exceptions, only the following output is provided: + +> `FilteredVariablesKStepAhead`: will be fully recovered +> +> `SmoothedVariables`, `FilteredVariables`, `UpdatedVariables`: recovered for all periods beyond period `d+1`, +> +> : where `d` denotes the number of diffuse filtering steps. +> +> `FilteredVariablesKStepAheadVariances`, `Variance`, and +> `State_uncertainty` cannot be recovered, and ZERO is provided as +> output. + +If you need variances for those variables, either do not set the option, +or declare the variable as observed, using NaNs as data points. +::: + +::: {.option} +forecast = INTEGER + +Computes the posterior distribution of a forecast on INTEGER periods +after the end of the sample used in estimation. If no +Metropolis-Hastings is computed, the result is stored in variable +`oo_.forecast` and corresponds to the forecast at the posterior mode. If +a Metropolis-Hastings is computed, the distribution of forecasts is +stored in variables `oo_.PointForecast` and `oo_.MeanForecast`. See +`fore`{.interpreted-text role="ref"}, for a description of these +variables. +::: + +::: {.option} +tex + +See `tex`{.interpreted-text role="opt"}. +::: + +::: {.option} +kalman\_algo = INTEGER + +`0` + +> Automatically use the Multivariate Kalman Filter for stationary models +> and the Multivariate Diffuse Kalman Filter for non-stationary models. + +`1` + +> Use the Multivariate Kalman Filter. + +`2` + +> Use the Univariate Kalman Filter. + +`3` + +> Use the Multivariate Diffuse Kalman Filter. + +`4` + +> Use the Univariate Diffuse Kalman Filter. +::: + +> Default value is `0`. In case of missing observations of single or all +> series, Dynare treats those missing values as unobserved states and +> uses the Kalman filter to infer their value (see e.g. *Durbin and +> Koopman (2012)*, Ch. 4.10) This procedure has the advantage of being +> capable of dealing with observations where the forecast error variance +> matrix becomes singular for some variable(s). If this happens, the +> respective observation enters with a weight of zero in the +> log-likelihood, i.e. this observation for the respective variable(s) +> is dropped from the likelihood computations (for details see *Durbin +> and Koopman (2012)*, Ch. 6.4 and 7.2.5 and *Koopman and Durbin +> (2000)*). If the use of a multivariate Kalman filter is specified and +> a singularity is encountered, Dynare by default automatically switches +> to the univariate Kalman filter for this parameter draw. This behavior +> can be changed via the +> `use_univariate_filters_if_singularity_is_detected +> `{.interpreted-text +> role="opt"} option. + +::: {.option} +fast\_kalman\_filter + +Select the fast Kalman filter using Chandrasekhar recursions as +described by `Herbst (2015)`. This setting is only used with +`kalman_algo=1` or `kalman_algo=3`. In case of using the diffuse Kalman +filter (`kalman_algo=3/lik_init=3`), the observables must be stationary. +This option is not yet compatible with +`analytic_derivation`{.interpreted-text role="opt"}. +::: + +::: {.option} +kalman\_tol = DOUBLE + +Numerical tolerance for determining the singularity of the covariance +matrix of the prediction errors during the Kalman filter (minimum +allowed reciprocal of the matrix condition number). Default value is +`1e-10`. +::: + +::: {.option} +diffuse\_kalman\_tol = DOUBLE + +Numerical tolerance for determining the singularity of the covariance +matrix of the prediction errors ($F_{\infty}$) and the rank of the +covariance matrix of the non-stationary state variables ($P_{\infty}$) +during the Diffuse Kalman filter. Default value is `1e-6`. +::: + +::: {.option} +filter\_covariance + +Saves the series of one step ahead error of forecast covariance +matrices. With Metropolis, they are saved in +`oo_.FilterCovariance`{.interpreted-text role="mvar"}, otherwise in +`oo_.Smoother.Variance`{.interpreted-text role="mvar"}. Saves also +k-step ahead error of forecast covariance matrices if +`filter_step_ahead` is set. +::: + +::: {.option} +filter\_step\_ahead = \[INTEGER1:INTEGER2\] filter\_step\_ahead = +\[INTEGER1 INTEGER2 \...\] + +Triggers the computation k-step ahead filtered values, i.e. +$E_{t}{y_{t+k}}$. Stores results in `oo_.FilteredVariablesKStepAhead`. +Also stores 1-step ahead values in `oo_.FilteredVariables`. +`oo_.FilteredVariablesKStepAheadVariances` is stored if +`filter_covariance`. +::: + +::: {.option} +filter\_decomposition + +Triggers the computation of the shock decomposition of the above k-step +ahead filtered values. Stores results in +`oo_.FilteredVariablesShockDecomposition`. +::: + +::: {.option} +smoothed\_state\_uncertainty + +Triggers the computation of the variance of smoothed estimates, i.e. +$var_T(y_t)$. Stores results in `oo_.Smoother.State_uncertainty`. +::: + +::: {.option} +diffuse\_filter + +Uses the diffuse Kalman filter (as described in *Durbin and Koopman +(2012)* and *Koopman and Durbin (2003)* for the multivariate and +*Koopman and Durbin (2000)* for the univariate filter) to estimate +models with non-stationary observed variables. This option will also +reset the `qz_criterium` to count unit root variables towards the stable +variables. Trying to estimate a model with unit roots will otherwise +result in a Blanchard-Kahn error. + +When `diffuse_filter` is used the `lik_init` option of `estimation` has +no effect. + +When there are nonstationary exogenous variables in a model, there is no +unique deterministic steady state. For instance, if productivity is a +pure random walk: + +> $$a_t = a_{t-1} + e_t$$ + +any value of $\bar a$ of $a$ is a deterministic steady state for +productivity. Consequently, the model admits an infinity of steady +states. In this situation, the user must help Dynare in selecting one +steady state, except if zero is a trivial model's steady state, which +happens when the `linear` option is used in the model declaration. The +user can either provide the steady state to Dynare using a +`steady_state_model` block (or writing a steady state file) if a closed +form solution is available, see `steady_state_model`{.interpreted-text +role="bck"}, or specify some constraints on the steady state, see +`equation_tag_for_conditional_steady_state `{.interpreted-text +role="ref"}, so that Dynare computes the steady state conditionally on +some predefined levels for the non stationary variables. In both cases, +the idea is to use dummy values for the steady state level of the +exogenous non stationary variables. + +Note that the nonstationary variables in the model must be integrated +processes (their first difference or k-difference must be stationary). +::: + + +::: {.option} +selected\_variables\_only + +Only run the classical smoother on the variables listed just after the +`estimation` command. This option is incompatible with requesting +classical frequentist forecasts and will be overridden in this case. +When using Bayesian estimation, the smoother is by default only run on +the declared endogenous variables. Default: run the smoother on all the +declared endogenous variables. +::: + +::: {.option} +cova\_compute = INTEGER + +When `0`, the covariance matrix of estimated parameters is not computed +after the computation of posterior mode (or maximum likelihood). This +increases speed of computation in large models during development, when +this information is not always necessary. Of course, it will break all +successive computations that would require this covariance matrix. +Otherwise, if this option is equal to `1`, the covariance matrix is +computed and stored in variable `hh` of `MODEL_FILENAME_mode.mat`. +Default is `1`. +::: + +::: {.option} +solve\_algo = INTEGER + +See `solve_algo `{.interpreted-text role="ref"}. +::: + +::: {.option} +order = INTEGER + +Order of approximation around the deterministic steady state. When +greater than 1, the likelihood is evaluated with a particle or nonlinear +filter (see *Fernández-Villaverde and Rubio-Ramírez (2005)*). Default is +`1`, i.e. the likelihood of the linearized model is evaluated using a +standard Kalman filter. +::: + +::: {.option} +irf = INTEGER + +See `irf `{.interpreted-text role="opt"}. Only used if +`bayesian_irf`{.interpreted-text role="opt"} is passed. +::: + +::: {.option} +irf\_shocks = ( VARIABLE\_NAME \[\[,\] VARIABLE\_NAME \...\] ) + +See `irf_shocks `{.interpreted-text role="opt"}. Only used if +`bayesian_irf`{.interpreted-text role="opt"} is passed. +::: + +::: {.option} +irf\_plot\_threshold = DOUBLE + +See `irf_plot_threshold `{.interpreted-text role="opt"}. Only used if +`bayesian_irf`{.interpreted-text role="opt"} is passed. +::: + +::: {.option} +aim\_solver + +See `aim_solver`{.interpreted-text role="opt"}. +::: + +::: {.option} +sylvester = OPTION + +See `sylvester `{.interpreted-text role="opt"}. +::: + +::: {.option} +sylvester\_fixed\_point\_tol = DOUBLE + +See `sylvester_fixed_point_tol `{.interpreted-text role="opt"} . +::: + +::: {.option} +lyapunov = OPTION + +Determines the algorithm used to solve the Lyapunov equation to +initialized the variance-covariance matrix of the Kalman filter using +the steady-state value of state variables. Possible values for OPTION +are: + +> `default` +> +> > Uses the default solver for Lyapunov equations based on +> > Bartels-Stewart algorithm. +> +> `fixed_point` +> +> > Uses a fixed point algorithm to solve the Lyapunov equation. This +> > method is faster than the `default` one for large scale models, but +> > it could require a large amount of iterations. +> +> `doubling` +> +> > Uses a doubling algorithm to solve the Lyapunov equation +> > (`disclyap_fast`). This method is faster than the two previous one +> > for large scale models. +> +> `square_root_solver` +> +> > Uses a square-root solver for Lyapunov equations (`dlyapchol`). This +> > method is fast for large scale models (available under MATLAB if the +> > Control System Toolbox is installed; available under Octave if the +> > [control](https://octave.sourceforge.io/control/) package from +> > Octave-Forge is installed) + +Default value is `default`. +::: + +::: {.option} +lyapunov\_fixed\_point\_tol = DOUBLE + +This is the convergence criterion used in the fixed point Lyapunov +solver. Its default value is `1e-10`. +::: + +::: {.option} +lyapunov\_doubling\_tol = DOUBLE + +This is the convergence criterion used in the doubling algorithm to +solve the Lyapunov equation. Its default value is `1e-16`. +::: + +::: {.option} +use\_penalized\_objective\_for\_hessian + +Use the penalized objective instead of the objective function to compute +numerically the hessian matrix at the mode. The penalties decrease the +value of the posterior density (or likelihood) when, for some +perturbations, Dynare is not able to solve the model (issues with steady +state existence, Blanchard and Kahn conditions, \...). In pratice, the +penalized and original objectives will only differ if the posterior mode +is found to be near a region where the model is ill-behaved. By default +the original objective function is used. +::: + +::: {.option} +analytic\_derivation + +Triggers estimation with analytic gradient at `order=1`. The final +hessian at the mode is also computed analytically. Only works for +stationary models without missing observations, i.e. for +`kalman_algo<3`. Optimizers that rely on analytic gradients are +`mode_compute=1,3,4,5,101`. +::: + +::: {.option} +ar = INTEGER + +See `ar `{.interpreted-text role="opt"}. Only useful in +conjunction with option `moments_varendo`. +::: + +::: {.option} +endogenous\_prior + +Use endogenous priors as in *Christiano, Trabandt and Walentin (2011)*. +The procedure is motivated by sequential Bayesian learning. Starting +from independent initial priors on the parameters, specified in the +`estimated_params` block, the standard deviations observed in a +\"pre-sample\", taken to be the actual sample, are used to update the +initial priors. Thus, the product of the initial priors and the +pre-sample likelihood of the standard deviations of the observables is +used as the new prior (for more information, see the technical appendix +of *Christiano, Trabandt and Walentin (2011)*). This procedure helps in +cases where the regular posterior estimates, which minimize in-sample +forecast errors, result in a large overprediction of model variable +variances (a statistic that is not explicitly targeted, but often of +particular interest to researchers). +::: + +::: {.option} +use\_univariate\_filters\_if\_singularity\_is\_detected = INTEGER + +Decide whether Dynare should automatically switch to univariate filter +if a singularity is encountered in the likelihood computation (this is +the behaviour if the option is equal to `1`). Alternatively, if the +option is equal to `0`, Dynare will not automatically change the filter, +but rather use a penalty value for the likelihood when such a +singularity is encountered. Default: `1`. +::: + +::: {.option} +keep\_kalman\_algo\_if\_singularity\_is\_detected + +With the default `use_univariate_filters_if_singularity_is_detected=1 +`{.interpreted-text +role="opt"}, Dynare will switch to the univariate Kalman filter when it +encounters a singular forecast error variance matrix during Kalman +filtering. Upon encountering such a singularity for the first time, all +subsequent parameter draws and computations will automatically rely on +univariate filter, i.e. Dynare will never try the multivariate filter +again. Use the `keep_kalman_algo_if_singularity_is_detected` option to +have the `use_univariate_filters_if_singularity_is_detected` only affect +the behavior for the current draw/computation. +::: + +::: {.option} +rescale\_prediction\_error\_covariance + +Rescales the prediction error covariance in the Kalman filter to avoid +badly scaled matrix and reduce the probability of a switch to univariate +Kalman filters (which are slower). By default no rescaling is done. +::: + +::: {.option} +qz\_zero\_threshold = DOUBLE + +See `qz_zero_threshold `{.interpreted-text +role="opt"}. +::: + +::: {.option} +taper\_steps = \[INTEGER1 INTEGER2 \...\] + +Percent tapering used for the spectral window in the *Geweke +(1992,1999)* convergence diagnostics (requires +`mh_nblocks=1 `{.interpreted-text role="opt"}). +The tapering is used to take the serial correlation of the posterior +draws into account. Default: `[4 8 15]`. +::: + +::: {.option} +geweke\_interval = \[DOUBLE DOUBLE\] + +Percentage of MCMC draws at the beginning and end of the MCMC chain +taken to compute the *Geweke (1992,1999)* convergence diagnostics +(requires `mh_nblocks=1 `{.interpreted-text role="opt"}) after discarding the first +`mh_drop = DOUBLE +`{.interpreted-text role="opt"} percent of draws as a burnin. +Default: \[0.2 0.5\]. +::: + +::: {.option} +raftery\_lewis\_diagnostics + +Triggers the computation of the *Raftery and Lewis (1992)* convergence +diagnostics. The goal is deliver the number of draws required to +estimate a particular quantile of the CDF `q` with precision `r` with a +probability `s`. Typically, one wants to estimate the `q=0.025` +percentile (corresponding to a 95 percent HPDI) with a precision of 0.5 +percent (`r=0.005`) with 95 percent certainty (`s=0.95`). The defaults +can be changed via `raftery_lewis_qrs +`{.interpreted-text +role="opt"}. Based on the theory of first order Markov Chains, the +diagnostics will provide a required burn-in (`M`), the number of draws +after the burnin (`N`) as well as a thinning factor that would deliver a +first order chain (`k`). The last line of the table will also deliver +the maximum over all parameters for the respective values. +::: + +::: {.option} +raftery\_lewis\_qrs = \[DOUBLE DOUBLE DOUBLE\] + +Sets the quantile of the CDF `q` that is estimated with precision `r` +with a probability `s` in the *Raftery and Lewis (1992)* convergence +diagnostics. Default: `[0.025 0.005 0.95]`. +::: + +::: {.option} +consider\_all\_endogenous + +Compute the posterior moments, smoothed variables, k-step ahead filtered +variables and forecasts (when requested) on all the endogenous +variables. This is equivalent to manually listing all the endogenous +variables after the `estimation` command. +::: + +::: {.option} +consider\_all\_endogenous\_and\_auxiliary + +Compute the posterior moments, smoothed variables, k-step ahead filtered +variables and forecasts (when requested) on all the endogenous variables +and the auxiliary variables introduced by the preprocessor. This option +is useful when e.g. running `smoother2histval` on the results of the +Kalman smoother. +::: + +::: {.option} +consider\_only\_observed + +Compute the posterior moments, smoothed variables, k-step ahead filtered +variables and forecasts (when requested) on all the observed variables. +This is equivalent to manually listing all the observed variables after +the `estimation` command. +::: + + +*"Endogenous" prior restrictions* + +It is also possible to impose implicit "endogenous" priors about IRFs +and moments on the model during estimation. For example, one can specify +that all valid parameter draws for the model must generate fiscal +multipliers that are bigger than 1 by specifying how the IRF to a +government spending shock must look like. The prior restrictions can be +imposed via `irf_calibration` and `moment_calibration` blocks (see +`irf-momcal`{.interpreted-text role="ref"}). The way it works internally +is that any parameter draw that is inconsistent with the "calibration" +provided in these blocks is discarded, i.e. assigned a prior density of +0. When specifying these blocks, it is important to keep in mind that +one won't be able to easily do `model_comparison` in this case, because +the prior density will not integrate to 1. + +*Output* + +After running estimation, the parameters `M_.params` and the variance +matrix `M_.Sigma_e` of the shocks are set to the mode for maximum +likelihood estimation or posterior mode computation without Metropolis +iterations. After estimation with Metropolis iterations (option +`mh_replic > 0` or option `load_mh_file` set) the parameters `M_.params` +and the variance matrix `M_.Sigma_e` of the shocks are set to the +posterior mean. + +Depending on the options, `estimation` stores results in various fields +of the `oo_` structure, described below. In the following variables, we +will adopt the following shortcuts for specific field names: + +> `MOMENT_NAME` +> +> > This field can take the following values: +> > +> > `HPDinf` +> > +> > > Lower bound of a 90% HPD interval.[^4] +> > +> > `HPDsup` +> > +> > > Upper bound of a 90% HPD interval. +> > +> > `HPDinf_ME` +> > +> > > Lower bound of a 90% HPD interval[^5] for observables when taking +> > > measurement error into account (see e.g. *Christoffel et al. +> > > (2010*), p.17). +> > +> > `HPDsup_ME` +> > +> > > Upper bound of a 90% HPD interval for observables when taking +> > > measurement error into account. +> > +> > `Mean` +> > +> > > Mean of the posterior distribution. +> > +> > `Median` +> > +> > > Median of the posterior distribution. +> > +> > `Std` +> > +> > > Standard deviation of the posterior distribution. +> > +> > `Variance` +> > +> > > Variance of the posterior distribution. +> > +> > `deciles` +> > +> > > Deciles of the distribution. +> > +> > ::: {#dens} +> > `density` +> > ::: +> > +> > > Non parametric estimate of the posterior density following the +> > > approach outlined in *Skoeld and Roberts (2003)*. First and second +> > > columns are respectively abscissa and ordinate coordinates. +> +> `ESTIMATED_OBJECT` +> +> > This field can take the following values: +> > +> > `measurement_errors_corr` +> > +> > > Correlation between two measurement errors. +> > +> > `measurement_errors_std` +> > +> > > Standard deviation of measurement errors. +> > +> > `parameters` +> > +> > > Parameters. +> > +> > `shocks_corr` +> > +> > > Correlation between two structural shocks. +> > +> > `shocks_std` +> > +> > > Standard deviation of structural shocks. + +::: {.matvar} +[oo]().MarginalDensity.LaplaceApproximation + +Variable set by the `estimation` command. Stores the marginal data +density based on the Laplace Approximation. +::: + +::: {.matvar} +[oo]().MarginalDensity.ModifiedHarmonicMean + +Variable set by the `estimation command`, if it is used with +`mh_replic > 0` or `load_mh_file` option. Stores the marginal data +density based on *Geweke (1999)* Modified Harmonic Mean estimator. +::: + +::: {.matvar} +[oo]().posterior.optimization + +Variable set by the `estimation` command if mode-finding is used. Stores +the results at the mode. Fields are of the form: + + oo_.posterior.optimization.OBJECT + +where OBJECT is one of the following: + +> `mode` +> +> > Parameter vector at the mode. +> +> `Variance` +> +> > Inverse Hessian matrix at the mode or MCMC jumping covariance matrix +> > when used with the `MCMC_jumping_covariance > = OPTION>`{.interpreted-text role="opt"} option. +> +> `log_density` +> +> > Log likelihood (ML)/log posterior density (Bayesian) at the mode +> > when used with `mode_compute>0`. +::: + +::: {.matvar} +[oo]().posterior.metropolis + +Variable set by the `estimation` command if `mh_replic>0` is used. +Fields are of the form: + + oo_.posterior.metropolis.OBJECT + +where OBJECT is one of the following: + +> `mean` +> +> > Mean parameter vector from the MCMC. +> +> `Variance` +> +> > Covariance matrix of the parameter draws in the MCMC. +::: + +::: {.matvar} +[oo]().FilteredVariables + +Variable set by the `estimation` command, if it is used with the +`filtered_vars` option. + +After an estimation without Metropolis, fields are of the form: + + oo_.FilteredVariables.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.FilteredVariables.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().FilteredVariablesKStepAhead + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead` option. The k-steps are stored along the rows while +the columns indicate the respective variables. The third dimension of +the array provides the observation for which the forecast has been made. +For example, if `filter_step_ahead=[1 2 4]` and `nobs=200`, the element +(3,5,204) stores the four period ahead filtered value of variable 5 +computed at time t=200 for time t=204. The periods at the beginning and +end of the sample for which no forecasts can be made, e.g. entries +(1,5,1) and (1,5,204) in the example, are set to zero. Note that in case +of Bayesian estimation the variables will be ordered in the order of +declaration after the estimation command (or in general declaration +order if no variables are specified here). In case of running the +classical smoother, the variables will always be ordered in general +declaration order. If the `selected_variables_only`{.interpreted-text +role="opt"} option is specified with the classical smoother, +non-requested variables will be simply left out in this order. +::: + +::: {.matvar} +[oo]().FilteredVariablesKStepAheadVariances + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead option`. It is a 4 dimensional array where the +k-steps are stored along the first dimension, while the fourth dimension +of the array provides the observation for which the forecast has been +made. The second and third dimension provide the respective variables. +For example, if `filter_step_ahead=[1 2 4]` and `nobs=200`, the element +(3,4,5,204) stores the four period ahead forecast error covariance +between variable 4 and variable 5, computed at time t=200 for time +t=204. Padding with zeros and variable ordering is analogous to +`oo_.FilteredVariablesKStepAhead`. +::: + +::: {.matvar} +[oo]().Filtered\_Variables\_X\_step\_ahead + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead option` in the context of Bayesian estimation. Fields +are of the form: + + oo_.Filtered_Variables_X_step_ahead.VARIABLE_NAME + +The n-th entry stores the k-step ahead filtered variable computed at +time n for time n+k. +::: + +::: {.matvar} +[oo]().FilteredVariablesShockDecomposition + +Variable set by the `estimation` command, if it is used with the +`filter_step_ahead` option. The k-steps are stored along the rows while +the columns indicate the respective variables. The third dimension +corresponds to the shocks in declaration order. The fourth dimension of +the array provides the observation for which the forecast has been made. +For example, if `filter_step_ahead=[1 2 4]` and `nobs=200`, the element +(3,5,2,204) stores the contribution of the second shock to the four +period ahead filtered value of variable 5 (in deviations from the mean) +computed at time t=200 for time t=204. The periods at the beginning and +end of the sample for which no forecasts can be made, e.g. entries +(1,5,1) and (1,5,204) in the example, are set to zero. Padding with +zeros and variable ordering is analogous to +`oo_.FilteredVariablesKStepAhead`. +::: + +::: {.matvar} +[oo]().PosteriorIRF.dsge + +Variable set by the `estimation` command, if it is used with the +`bayesian_irf` option. Fields are of the form: + + oo_.PosteriorIRF.dsge.MOMENT_NAME.VARIABLE_NAME_SHOCK_NAME +::: + +::: {.matvar} +[oo]().SmoothedMeasurementErrors + +Variable set by the `estimation` command, if it is used with the +`smoother` option. Fields are of the form: + + oo_.SmoothedMeasurementErrors.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().SmoothedShocks + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. + +After an estimation without Metropolis, or if computed by +`calib_smoother`, fields are of the form: + + oo_.SmoothedShocks.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.SmoothedShocks.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().SmoothedVariables + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. + +After an estimation without Metropolis, or if computed by +`calib_smoother`, fields are of the form: + + oo_.SmoothedVariables.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.SmoothedVariables.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matcomm} +get\_smooth (\'VARIABLE\_NAME\' \[, \'VARIABLE\_NAME\'\]\...); + +Returns the smoothed values of the given endogenous or exogenous +variable(s), as they are stored in the `oo_.SmoothedVariables` and +`oo_.SmoothedShocks` variables. +::: + +::: {.matvar} +[oo]().UpdatedVariables + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. Contains the estimation of +the expected value of variables given the information available at the +current date. + +After an estimation without Metropolis, or if computed by +`calib_smoother`, fields are of the form: + + oo_.UpdatedVariables.VARIABLE_NAME + +After an estimation with Metropolis, fields are of the form: + + oo_.UpdatedVariables.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matcomm} +get\_update (\'VARIABLE\_NAME\' \[, \'VARIABLE\_NAME\'\]\...); + +Returns the updated values of the given variable(s), as they are stored +in the `oo_.UpdatedVariables` variable. +::: + +::: {.matvar} +[oo]().FilterCovariance + +Three-dimensional array set by the `estimation` command if used with the +`smoother` and Metropolis, if the `filter_covariance` option has been +requested. Contains the series of one-step ahead forecast error +covariance matrices from the Kalman smoother. The `M_.endo_nbr` times +`M_.endo_nbr` times `T+1` array contains the variables in declaration +order along the first two dimensions. The third dimension of the array +provides the observation for which the forecast has been made. Fields +are of the form: + + oo_.FilterCovariance.MOMENT_NAME + +Note that density estimation is not supported. +::: + +::: {.matvar} +[oo]().Smoother.Variance + +Three-dimensional array set by the `estimation` command (if used with +the `smoother`) without Metropolis, or by the `calib_smoother` command, +if the `filter_covariance` option has been requested. Contains the +series of one-step ahead forecast error covariance matrices from the +Kalman smoother. The `M_.endo_nbr` times `M_.endo_nbr` times `T+1` array +contains the variables in declaration order along the first two +dimensions. The third dimension of the array provides the observation +for which the forecast has been made. +::: + +::: {.matvar} +[oo]().Smoother.State\_uncertainty + +Three-dimensional array set by the `estimation` command (if used with +the `smoother` option) without Metropolis, or by the `calib_smoother` +command, if the `smoothed_state_uncertainty` option has been requested. +Contains the series of covariance matrices for the state estimate given +the full data from the Kalman smoother. The `M_.endo_nbr` times +`M_.endo_nbr` times `T` array contains the variables in declaration +order along the first two dimensions. The third dimension of the array +provides the observation for which the smoothed estimate has been made. +::: + +::: {.matvar} +[oo]().Smoother.SteadyState + +Variable set by the `estimation` command (if used with the `smoother`) +without Metropolis, or by the `calib_smoother` command. Contains the +steady state component of the endogenous variables used in the smoother +in order of variable declaration. +::: + +::: {.matvar} +[oo]().Smoother.TrendCoeffs + +Variable set by the `estimation` command (if used with the `smoother`) +without Metropolis, or by the `calib_smoother` command. Contains the +trend coefficients of the observed variables used in the smoother in +order of declaration of the observed variables. +::: + +::: {.matvar} +[oo]().Smoother.Trend + +Variable set by the `estimation command` (if used with the `smoother` +option), or by the `calib_smoother` command. Contains the trend +component of the variables used in the smoother. + +Fields are of the form: + + oo_.Smoother.Trend.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().Smoother.Constant + +Variable set by the `estimation` command (if used with the `smoother` +option), or by the `calib_smoother` command. Contains the constant part +of the endogenous variables used in the smoother, accounting e.g. for +the data mean when using the prefilter option. + +Fields are of the form: + + oo_.Smoother.Constant.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().Smoother.loglinear + +Indicator keeping track of whether the smoother was run with the +`loglinear `{.interpreted-text role="ref"} option and thus whether +stored smoothed objects are in logs. +::: + +::: {.matvar} +[oo]().PosteriorTheoreticalMoments + +Variable set by the `estimation` command, if it is used with the +`moments_varendo` option. Fields are of the form: + + oo_.PosteriorTheoreticalMoments.dsge.THEORETICAL_MOMENT.ESTIMATED_OBJECT.MOMENT_NAME.VARIABLE_NAME + +where *THEORETICAL\_MOMENT* is one of the following: + +> `covariance` +> +> > Variance-covariance of endogenous variables. +> +> `contemporaneous_correlation` +> +> > Contemporaneous correlation of endogenous variables when the +> > `contemporaneous_correlation`{.interpreted-text role="opt"} option +> > is specified. +> +> `correlation` +> +> > Auto- and cross-correlation of endogenous variables. Fields are +> > vectors with correlations from 1 up to order `options_.ar`. +> +> ::: {#VarianceDecomposition} +> `VarianceDecomposition` +> ::: +> +> > Decomposition of variance (unconditional variance, i.e. at horizon +> > infinity).[^6] +> +> `VarianceDecompositionME` +> +> > Same as [VarianceDecomposition](), but contains the decomposition of +> > the measured as opposed to the actual variable. The joint +> > contribution of the measurement error will be saved in a field named +> > `ME`. +> +> ::: {#ConditionalVarianceDecomposition} +> `ConditionalVarianceDecomposition` +> ::: +> +> > Only if the `conditional_variance_decomposition` option has been +> > specified. In the presence of measurement error, the field will +> > contain the variance contribution after measurement error has been +> > taken out, i.e. the decomposition will be conducted of the actual as +> > opposed to the measured variables. +> +> `ConditionalVarianceDecompositionME` +> +> > Only if the `conditional_variance_decomposition` option has been +> > specified. Same as [ConditionalVarianceDecomposition](), but +> > contains the decomposition of the measured as opposed to the actual +> > variable. The joint contribution of the measurement error will be +> > saved in a field names `ME`. +::: + +::: {.matvar} +[oo]().posterior\_density + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_density.PARAMETER_NAME +::: + +::: {.matvar} +[oo]().posterior\_hpdinf + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_hpdinf.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_hpdsup + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_hpdsup.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_mean + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_mean.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_mode + +Variable set by the `estimation` command during mode-finding. Fields are +of the form: + + oo_.posterior_mode.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_std\_at\_mode + +Variable set by the `estimation` command during mode-finding. It is +based on the inverse Hessian at `oo_.posterior_mode`. Fields are of the +form: + + oo_.posterior_std_at_mode.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_std + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_std.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_var + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_var.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().posterior\_median + +Variable set by the `estimation` command, if it is used with +`mh_replic > 0` or `load_mh_file` option. Fields are of the form: + + oo_.posterior_median.ESTIMATED_OBJECT.VARIABLE_NAME +::: + +*Example* + +Here are some examples of generated variables: + + oo_.posterior_mode.parameters.alp + oo_.posterior_mean.shocks_std.ex + oo_.posterior_hpdsup.measurement_errors_corr.gdp_conso + +::: {.matvar} +[oo]().dsge\_var.posterior\_mode + +Structure set by the `dsge_var` option of the `estimation` command after +mode\_compute. + +The following fields are saved: + +> `PHI_tilde` +> +> > Stacked posterior DSGE-BVAR autoregressive matrices at the mode +> > (equation (28) of *Del Negro and Schorfheide (2004)*). +> +> `SIGMA_u_tilde` +> +> > Posterior covariance matrix of the DSGE-BVAR at the mode (equation +> > (29) of *Del Negro and Schorfheide (2004)*). +> +> `iXX` +> +> > Posterior population moments in the DSGE-BVAR at the mode ( +> > $inv(\lambda T \Gamma_{XX}^*+ X'X)$). +> +> `prior` +> +> > Structure storing the DSGE-BVAR prior. +> +> `PHI_star` +> +> > Stacked prior DSGE-BVAR autoregressive matrices at the mode +> > (equation (22) of *Del Negro and Schorfheide (2004)*). +> +> `SIGMA_star` +> +> > Prior covariance matrix of the DSGE-BVAR at the mode (equation (23) +> > of *Del Negro and Schorfheide (2004)*). +> +> `ArtificialSampleSize` +> +> > Size of the artifical prior sample ( $inv(\lambda T)$). +> +> `DF` +> +> > Prior degrees of freedom ( $inv(\lambda T-k-n)$). +> +> `iGXX_star` +> +> > Inverse of the theoretical prior "covariance" between X and X +> > ($\Gamma_{xx}^*$ in *Del Negro and Schorfheide (2004)*). +::: + +::: {.matvar} +[oo]().RecursiveForecast + +Variable set by the `forecast` option of the `estimation` command when +used with the nobs = \[INTEGER1:INTEGER2\] option (see +`nobs `{.interpreted-text role="opt"}). + +Fields are of the form: + + oo_.RecursiveForecast.FORECAST_OBJECT.VARIABLE_NAME + +where `FORECAST_OBJECT` is one of the following[^7] : + +`Mean` + +> Mean of the posterior forecast distribution. + +`HPDinf/HPDsup` + +> Upper/lower bound of the 90% HPD interval taking into account only +> parameter uncertainty (corresponding to +> `oo_.MeanForecast`{.interpreted-text role="mvar"}). + +`HPDTotalinf/HPDTotalsup`. + +> Upper/lower bound of the 90% HPD interval taking into account both +> parameter and future shock uncertainty (corresponding to +> `oo_.PointForecast`{.interpreted-text role="mvar"}) + +`VARIABLE_NAME` contains a matrix of the following size: number of time +periods for which forecasts are requested using the +`nobs = [INTEGER1:INTEGER2]` option times the number of forecast +horizons requested by the forecast option. i.e., the row indicates the +period at which the forecast is performed and the column the respective +k-step ahead forecast. The starting periods are sorted in ascending +order, not in declaration order. +::: + +::: {.matvar} +[oo]().convergence.geweke + +Variable set by the convergence diagnostics of the `estimation` command +when used with `mh_nblocks=1` option (see +`mh_nblocks `{.interpreted-text role="opt"}). + +Fields are of the form: + + oo_.convergence.geweke.VARIABLE_NAME.DIAGNOSTIC_OBJECT + +where *DIAGNOSTIC\_OBJECT* is one of the following: + +`posteriormean` + +> Mean of the posterior parameter distribution. + +`posteriorstd` + +> Standard deviation of the posterior parameter distribution. + +`nse_iid` + +> Numerical standard error (NSE) under the assumption of iid draws. + +`rne_iid` + +> Relative numerical efficiency (RNE) under the assumption of iid draws. + +`nse_x` + +> Numerical standard error (NSE) when using an x% taper. + +`rne_x` + +> Relative numerical efficiency (RNE) when using an x% taper. + +`pooled_mean` + +> Mean of the parameter when pooling the beginning and end parts of the +> chain specified in `geweke_interval +> `{.interpreted-text role="opt"} and +> weighting them with their relative precision. It is a vector +> containing the results under the iid assumption followed by the ones +> using the `taper_steps` option (see `taper_steps = [INTEGER1 INTEGER2 ...]>`{.interpreted-text role="opt"}). + +`pooled_nse` + +> NSE of the parameter when pooling the beginning and end parts of the +> chain and weighting them with their relative precision. See +> `pooled_mean`. + +`prob_chi2_test` + +> p-value of a chi-squared test for equality of means in the beginning +> and the end of the MCMC chain. See `pooled_mean`. A value above 0.05 +> indicates that the null hypothesis of equal means and thus convergence +> cannot be rejected at the 5 percent level. Differing values along the +> `taper_steps` signal the presence of significant autocorrelation in +> draws. In this case, the estimates using a higher tapering are usually +> more reliable. +::: +::: +::: + +::: {.command} +unit\_root\_vars VARIABLE\_NAME\...; + +This command is deprecated. Use `estimation` option `diffuse_filter` +instead for estimating a model with non-stationary observed variables or +`steady` option `nocheck` to prevent `steady` to check the steady state +returned by your steady state file. +::: + +Dynare also has the ability to estimate Bayesian VARs: + +::: {.command} +bvar\_density ; + +Computes the marginal density of an estimated BVAR model, using +Minnesota priors. + +See `bvar-a-la-sims.pdf`, which comes with Dynare distribution, for more +information on this command. +::: + + +Shock Decomposition +------------------- + +::: {.command} +shock\_decomposition \[VARIABLE\_NAME\]\...; shock\_decomposition +(OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command computes the historical shock decomposition for a given +sample based on the Kalman smoother, i.e. it decomposes the historical +deviations of the endogenous variables from their respective steady +state values into the contribution coming from the various shocks. The +`variable_names` provided govern for which variables the decomposition +is plotted. + +Note that this command must come after either `estimation` (in case of +an estimated model) or `stoch_simul` (in case of a calibrated model). + +*Options* + +::: {.option} +parameter\_set = OPTION + +Specify the parameter set to use for running the smoother. Possible +values for OPTION are: + +> - `calibration` +> - `prior_mode` +> - `prior_mean` +> - `posterior_mode` +> - `posterior_mean` +> - `posterior_median` +> - `mle_mode` + +Note that the parameter set used in subsequent commands like +`stoch_simul` will be set to the specified `parameter_set`. Default +value: `posterior_mean` if Metropolis has been run, `mle_mode` if MLE +has been run. +::: + +::: {.option} +datafile = FILENAME + +See `datafile `{.interpreted-text role="ref"}. Useful when +computing the shock decomposition on a calibrated model. +::: + +::: {.option} +first\_obs = INTEGER + +See `first_obs `{.interpreted-text role="opt"}. +::: + +::: {.option} +nobs = INTEGER + +See `nobs `{.interpreted-text role="opt"}. +::: + +::: {.option} +prefilter = INTEGER + +See `prefilter `{.interpreted-text role="opt"}. +::: + +::: {.option} +loglinear + +See `loglinear `{.interpreted-text role="opt"}. +::: + +::: {.option} +diffuse\_kalman\_tol = DOUBLE + +See `diffuse_kalman_tol `{.interpreted-text +role="opt"}. +::: + +::: {.option} +diffuse\_filter + +See `diffuse_filter `{.interpreted-text role="opt"}. +::: + +::: {.option} +xls\_sheet = QUOTED\_STRING + +See `xls_sheet `{.interpreted-text +role="opt"}. +::: + +::: {.option} +xls\_range = RANGE + +See `xls_range `{.interpreted-text role="opt"}. +::: + +::: {.option} +use\_shock\_groups \[= NAME\] + +Uses shock grouping defined by the string instead of individual shocks +in the decomposition. The groups of shocks are defined in the +`shock_groups`{.interpreted-text role="bck"} block. If no group name is +given, `default` is assumed. +::: + +::: {.option} +colormap = VARIABLE\_NAME + +Controls the `colormap` used for the shocks decomposition graphs. +VARIABLE\_NAME must be the name of a MATLAB/Octave variable that has +been declared beforehand and whose value will be passed to the +MATLAB/Octave `colormap` function (see the MATLAB/Octave manual for the +list of acceptable values). +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. Suppresses the display and +creation only within the `shock_decomposition` command, but does not +affect other commands. See `plot_shock_decomposition`{.interpreted-text +role="comm"} for plotting graphs. +::: + +::: {.option} +init\_state = BOOLEAN + +If equal to 0, the shock decomposition is computed conditional on the +smoothed state variables in period `0`, i.e. the smoothed shocks +starting in period 1 are used. If equal to `1`, the shock decomposition +is computed conditional on the smoothed state variables in period 1. +Default: `0`. +::: + +::: {.option} +with\_epilogue + +If set, then also compute the decomposition for variables declared in +the `epilogue` block (see `epilogue`{.interpreted-text role="ref"}). +::: + +*Output* + +::: {.matvar} +[oo]().shock\_decomposition + +The results are stored in the field `oo_.shock_decomposition`, which is +a three dimensional array. The first dimension contains the +`M_.endo_nbr` endogenous variables. The second dimension stores in the +first `M_.exo_nbr` columns the contribution of the respective shocks. +Column `M_.exo_nbr+1` stores the contribution of the initial conditions, +while column `M_.exo_nbr+2` stores the smoothed value of the respective +endogenous variable in deviations from their steady state, i.e. the mean +and trends are subtracted. The third dimension stores the time periods. +Both the variables and shocks are stored in the order of declaration, +i.e. `M_.endo_names` and `M_.exo_names`, respectively. +::: +::: + +::: {.block} +shock\_groups ; shock\_groups(OPTIONS\...); + +Shocks can be regrouped for the purpose of shock decomposition. The +composition of the shock groups is written in a block delimited by +`shock_groups` and `end`. + +Each line defines a group of shocks as a list of exogenous variables: + + SHOCK_GROUP_NAME = VARIABLE_1 [[,] VARIABLE_2 [,]...]; + 'SHOCK GROUP NAME' = VARIABLE_1 [[,] VARIABLE_2 [,]...]; + +*Options* + +::: {.option} +name = NAME + +Specifies a name for the following definition of shock groups. It is +possible to use several `shock_groups` blocks in a model file, each +grouping being identified by a different name. This name must in turn be +used in the `shock_decomposition` command. If no name is given, +`default` is used. +::: + +*Example* + +> varexo e_a, e_b, e_c, e_d; +> ... +> +> shock_groups(name=group1); +> supply = e_a, e_b; +> 'aggregate demand' = e_c, e_d; +> end; +> +> shock_decomposition(use_shock_groups=group1); +> +> This example defines a shock grouping with the name `group1`, +> containing a set of supply and demand shocks and conducts the shock +> decomposition for these two groups. +::: + +::: {.command} +realtime\_shock\_decomposition \[VARIABLE\_NAME\]\...; +realtime\_shock\_decomposition (OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command computes the realtime historical shock decomposition for a +given sample based on the Kalman smoother. For each period +$T=[\texttt{presample},\ldots,\texttt{nobs}]$, it recursively computes +three objects: + +> - Real-time historical shock decomposition $Y(t\vert T)$ for +> $t=[1,\ldots,T]$, i.e. without observing data in +> $[T+1,\ldots,\texttt{nobs}]$. This results in a standard shock +> decomposition being computed for each additional datapoint +> becoming available after `presample`. +> - Forecast shock decomposition $Y(T+k\vert T)$ for +> $k=[1,\ldots,forecast]$, i.e. the $k$-step ahead forecast made for +> every $T$ is decomposed in its shock contributions. +> - Real-time conditional shock decomposition of the difference +> between the real-time historical shock decomposition and the +> forecast shock decomposition. If `vintage INTEGER>`{.interpreted-text role="opt"} is equal to `0`, it +> computes the effect of shocks realizing in period $T$, i.e. +> decomposes $Y(T\vert T)-Y(T\vert T-1)$. Put differently, it +> conducts a $1$-period ahead shock decomposition from $T-1$ to $T$, +> by decomposing the update step of the Kalman filter. If +> `vintage>0` and smaller than `nobs`, the decomposition is +> conducted of the forecast revision +> $Y(T+k\vert T+k)-Y(T+k\vert T)$. + +Like `shock_decomposition`{.interpreted-text role="comm"} it decomposes +the historical deviations of the endogenous variables from their +respective steady state values into the contribution coming from the +various shocks. The `variable_names` provided govern for which variables +the decomposition is plotted. + +Note that this command must come after either `estimation` (in case of +an estimated model) or `stoch_simul` (in case of a calibrated model). + +*Options* + +::: {.option} +parameter\_set = OPTION + +See `parameter_set `{.interpreted-text +role="opt"} for possible values. +::: + +::: {.option} +datafile = FILENAME + +See `datafile `{.interpreted-text role="ref"}. +::: + +::: {.option} +first\_obs = INTEGER + +See `first_obs `{.interpreted-text role="opt"}. +::: + +::: {.option} +nobs = INTEGER + +See `nobs `{.interpreted-text role="opt"}. +::: + +::: {.option} +use\_shock\_groups \[= NAME\] + +See `use_shock_groups `{.interpreted-text +role="opt"}. +::: + +::: {.option} +colormap = VARIABLE\_NAME + +See `colormap `{.interpreted-text role="opt"}. +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. Only shock decompositions +are computed and stored in `oo_.realtime_shock_decomposition`, +`oo_.conditional_shock_decomposition` and +`oo_.realtime_forecast_shock_decomposition` but no plot is made (See +`plot_shock_decomposition`{.interpreted-text role="comm"}). +::: + +::: {.option} +presample = INTEGER + +Data point above which recursive realtime shock decompositions are +computed, *i.e.* for $T=[\texttt{presample+1} \ldots \texttt{nobs}]$. +::: + +::: {.option} +forecast = INTEGER + +Compute shock decompositions up to $T+k$ periods, i.e. get shock +contributions to k-step ahead forecasts. +::: + +::: {.option} +save\_realtime = INTEGER\_VECTOR + +Choose for which vintages to save the full realtime shock decomposition. +Default: `0`. +::: + +::: {.option} +fast\_realtime = INTEGER fast\_realtime = \[INTEGER1:INTEGER2\] +fast\_realtime = \[INTEGER1 INTEGER2 \...\] + +Runs the smoother only for the data vintages provided by the specified +integer (vector). +::: + +::: {.option} +with\_epilogue + +See `with_epilogue`{.interpreted-text role="opt"}. +::: + +*Output* + +::: {.matvar} +[oo]().realtime\_shock\_decomposition + +Structure storing the results of realtime historical decompositions. +Fields are three-dimensional arrays with the first two dimension equal +to the ones of `oo_.shock_decomposition`{.interpreted-text role="mvar"}. +The third dimension stores the time periods and is therefore of size +`T+forecast`. Fields are of the form: + + oo_.realtime_shock_decomposition.OBJECT + +where OBJECT is one of the following: + +> `pool` +> +> > Stores the pooled decomposition, i.e. for every real-time shock +> > decomposition terminal period +> > $T=[\texttt{presample},\ldots,\texttt{nobs}]$ it collects the last +> > period's decomposition $Y(T\vert T)$ (see also +> > `plot_shock_decomposition`{.interpreted-text role="comm"}). The +> > third dimension of the array will have size `nobs+forecast`. +> +> `time_*` +> +> > Stores the vintages of realtime historical shock decompositions if +> > `save_realtime` is used. For example, if `save_realtime=[5]` and +> > `forecast=8`, the third dimension will be of size `13`. +::: + +::: {.matvar} +[oo]().realtime\_conditional\_shock\_decomposition + +Structure storing the results of real-time conditional decompositions. +Fields are of the form: + + oo_.realtime_conditional_shock_decomposition.OBJECT + +where OBJECT is one of the following: + +> `pool` +> +> > Stores the pooled real-time conditional shock decomposition, i.e. +> > collects the decompositions of $Y(T\vert T)-Y(T\vert T-1)$ for the +> > terminal periods $T=[\texttt{presample},\ldots,\texttt{nobs}]$. The +> > third dimension is of size `nobs`. +> +> `time_*` +> +> > Store the vintages of $k$-step conditional forecast shock +> > decompositions $Y(t\vert T+k)$, for $t=[T \ldots T+k]$. See `vintage +> > `{.interpreted-text role="opt"}. The third +> > dimension is of size `1+forecast`. +::: + +::: {.matvar} +[oo]().realtime\_forecast\_shock\_decomposition + +Structure storing the results of realtime forecast decompositions. +Fields are of the form: + + oo_.realtime_forecast_shock_decomposition.OBJECT + +where `OBJECT` is one of the following: + +> `pool` +> +> > Stores the pooled real-time forecast decomposition of the $1$-step +> > ahead effect of shocks on the $1$-step ahead prediction, i.e. +> > $Y(T\vert +> > T-1)$. +> +> `time_*` +> +> > Stores the vintages of $k$-step out-of-sample forecast shock +> > decompositions, i.e. $Y(t\vert +> > T)$, for $t=[T \ldots T+k]$. See `vintage +> > `{.interpreted-text role="opt"}. +::: +::: + +::: {.command} +plot\_shock\_decomposition \[VARIABLE\_NAME\]\...; +plot\_shock\_decomposition (OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command plots the historical shock decomposition already computed +by `shock_decomposition` or `realtime_shock_decomposition`. For that +reason, it must come after one of these commands. The `variable_names` +provided govern which variables the decomposition is plotted for. + +Further note that, unlike the majority of Dynare commands, the options +specified below are overwritten with their defaults before every call to +`plot_shock_decomposition`. Hence, if you want to reuse an option in a +subsequent call to `plot_shock_decomposition`, you must pass it to the +command again. + +*Options* + +::: {.option} +use\_shock\_groups \[= NAME\] + +See `use_shock_groups `{.interpreted-text +role="opt"}. +::: + +::: {.option} +colormap = VARIABLE\_NAME + +See `colormap `{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See `graph_format `{.interpreted-text +role="opt"}. +::: + +::: {.option} +detail\_plot + +Plots shock contributions using subplots, one per shock (or group of +shocks). Default: not activated +::: + +::: {.option} +interactive + +Under MATLAB, add uimenus for detailed group plots. Default: not +activated +::: + +::: {.option} +screen\_shocks + +For large models (i.e. for models with more than 16 shocks), plots only +the shocks that have the largest historical contribution for chosen +selected `variable_names`. Historical contribution is ranked by the mean +absolute value of all historical contributions. +::: + +::: {.option} +steadystate + +If passed, the the $y$-axis value of the zero line in the shock +decomposition plot is translated to the steady state level. Default: not +activated +::: + +::: {.option} +type = qoq \| yoy \| aoa + +For quarterly data, valid arguments are: `qoq` for quarter-on-quarter +plots, `yoy` for year-on-year plots of growth rates, `aoa` for +annualized variables, i.e. the value in the last quarter for each year +is plotted. Default value: empty, i.e. standard period-on-period plots +(`qoq` for quarterly data). +::: + +::: {.option} +fig\_name = STRING + +Specifies a user-defined keyword to be appended to the default figure +name set by `plot_shock_decomposition`. This can avoid to overwrite +plots in case of sequential calls to `plot_shock_decomposition`. +::: + +::: {.option} +write\_xls + +Saves shock decompositions to Excel-file in the main directory, named +`FILENAME_shock_decomposition_TYPE_FIG_NAME.xls`. This option requires +your system to be configured to be able to write Excel files.[^8] +::: + +::: {.option} +realtime = INTEGER + +Which kind of shock decomposition to plot. INTEGER can take the +following values: + +> - `0`: standard historical shock decomposition. See +> `shock_decomposition`{.interpreted-text role="comm"}. +> - `1`: realtime historical shock decomposition. See +> `realtime_shock_decomposition`{.interpreted-text role="comm"}. +> - `2`: conditional realtime shock decomposition. See +> `realtime_shock_decomposition`{.interpreted-text role="comm"}. +> - `3`: realtime forecast shock decomposition. See +> `realtime_shock_decomposition`{.interpreted-text role="comm"}. + +If no vintage is requested, i.e. `vintage=0` then the pooled objects +from `realtime_shock_decomposition`{.interpreted-text role="comm"} will +be plotted and the respective vintage otherwise. Default: `0`. +::: + +::: {.option} +vintage = INTEGER + +Selects a particular data vintage in $[presample,\ldots,nobs]$ for which +to plot the results from +`realtime_shock_decomposition`{.interpreted-text role="comm"} selected +via the `realtime `{.interpreted-text role="opt"} +option. If the standard historical shock decomposition is selected +(`realtime=0`), `vintage` will have no effect. If `vintage=0` the pooled +objects from `realtime_shock_decomposition`{.interpreted-text +role="comm"} will be plotted. If `vintage>0`, it plots the shock +decompositions for vintage $T=\texttt{vintage}$ under the following +scenarios: + +> - `realtime=1`: the full vintage shock decomposition $Y(t\vert T)$ +> for $t=[1,\ldots,T]$ +> - `realtime=2`: the conditional forecast shock decomposition from +> $T$, i.e. plots $Y(T+j\vert T+j)$ and the shock contributions +> needed to get to the data $Y(T+j)$ conditional on $T=$ vintage, +> with $j=[0,\ldots,\texttt{forecast}]$. +> - `realtime=3`: plots unconditional forecast shock decomposition +> from $T$, i.e. $Y(T+j\vert +> T)$, where $T=\texttt{vintage}$ and +> $j=[0,\ldots,\texttt{forecast}]$. + +Default: `0`. +::: + +::: {.option} +plot\_init\_date = DATE + +If passed, plots decomposition using `plot_init_date` as initial period. +Default: first observation in estimation +::: + +::: {.option} +plot\_end\_date = DATE + +If passed, plots decomposition using `plot_end_date` as last period. +Default: last observation in estimation +::: + +::: {.option} +diff + +If passed, plot the decomposition of the first difference of the list of +variables. If used in combination with `flip`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: + +::: {.option} +flip + +If passed, plot the decomposition of the opposite of the list of +variables. If used in combination with `diff`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: + +::: {.option} +max\_nrows + +Maximum number of rows in the subplot layout of detailed shock +decomposition graphs. Note that columns are always 3. Default: 6 +::: + +::: {.option} +with\_epilogue + +See `with_epilogue`{.interpreted-text role="opt"}. +::: + +::: {.option} +init2shocks init2shocks = NAME + +Use the information contained in an `init2shocks`{.interpreted-text +role="bck"} block, in order to attribute initial conditions to shocks. +The name of the block can be explicitly given, otherwise it defaults to +the `default` block. +::: +::: + +::: {.block} +init2shocks ; init2shocks (OPTIONS\...); + +This blocks gives the possibility of attributing the initial condition +of endogenous variables to the contribution of exogenous variables in +the shock decomposition. + +For example, in an AR(1) process, the contribution of the initial +condition on the process variable can naturally be assigned to the +innovation of the process. + +Each line of the block should have the syntax: + + VARIABLE_1 [,] VARIABLE_2; + +Where VARIABLE\_1 is an endogenous variable whose initial condition will +be attributed to the exogenous VARIABLE\_2. + +The information contained in this block is used by the +`plot_shock_decomposition`{.interpreted-text role="comm"} command when +given the `init2shocks` option. + +*Options* + +::: {.option} +name = NAME + +Specifies a name for the block, that can be referenced from +`plot_shock_decomposition`, so that several such blocks can coexist in a +single model file. If the name is unspecified, it defaults to `default`. +::: + +*Example* + +> var y y_s R pie dq pie_s de A y_obs pie_obs R_obs; +> varexo e_R e_q e_ys e_pies e_A; +> ... +> +> model; +> dq = rho_q*dq(-1)+e_q; +> A = rho_A*A(-1)+e_A; +> ... +> end; +> +> ... +> +> init2shocks; +> dq e_q; +> A e_A; +> end; +> +> shock_decomposition(nograph); +> +> plot_shock_decomposition(init2shocks) y_obs R_obs pie_obs dq de; +> +> In this example, the initial conditions of `dq` and `A` will be +> respectively attributed to `e_q` and `e_A`. +::: + +::: {.command} +initial\_condition\_decomposition \[VARIABLE\_NAME\]\...; +initial\_condition\_decomposition (OPTIONS\...) \[VARIABLE\_NAME\]\...; + +This command computes and plots the decomposition of the effect of +smoothed initial conditions of state variables. The `variable_names` +provided govern which variables the decomposition is plotted for. + +Further note that, unlike the majority of Dynare commands, the options +specified below are overwritten with their defaults before every call to +`initial_condition_decomposition`. Hence, if you want to reuse an option +in a subsequent call to `initial_condition_decomposition`, you must pass +it to the command again. + +*Options* + +::: {.option} +colormap = VARIABLE\_NAME + +See `colormap `{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See `graph_format `{.interpreted-text +role="opt"}. +::: + +::: {.option} +detail\_plot + +Plots shock contributions using subplots, one per shock (or group of +shocks). Default: not activated +::: + +::: {.option} +steadystate + +If passed, the the $y$-axis value of the zero line in the shock +decomposition plot is translated to the steady state level. Default: not +activated +::: + +::: {.option} +type = qoq \| yoy \| aoa + +For quarterly data, valid arguments are: `qoq` for quarter-on-quarter +plots, `yoy` for year-on-year plots of growth rates, `aoa` for +annualized variables, i.e. the value in the last quarter for each year +is plotted. Default value: empty, i.e. standard period-on-period plots +(`qoq` for quarterly data). +::: + +::: {.option} +fig\_name = STRING + +Specifies a user-defined keyword to be appended to the default figure +name set by `plot_shock_decomposition`. This can avoid to overwrite +plots in case of sequential calls to `plot_shock_decomposition`. +::: + +::: {.option} +write\_xls + +Saves shock decompositions to Excel-file in the main directory, named +`FILENAME_shock_decomposition_TYPE_FIG_NAME_initval.xls`. This option +requires your system to be configured to be able to write Excel +files.[^9] +::: + +::: {.option} +plot\_init\_date = DATE + +If passed, plots decomposition using `plot_init_date` as initial period. +Default: first observation in estimation +::: + +::: {.option} +plot\_end\_date = DATE + +If passed, plots decomposition using `plot_end_date` as last period. +Default: last observation in estimation +::: + +::: {.option} +diff + +If passed, plot the decomposition of the first difference of the list of +variables. If used in combination with `flip`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: + +::: {.option} +flip + +If passed, plot the decomposition of the opposite of the list of +variables. If used in combination with `diff`{.interpreted-text +role="opt"}, the `diff` operator is first applied. Default: not +activated +::: +::: + +::: {.command} +squeeze\_shock\_decomposition \[VARIABLE\_NAME\]\...; + +For large models, the size of the information stored by shock +decompositions (especially various settings of realtime decompositions) +may become huge. This command allows to squeeze this information in two +possible ways: + +> - Automatic (default): only the variables for which plotting has +> been explicitly required with `plot_shock_decomposition` will have +> their decomposition left in `oo_` after this command is run; +> - If a list of variables is passed to the command, then only those +> variables will have their decomposition left in `oo_` after this +> command is run. +::: + +Calibrated Smoother +------------------- + +Dynare can also run the smoother on a calibrated model: + +::: {.command} +calib\_smoother \[VARIABLE\_NAME\]\...; calib\_smoother (OPTIONS\...) +\[VARIABLE\_NAME\]\...; + +This command computes the smoothed variables (and possible the filtered +variables) on a calibrated model. + +A datafile must be provided, and the observable variables declared with +`varobs`. The smoother is based on a first-order approximation of the +model. + +By default, the command computes the smoothed variables and shocks and +stores the results in `oo_.SmoothedVariables` and `oo_.SmoothedShocks`. +It also fills `oo_.UpdatedVariables`. + +*Options* + +::: {.option} +datafile = FILENAME + +See `datafile `{.interpreted-text role="ref"}. +::: + +::: {.option} +filtered\_vars + +Triggers the computation of filtered variables. See +`filtered_vars`{.interpreted-text role="opt"}, for more details. +::: + +::: {.option} +filter\_step\_ahead = \[INTEGER1:INTEGER2\] + +See +`filter_step_ahead `{.interpreted-text +role="opt"}. +::: + +::: {.option} +prefilter = INTEGER + +See `prefilter `{.interpreted-text role="opt"}. +::: + +::: {.option} +parameter\_set = OPTION + +See `parameter_set `{.interpreted-text +role="opt"} for possible values. Default: `calibration`. +::: + +::: {.option} +loglinear + +See `loglinear `{.interpreted-text role="ref"}. +::: + +::: {.option} +first\_obs = INTEGER + +See `first_obs `{.interpreted-text role="opt"}. +::: + +::: {.option} +filter\_decomposition + +See `filter_decomposition`{.interpreted-text role="opt"}. +::: + +::: {.option} +filter\_covariance + +See `filter_covariance`{.interpreted-text role="opt"}. +::: + +::: {.option} +smoother\_redux + +See `smoother_redux`{.interpreted-text role="opt"}. +::: + +::: {.option} +kalman\_algo = INTEGER + +See `kalman_algo `{.interpreted-text role="opt"}. +::: + +::: {.option} +diffuse\_filter = INTEGER + +See `diffuse_filter`{.interpreted-text role="opt"}. +::: + +::: {.option} +diffuse\_kalman\_tol = DOUBLE + +See `diffuse_kalman_tol `{.interpreted-text +role="opt"}. +::: + +::: {.option} +xls\_sheet = QUOTED\_STRING + +See `xls_sheet `{.interpreted-text +role="opt"}. +::: + +::: {.option} +xls\_range = RANGE + +See `xls_range `{.interpreted-text role="opt"}. +::: +::: + +Forecasting {#fore} +----------- + +On a calibrated model, forecasting is done using the `forecast` command. +On an estimated model, use the `forecast` option of `estimation` +command. + +It is also possible to compute forecasts on a calibrated or estimated +model for a given constrained path of the future endogenous variables. +This is done, from the reduced form representation of the DSGE model, by +finding the structural shocks that are needed to match the restricted +paths. Use `conditional_forecast`{.interpreted-text role="comm"}, +`conditional_forecast_paths`{.interpreted-text role="bck"} and +`plot_conditional_forecast`{.interpreted-text role="comm"} for that +purpose. + +Finally, it is possible to do forecasting with a Bayesian VAR using the +`bvar_forecast`{.interpreted-text role="comm"} command. + +::: {.command} +forecast \[VARIABLE\_NAME\...\]; forecast (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +This command computes a simulation of a stochastic model from an +arbitrary initial point. + +When the model also contains deterministic exogenous shocks, the +simulation is computed conditionally to the agents knowing the future +values of the deterministic exogenous variables. + +`forecast` must be called after `stoch_simul`. + +`forecast` plots the trajectory of endogenous variables. When a list of +variable names follows the command, only those variables are plotted. A +90% confidence interval is plotted around the mean trajectory. Use +option `conf_sig` to change the level of the confidence interval. + +*Options* + +::: {.option} +periods = INTEGER + +Number of periods of the forecast. Default: `5`. +::: + +::: {#confsig} +::: {.option} +conf\_sig = DOUBLE + +Level of significance for confidence interval. Default: `0.90`. +::: +::: + +::: {.option} +nograph + +See `nograph`{.interpreted-text role="opt"}. +::: + +::: {.option} +nodisplay + +See `nodisplay`{.interpreted-text role="opt"}. +::: + +::: {.option} +graph\_format = FORMAT graph\_format = ( FORMAT, FORMAT\... ) + +See `graph_format = FORMAT`{.interpreted-text role="opt"}. +::: + +*Initial Values* + +`forecast` computes the forecast taking as initial values the values +specified in `histval` (see `histval`{.interpreted-text role="bck"}). +When no `histval` block is present, the initial values are the one +stated in `initval`. When `initval` is followed by command `steady`, the +initial values are the steady state (see `steady`{.interpreted-text +role="comm"}). + +*Output* + +The results are stored in `oo_.forecast`, which is described below. + +*Example* + +> varexo_det tau; +> +> varexo e; +> ... +> shocks; +> var e; stderr 0.01; +> var tau; +> periods 1:9; +> values -0.15; +> end; +> +> stoch_simul(irf=0); +> +> forecast; + +::: {.matvar} +[oo]().forecast + +Variable set by the `forecast` command, or by the `estimation` command +if used with the `forecast` option and ML or if no Metropolis-Hastings +has been computed (in that case, the forecast is computed for the +posterior mode). Fields are of the form: + + oo_.forecast.FORECAST_MOMENT.VARIABLE_NAME + +where `FORECAST_MOMENT` is one of the following: + +> `HPDinf` +> +> > Lower bound of a 90% HPD interval[^10] of forecast due to parameter +> > uncertainty, but ignoring the effect of measurement error on +> > observed variables. In case of ML, it stores the lower bound of the +> > confidence interval. +> +> `HPDsup` +> +> > Upper bound of a 90% HPD forecast interval due to parameter +> > uncertainty, but ignoring the effect of measurement error on +> > observed variables. In case of ML, it stores the upper bound of the +> > confidence interval. +> +> `HPDinf_ME` +> +> > Lower bound of a 90% HPD interval[^11] of forecast for observed +> > variables due to parameter uncertainty and measurement error. In +> > case of ML, it stores the lower bound of the confidence interval. +> +> `HPDsup_ME` +> +> > Upper bound of a 90% HPD interval of forecast for observed variables +> > due to parameter uncertainty and measurement error. In case of ML, +> > it stores the upper bound of the confidence interval. +> +> `Mean` +> +> > Mean of the posterior distribution of forecasts. +::: + +::: {.matvar} +[oo]().PointForecast + +Set by the `estimation` command, if it is used with the `forecast` +option and if either `mh_replic > 0` or the `load_mh_file` option are +used. + +Contains the distribution of forecasts taking into account the +uncertainty about both parameters and shocks. + +Fields are of the form: + + oo_.PointForecast.MOMENT_NAME.VARIABLE_NAME +::: + +::: {.matvar} +[oo]().MeanForecast + +Set by the `estimation` command, if it is used with the `forecast` +option and if either `mh_replic > 0` or `load_mh_file` option are used. + +Contains the distribution of forecasts where the uncertainty about +shocks is averaged out. The distribution of forecasts therefore only +represents the uncertainty about parameters. + +Fields are of the form: + + oo_.MeanForecast.MOMENT_NAME.VARIABLE_NAME +::: +::: + +::: {.command} +conditional\_forecast (OPTIONS\...); + +This command computes forecasts on an estimated or calibrated model for +a given constrained path of some future endogenous variables. This is +done using the reduced form first order state-space representation of +the DSGE model by finding the structural shocks that are needed to match +the restricted paths. Consider the augmented state space representation +that stacks both predetermined and non-predetermined variables into a +vector $y_{t}$: + +> $$y_t=Ty_{t-1}+R\varepsilon_t$$ + +Both $y_t$ and $\varepsilon_t$ are split up into controlled and +uncontrolled ones, and we assume without loss of generality that the +constrained endogenous variables and the controlled shocks come first : + +> $$\begin{aligned} +> \begin{pmatrix} +> y_{c,t}\\ +> y_{u,t} +> \end{pmatrix} +> = +> \begin{pmatrix} +> T_{c,c} & T_{c,u}\\ +> T_{u,c} & T_{u,u} +> \end{pmatrix} +> \begin{pmatrix} +> y_{c,t-1}\\ +> y_{u,t-1} +> \end{pmatrix} +> + +> \begin{pmatrix} +> R_{c,c} & R_{c,u}\\ +> R_{u,c} & R_{u,u} +> \end{pmatrix} +> \begin{pmatrix} +> \varepsilon_{c,t}\\ +> \varepsilon_{u,t} +> \end{pmatrix} +> \end{aligned}$$ + +where matrices $T$ and $R$ are partitioned consistently with the vectors +of endogenous variables and innovations. Provided that matrix $R_{c,c}$ +is square and full rank (a necessary condition is that the number of +free endogenous variables matches the number of free innovations), given +$y_{c,t}$, $\varepsilon_{u,t}$ and $y_{t-1}$ the first block of +equations can be solved for $\varepsilon_{c,t}$: + +> $$\varepsilon_{c,t} = R_{c,c}^{-1}\bigl( y_{c,t} - T_{c,c}y_{c,t} - T_{c,u}y_{u,t} - R_{c,u}\varepsilon_{u,t}\bigr)$$ + +and $y_{u,t}$ can be updated by evaluating the second block of +equations: + +> $$y_{u,t} = T_{u,c}y_{c,t-1} + T_{u,u}y_{u,t-1} + R_{u,c}\varepsilon_{c,t} + R_{u,u}\varepsilon_{u,t}$$ + +By iterating over these two blocks of equations, we can build a forecast +for all the endogenous variables in the system conditional on paths for +a subset of the endogenous variables. If the distribution of the free +innovations $\varepsilon_{u,t}$ is provided (*i.e.* some of them have +positive variances) this exercise is replicated (the number of +replication is controlled by the option `replic`{.interpreted-text +role="opt"} described below) by drawing different sequences of free +innovations. The result is a predictive distribution for the +uncontrolled endogenous variables, $y_{u,t}$, that Dynare will use to +report confidence bands around the point conditional forecast. + +A few things need to be noted. First, the controlled exogenous variables +are set to zero for the uncontrolled periods. This implies that there is +no forecast uncertainty arising from these exogenous variables in +uncontrolled periods. Second, by making use of the first order state +space solution, even if a higher-order approximation was performed, the +conditional forecasts will be based on a first order approximation. +Since the controlled exogenous variables are identified on the basis of +the reduced form model (*i.e.* after solving for the expectations), they +are unforeseen shocks from the perspective of the agents in the model. +That is, agents expect the endogenous variables to return to their +respective steady state levels but are surprised in each period by the +realisation of shocks keeping the endogenous variables along a +predefined (unexpected) path. Fourth, if the structural innovations are +correlated, because the calibrated or estimated covariance matrix has +non zero off diagonal elements, the results of the conditional forecasts +will depend on the ordering of the innovations (as declared after +`varexo`). As in VAR models, a Cholesky decomposition is used to +factorise the covariance matrix and identify orthogonal impulses. It is +preferable to declare the correlations in the model block (explicitly +imposing the identification restrictions), unless you are satisfied with +the implicit identification restrictions implied by the Cholesky +decomposition. + +This command has to be called after `estimation` or `stoch_simul`. + +Use `conditional_forecast_paths`{.interpreted-text role="bck"} block to +give the list of constrained endogenous, and their constrained future +path. Option `controlled_varexo` is used to specify the structural +shocks which will be matched to generate the constrained path. + +Use `plot_conditional_forecast`{.interpreted-text role="comm"} to graph +the results. + +*Options* + +::: {.option} +parameter\_set = OPTION + +See `parameter_set `{.interpreted-text +role="opt"} for possible values. No default value, mandatory option. +::: + +::: {.option} +controlled\_varexo = (VARIABLE\_NAME\...) + +Specify the exogenous variables to use as control variables. No default +value, mandatory option. +::: + +::: {.option} +periods = INTEGER + +Number of periods of the forecast. Default: `40`. `periods` cannot be +smaller than the number of constrained periods. +::: + +::: {.option} +replic = INTEGER + +Number of simulations used to compute the conditional forecast +uncertainty. Default: `5000`. +::: + +::: {.option} +conf\_sig = DOUBLE + +Level of significance for confidence interval. Default: `0.80`. +::: + +*Output* + +The results are stored in `oo_.conditional_forecast`, which is described +below. + +*Example* + +> var y a; +> varexo e u; +> ... +> estimation(...); +> +> conditional_forecast_paths; +> var y; +> periods 1:3, 4:5; +> values 2, 5; +> var a; +> periods 1:5; +> values 3; +> end; +> +> conditional_forecast(parameter_set = calibration, controlled_varexo = (e, u), replic = 3000); +> +> plot_conditional_forecast(periods = 10) a y; + +::: {.matvar} +[oo]().conditional\_forecast.cond + +Variable set by the `conditional_forecast` command. It stores the +conditional forecasts. Fields are `periods+1` by `1` vectors storing the +steady state (time 0) and the subsequent `periods` forecasts periods. +Fields are of the form: + + oo_.conditional_forecast.cond.FORECAST_MOMENT.VARIABLE_NAME + +where FORECAST\_MOMENT is one of the following: + +> `Mean` +> +> > Mean of the conditional forecast distribution. +> +> `ci` +> +> > Confidence interval of the conditional forecast distribution. The +> > size corresponds to `conf_sig`. +::: + +::: {.matvar} +[oo]().conditional\_forecast.uncond + +Variable set by the `conditional_forecast` command. It stores the +unconditional forecasts. Fields are of the form: + + oo_.conditional_forecast.uncond.FORECAST_MOMENT.VARIABLE_NAME +::: + +::: {.matvar} +forecasts.instruments + +Variable set by the `conditional_forecast command`. Stores the names of +the exogenous instruments. +::: + +::: {.matvar} +[oo]().conditional\_forecast.controlled\_variables + +Variable set by the `conditional_forecast` command. Stores the position +of the constrained endogenous variables in declaration order. +::: + +::: {.matvar} +[oo]().conditional\_forecast.controlled\_exo\_variables + +Variable set by the `conditional_forecast` command. Stores the values of +the controlled exogenous variables underlying the conditional forecasts +to achieve the constrained endogenous variables. Fields are +`[number of constrained periods]` by `1` vectors and are of the form: + + oo_.conditional_forecast.controlled_exo_variables.FORECAST_MOMENT.SHOCK_NAME +::: + +::: {.matvar} +[oo]().conditional\_forecast.graphs + +Variable set by the `conditional_forecast` command. Stores the +information for generating the conditional forecast plots. +::: +::: + +::: {.block} +conditional\_forecast\_paths ; + +Describes the path of constrained endogenous, before calling +`conditional_forecast`. The syntax is similar to deterministic shocks in +`shocks`, see `conditional_forecast` for an example. + +The syntax of the block is the same as for the deterministic shocks in +the `shocks` blocks (see `shocks-exo`{.interpreted-text role="ref"}). +Note that you need to specify the full path for all constrained +endogenous variables between the first and last specified period. If an +intermediate period is not specified, a value of 0 is assumed. That is, +if you specify only values for periods 1 and 3, the values for period 2 +will be 0. Currently, it is not possible to have uncontrolled +intermediate periods. + +It is however possible to have different number of controlled periods +for different variables. In that case, the order of declaration of +endogenous controlled variables and of `controlled_varexo` matters: if +the second endogenous variable is controlled for less periods than the +first one, the second `controlled_varexo` isn\'t set for the last +periods. + +In case of the presence of `observation_trends`, the specified +controlled path for these variables needs to include the trend +component. When using the `loglinear `{.interpreted-text +role="ref"} option, it is necessary to specify the logarithm of the +controlled variables. +::: + +::: {.block} +filter\_initial\_state ; + +This block specifies the initial values of the endogenous states at the +beginning of the Kalman filter recursions. That is, if the Kalman filter +recursion starts with time t=1 being the first observation, this block +provides the state estimate at time 0 given information at time 0, +$E_0(x_0)$. If nothing is specified, the initial condition is assumed to +be at the steady state (which is the unconditional mean for a stationary +model). + +This block is terminated by `end;`. + +Each line inside of the block should be of the form: + + VARIABLE_NAME(INTEGER)=EXPRESSION; + +`EXPRESSION` is any valid expression returning a numerical value and can +contain parameter values. This allows specifying relationships that will +be honored during estimation. `INTEGER` refers to the lag with which a +variable appears. By convention in Dynare, period 1 is the first period. +Going backwards in time, the first period before the start of the +simulation is period 0, then period -1, and so on. Note that the +`filter_initial_state` block does not take non-state variables. + +*Example* + +> filter_initial_state; +> k(0)= ((1/bet-(1-del))/alp)^(1/(alp-1))*l_ss; +> P(0)=2.5258; +> m(0)= mst; +> end; +::: + +::: {.command} +plot\_conditional\_forecast \[VARIABLE\_NAME\...\]; +plot\_conditional\_forecast (periods = INTEGER) \[VARIABLE\_NAME\...\]; + +Plots the conditional (plain lines) and unconditional (dashed lines) +forecasts. + +To be used after `conditional_forecast`. + +*Options* + +::: {.option} +periods = INTEGER + +Number of periods to be plotted. Default: equal to periods in +`conditional_forecast`. The number of periods declared in +`plot_conditional_forecast` cannot be greater than the one declared in +`conditional_forecast`. +::: +::: + +::: {.command} +bvar\_forecast ; + +This command computes (out-of-sample) forecasts for an estimated BVAR +model, using Minnesota priors. + +See `bvar-a-la-sims.pdf`, which comes with Dynare distribution, for more +information on this command. +::: + +If the model contains strong non-linearities or if some perfectly +expected shocks are considered, the forecasts and the conditional +forecasts can be computed using an extended path method. The forecast +scenario describing the shocks and/or the constrained paths on some +endogenous variables should be build. The first step is the forecast +scenario initialization using the function `init_plan`: + +::: {.matcomm} +HANDLE = init\_plan (DATES); + +Creates a new forecast scenario for a forecast period (indicated as a +dates class, see `dates class members +`{.interpreted-text role="ref"}). This function return a +handle on the new forecast scenario. +::: + +The forecast scenario can contain some simple shocks on the exogenous +variables. This shocks are described using the function `basic_plan`: + +::: {.matcomm} +HANDLE = basic\_plan (HANDLE, \`VAR\_NAME\', \`SHOCK\_TYPE\', DATES, +MATLAB VECTOR OF DOUBLE \| \[DOUBLE \| EXPR \[DOUBLE \| EXPR\] \] ); + +Adds to the forecast scenario a shock on the exogenous variable +indicated between quotes in the second argument. The shock type has to +be specified in the third argument between quotes: 'surprise' in case of +an unexpected shock or 'perfect\_foresight' for a perfectly anticipated +shock. The fourth argument indicates the period of the shock using a +dates class (see `dates class +members `{.interpreted-text role="ref"}). The last +argument is the shock path indicated as a MATLAB vector of double. This +function return the handle of the updated forecast scenario. +::: + +The forecast scenario can also contain a constrained path on an +endogenous variable. The values of the related exogenous variable +compatible with the constrained path are in this case computed. In other +words, a conditional forecast is performed. This kind of shock is +described with the function `flip_plan`: + +::: {.matcomm} +HANDLE = flip\_plan (HANDLE, \`VAR\_NAME\', \`VAR\_NAME\', +\`SHOCK\_TYPE\', DATES, MATLAB VECTOR OF DOUBLE \| \[DOUBLE \| EXPR +\[DOUBLE \| EXPR\] \] ); + +Adds to the forecast scenario a constrained path on the endogenous +variable specified between quotes in the second argument. The associated +exogenous variable provided in the third argument between quotes, is +considered as an endogenous variable and its values compatible with the +constrained path on the endogenous variable will be computed. The nature +of the expectation on the constrained path has to be specified in the +fourth argument between quotes: 'surprise' in case of an unexpected path +or 'perfect\_foresight' for a perfectly anticipated path. The fifth +argument indicates the period where the path of the endogenous variable +is constrained using a dates class (see `dates class +members `{.interpreted-text role="ref"}). The last +argument contains the constrained path as a MATLAB vector of double. +This function return the handle of the updated forecast scenario. +::: + +Once the forecast scenario if fully described, the forecast is computed +with the command `det_cond_forecast`: + +::: {.matcomm} +DSERIES = det\_cond\_forecast (HANDLE\[, DSERIES \[, DATES\]\]); + +Computes the forecast or the conditional forecast using an extended path +method for the given forecast scenario (first argument). The past values +of the endogenous and exogenous variables provided with a dseries class +(see `dseries class +members `{.interpreted-text role="ref"}) can be +indicated in the second argument. By default, the past values of the +variables are equal to their steady-state values. The initial date of +the forecast can be provided in the third argument. By default, the +forecast will start at the first date indicated in the +`init_plan command`. This function returns a dset containing the +historical and forecast values for the endogenous and exogenous +variables. +::: + +*Example* + +> % conditional forecast using extended path method +> % with perfect foresight on r path +> +> var y r; +> varexo e u; +> ... +> smoothed = dseries('smoothed_variables.csv'); +> +> fplan = init_plan(2013Q4:2029Q4); +> fplan = flip_plan(fplan, 'y', 'u', 'surprise', 2013Q4:2014Q4, [1 1.1 1.2 1.1 ]); +> fplan = flip_plan(fplan, 'r', 'e', 'perfect_foresight', 2013Q4:2014Q4, [2 1.9 1.9 1.9 ]); +> +> dset_forecast = det_cond_forecast(fplan, smoothed); +> +> plot(dset_forecast.{'y','u'}); +> plot(dset_forecast.{'r','e'}); + +::: {.command} +smoother2histval ; smoother2histval(OPTIONS\...); + +The purpose of this command is to construct initial conditions (for a +subsequent simulation) that are the smoothed values of a previous +estimation. + +More precisely, after an estimation run with the `smoother` option, +`smoother2histval` will extract the smoothed values (from +`oo_.SmoothedVariables`, and possibly from `oo_.SmoothedShocks` if there +are lagged exogenous), and will use these values to construct initial +conditions (as if they had been manually entered through `histval`). + +*Options* + +::: {.option} +period = INTEGER + +Period number to use as the starting point for the subsequent +simulation. It should be between 1 and the number of observations that +were used to produce the smoothed values. Default: the last observation. +::: + +::: {.option} +infile = FILENAME + +Load the smoothed values from a `_results.mat` file created by a +previous Dynare run. Default: use the smoothed values currently in the +global workspace. +::: + +::: {.option} +invars = ( VARIABLE\_NAME \[VARIABLE\_NAME \...\] ) + +A list of variables to read from the smoothed values. It can contain +state endogenous variables, and also exogenous variables having a lag. +Default: all the state endogenous variables, and all the exogenous +variables with a lag. +::: + +::: {.option} +outfile = FILENAME + +Write the initial conditions to a file. Default: write the initial +conditions in the current workspace, so that a simulation can be +performed. +::: + +::: {.option} +outvars = ( VARIABLE\_NAME \[VARIABLE\_NAME \...\] ) + +A list of variables which will be given the initial conditions. This +list must have the same length than the list given to `invars`, and +there will be a one-to-one mapping between the two list. Default: same +value as option `invars`. +::: + +*Use cases* + +There are three possible ways of using this command: + +> - Everything in a single file: run an estimation with a smoother, +> then run `smoother2histval` (without the `infile` and `outfile` +> options), then run a stochastic simulation. +> - In two files: in the first file, run the smoother and then run +> `smoother2histval` with the `outfile` option; in the second file, +> run `histval_file` to load the initial conditions, and run a +> (deterministic or stochastic) simulation. +> - In two files: in the first file, run the smoother; in the second +> file, run `smoother2histval` with the `infile` option equal to the +> `_results.mat` file created by the first file, and then run a +> (deterministic or stochastic) simulation. +::: + +Optimal policy +-------------- + +Dynare has tools to compute optimal policies for various types of +objectives. You can either solve for optimal policy under commitment +with `ramsey_model`, for optimal policy under discretion with +`discretionary_policy` or for optimal simple rules with `osr` (also +implying commitment). + +::: {.command} +planner\_objective MODEL\_EXPRESSION ; + +This command declares the policy maker objective, for use with +`ramsey_model` or `discretionary_policy`. + +You need to give the one-period objective, not the discounted lifetime +objective. The discount factor is given by the `planner_discount` option +of `ramsey_model` and `discretionary_policy`. The objective function can +only contain current endogenous variables and no exogenous ones. This +limitation is easily circumvented by defining an appropriate auxiliary +variable in the model. + +With `ramsey_model`, you are not limited to quadratic objectives: you +can give any arbitrary nonlinear expression. + +With `discretionary_policy`, the objective function must be quadratic. +::: + +::: {.command} +evaluate\_planner\_objective; evaluate\_planner\_objective +(OPTIONS\...); + +This command computes, displays, and stores the value of the planner +objective function under Ramsey policy or discretion in +`oo_.planner_objective_value`. It will provide both unconditional +welfare and welfare conditional on the initial (i.e. period 0) values of +the endogenous and exogenous state variables inherited by the planner. +In a deterministic context, the respective initial values are set using +`initval` or `histval` (depending on the exact context). + +In a stochastic context, if no initial state values have been specified +with `histval`, their values are taken to be the steady state values. +Because conditional welfare is computed conditional on optimal policy by +the planner in the first endogenous period (period 1), it is conditional +on the information set in the period 1. This information set includes +both the predetermined states inherited from period 0 (specified via +`histval` for both endogenous and lagged exogenous states) as well as +the period 1 values of the exogenous shocks. The latter are specified +using the perfect foresight syntax of the shocks-block. + +At the current stage, the stochastic context does not support the +`pruning` option. At `order>3`, only the computation of conditional +welfare with steady state Lagrange multipliers is supported. Note that +at [order=2]{.title-ref}, the output is based on the second-order +accurate approximation of the variance stored in [oo\_.var]{.title-ref}. + +*Options* + +::: {.option} +periods = INTEGER + +The value of the option specifies the number of periods to use in the +simulations in the computation of unconditional welfare at higher order. + +Default: `10000`. +::: + +::: {.option} +drop = INTEGER + +The number of burn-in draws out of `periods` discarded before computing +the unconditional welfare at higher order. Default: `1000`. +::: + +*Example (stochastic context)* + +> var a ...; +> varexo u; +> +> model; +> a = rho*a(-1)+u+u(-1); +> ... +> end; +> +> histval; +> u(0)=1; +> a(0)=-1; +> end; +> +> shocks; +> var u; stderr 0.008; +> var u; +> periods 1; +> values 1; +> end; +> +> evaluate_planner_objective; + +::: {.matvar} +[oo]().planner\_objective\_value.unconditional +::: + +Scalar storing the value of unconditional welfare. In a perfect +foresight context, it corresponds to welfare in the long-run, +approximated as welfare in the terminal simulation period. + +::: {.matvar} +[oo]().planner\_objective\_value.conditional +::: + +In a perfect foresight context, this field will be a scalar storing the +value of welfare conditional on the specified initial condition and zero +initial Lagrange multipliers. + +In a stochastic context, it will have two subfields: + +::: {.matvar} +[oo]().planner\_objective\_value.conditional.steady\_initial\_multiplier +::: + +Stores the value of the planner objective when the initial Lagrange +multipliers associated with the planner's problem are set to their +steady state values (see `ramsey_policy`{.interpreted-text +role="comm"}). + +::: {.matvar} +[oo]().planner\_objective\_value.conditional.zero\_initial\_multiplier +::: + +Stores the value of the planner objective when the initial Lagrange +multipliers associated with the planner's problem are set to 0, i.e. it +is assumed that the planner exploits its ability to surprise private +agents in the first period of implementing Ramsey policy. This value +corresponds to the planner implementing optimal policy for the first +time and committing not to re-optimize in the future. +::: + +### Optimal policy under commitment (Ramsey) + +Dynare allows to automatically compute optimal policy choices of a +Ramsey planner who takes the specified private sector equilibrium +conditions into account and commits to future policy choices. Doing so +requires specifying the private sector equilibrium conditions in the +`model`-block and a `planner_objective` as well as potentially some +`instruments` to facilitate computations. + +::: {.warning} +::: {.admonition-title} +Warning +::: + +Be careful when employing forward-looking auxiliary variables in the +context of timeless perspective Ramsey computations. They may alter the +problem the Ramsey planner will solve for the first period, although +they seemingly leave the private sector equilibrium unaffected. The +reason is the planner optimizes with respect to variables dated `t` and +takes the value of time 0 variables as given, because they are +predetermined. This set of initially predetermined variables will change +with forward-looking definitions. Thus, users are strongly advised to +use model-local variables instead. + +*Example* + +> Consider a perfect foresight example where the Euler equation for the +> return to capital is given by +> +> 1/C=beta*1/C(+1)*(R(+1)+(1-delta)) +> +> The job of the Ramsey planner in period `1` is to choose $C_1$ and +> $R_1$, taking as given $C_0$. The above equation may seemingly +> equivalently be written as +> +> 1/C=beta*1/C(+1)*(R_cap); +> R_cap=R(+1)+(1-delta); +> +> due to perfect foresight. However, this changes the problem of the +> Ramsey planner in the first period to choosing $C_1$ and $R_1$, taking +> as given both $C_0$ and $R^{cap}_0$. Thus, the relevant return to +> capital in the Euler equation of the first period is not a choice of +> the planner anymore due to the forward-looking nature of the +> definition in the second line! +> +> A correct specification would be to instead define `R_cap` as a +> model-local variable: +> +> 1/C=beta*1/C(+1)*(R_cap); +> #R_cap=R(+1)+(1-delta); +::: + +::: {.command} +ramsey\_model (OPTIONS\...); + +This command computes the First Order Conditions for maximizing the +policy maker objective function subject to the constraints provided by +the equilibrium path of the private economy. + +The planner objective must be declared with the +`planner_objective`{.interpreted-text role="comm"} command. + +This command only creates the expanded model, it doesn't perform any +computations. It needs to be followed by other instructions to actually +perform desired computations. Examples are calls to `steady` to compute +the steady state of the Ramsey economy, to `stoch_simul` with various +approximation orders to conduct stochastic simulations based on +perturbation solutions, to `estimation` in order to estimate models +under optimal policy with commitment, and to perfect foresight +simulation routines. + +See `aux-variables`{.interpreted-text role="ref"}, for an explanation of +how Lagrange multipliers are automatically created. + +*Options* + +This command accepts the following options: + +::: {.option} +planner\_discount = EXPRESSION + +Declares or reassigns the discount factor of the central planner +`optimal_policy_discount_factor`. Default: `1.0`. +::: + +::: {.option} +planner\_discount\_latex\_name = LATEX\_NAME + +Sets the LaTeX name of the `optimal_policy_discount_factor` parameter. +::: + +::: {.option} +instruments = (VARIABLE\_NAME,\...) + +Declares instrument variables for the computation of the steady state +under optimal policy. Requires a `steady_state_model` block or a +`_steadystate.m` file. See below. +::: + +*Steady state* + +Dynare takes advantage of the fact that the Lagrange multipliers appear +linearly in the equations of the steady state of the model under optimal +policy. Nevertheless, it is in general very difficult to compute the +steady state with simply a numerical guess in `initval` for the +endogenous variables. + +It greatly facilitates the computation, if the user provides an +analytical solution for the steady state (in `steady_state_model` block +or in a `_steadystate.m` file). In this case, it is necessary to provide +a steady state solution CONDITIONAL on the value of the instruments in +the optimal policy problem and declared with the option `instruments`. +The initial value of the instrument for steady state finding in this +case is set with `initval`. Note that computing and displaying steady +state values using the `steady`-command or calls to `resid` must come +after the `ramsey_model` statement and the `initval`-block. + +Note that choosing the instruments is partly a matter of interpretation +and you can choose instruments that are handy from a mathematical point +of view but different from the instruments you would refer to in the +analysis of the paper. A typical example is choosing inflation or +nominal interest rate as an instrument. +::: + +::: {.block} +ramsey\_constraints ; + +This block lets you define constraints on the variables in the Ramsey +problem. The constraints take the form of a variable, an inequality +operator (\> or \<) and a constant. + +*Example* + +> ramsey_constraints; +> i > 0; +> end; +::: + +::: {.command} +ramsey\_policy \[VARIABLE\_NAME\...\]; ramsey\_policy (OPTIONS\...) +\[VARIABLE\_NAME\...\]; + +This command is deprecated and formally equivalent to the calling +sequence + +> ramsey_model; +> stoch_simul; +> evaluate_planner_objective; + +It computes an approximation of the policy that maximizes the policy +maker's objective function subject to the constraints provided by the +equilibrium path of the private economy and under commitment to this +optimal policy. The Ramsey policy is computed by approximating the +equilibrium system around the perturbation point where the Lagrange +multipliers are at their steady state, i.e. where the Ramsey planner +acts as if the initial multipliers had been set to 0 in the distant +past, giving them time to converge to their steady state value. +Consequently, the optimal decision rules are computed around this steady +state of the endogenous variables and the Lagrange multipliers. + +Note that the variables in the list after the `ramsey_policy` or +`stoch_simul`-command can also contain multiplier names, but in a +case-sensititve way (e.g. `MULT_1`). In that case, Dynare will for +example display the IRFs of the respective multipliers when `irf>0`. + +The planner objective must be declared with the +`planner_objective`{.interpreted-text role="comm"} command. + +*Options* + +This command accepts all options of `stoch_simul`, plus: + +::: {.option} +planner\_discount = EXPRESSION + +See `planner_discount `{.interpreted-text +role="opt"}. +::: + +::: {.option} +instruments = (VARIABLE\_NAME,\...) + +Declares instrument variables for the computation of the steady state +under optimal policy. Requires a `steady_state_model` block or a +`_steadystate.m` file. See below. +::: + +*Output* + +This command generates all the output variables of `stoch_simul`. For +specifying the initial values for the endogenous state variables (except +for the Lagrange multipliers), see above. + +*Steady state* + +See `Ramsey steady state `{.interpreted-text role="comm"}. +::: + +### Optimal policy under discretion + +::: {.command} +discretionary\_policy \[VARIABLE\_NAME\...\]; discretionary\_policy +(OPTIONS\...) \[VARIABLE\_NAME\...\]; + +This command computes an approximation of the optimal policy under +discretion. The algorithm implemented is essentially an LQ solver, and +is described by *Dennis (2007)*. + +You must ensure that your objective is quadratic. Regarding the model, +it must either be linear or solved at first order with an analytical +steady state provided. In the first case, you should set the `linear` +option of the `model` block. + +It is possible to use the `estimation`{.interpreted-text role="comm"} +command after the `discretionary_policy` command, in order to estimate +the model with optimal policy under discretion and +`evaluate_planner_objective`{.interpreted-text role="comm"} to compute +welfare. + +*Options* + +This command accepts the same options as `ramsey_policy`, plus: + +::: {.option} +discretionary\_tol = NON-NEGATIVE DOUBLE + +Sets the tolerance level used to assess convergence of the solution +algorithm. Default: `1e-7`. +::: + +::: {.option} +maxit = INTEGER + +Maximum number of iterations. Default: `3000`. +::: +::: + +### Optimal Simple Rules (OSR) + +::: {.command} +osr \[VARIABLE\_NAME\...\]; osr (OPTIONS\...) \[VARIABLE\_NAME\...\]; + +This command computes optimal simple policy rules for linear-quadratic +problems of the form: + +> $$\min_\gamma E(y'_tWy_t)$$ + +such that: + +> $$A_1 E_ty_{t+1}+A_2 y_t+ A_3 y_{t-1}+C e_t=0$$ + +where: + +> - $E$ denotes the unconditional expectations operator; +> - $\gamma$ are parameters to be optimized. They must be elements of +> the matrices $A_1$, $A_2$, $A_3$, i.e. be specified as parameters +> in the `params` command and be entered in the `model` block; +> - $y$ are the endogenous variables, specified in the `var` command, +> whose (co)-variance enters the loss function; +> - $e$ are the exogenous stochastic shocks, specified in the +> `varexo`- ommand; +> - $W$ is the weighting matrix; + +The linear quadratic problem consists of choosing a subset of model +parameters to minimize the weighted (co)-variance of a specified subset +of endogenous variables, subject to a linear law of motion implied by +the first order conditions of the model. A few things are worth +mentioning. First, $y$ denotes the selected endogenous variables' +deviations from their steady state, i.e. in case they are not already +mean 0 the variables entering the loss function are automatically +demeaned so that the centered second moments are minimized. Second, +`osr` only solves linear quadratic problems of the type resulting from +combining the specified quadratic loss function with a first order +approximation to the model's equilibrium conditions. The reason is that +the first order state-space representation is used to compute the +unconditional (co)-variances. Hence, `osr` will automatically select +`order=1`. Third, because the objective involves minimizing a weighted +sum of unconditional second moments, those second moments must be +finite. In particular, unit roots in $y$ are not allowed. + +The subset of the model parameters over which the optimal simple rule is +to be optimized, $\gamma$, must be listed with `osr_params`. + +The weighting matrix $W$ used for the quadratic objective function is +specified in the `optim_weights` block. By attaching weights to +endogenous variables, the subset of endogenous variables entering the +objective function, $y$, is implicitly specified. + +The linear quadratic problem is solved using the numerical optimizer +specified with `opt_algo `{.interpreted-text +role="opt"}. + +*Options* + +The `osr` command will subsequently run `stoch_simul` and accepts the +same options, including restricting the endogenous variables by listing +them after the command, as `stoch_simul` (see +`stoch-sol`{.interpreted-text role="ref"}) plus + +::: {.option} +opt\_algo = INTEGER + +Specifies the optimizer for minimizing the objective function. The same +solvers as for `mode_compute` (see +`mode_compute `{.interpreted-text +role="opt"}) are available, except for `5`, `6`, and `10`. +::: + +::: {.option} +optim = (NAME, VALUE, \...) + +A list of NAME\`[ and VALUE pairs. Can be used to set options for the +optimization routines. The set of available options depends on the +selected optimization routine (i.e. on the value of option +:opt:\`opt\_algo \]{.title-ref}). See +`optim `{.interpreted-text role="opt"}. +::: + +::: {.option} +maxit = INTEGER + +Determines the maximum number of iterations used in `opt_algo=4`. This +option is now deprecated and will be removed in a future release of +Dynare. Use `optim` instead to set optimizer-specific values. Default: +`1000`. +::: + +::: {.option} +tolf = DOUBLE + +Convergence criterion for termination based on the function value used +in `opt_algo=4`. Iteration will cease when it proves impossible to +improve the function value by more than tolf. This option is now +deprecated and will be removed in a future release of Dynare. Use +`optim` instead to set optimizer-specific values. Default: `1e-7`. +::: + +::: {.option} +silent\_optimizer + +See `silent_optimizer`{.interpreted-text role="opt"}. +::: + +::: {.option} +huge\_number = DOUBLE + +Value for replacing the infinite bounds on parameters by finite numbers. +Used by some optimizers for numerical reasons (see +`huge_number `{.interpreted-text role="opt"}). +Users need to make sure that the optimal parameters are not larger than +this value. Default: `1e7`. +::: + +The value of the objective is stored in the variable +`oo_.osr.objective_function` and the value of parameters at the optimum +is stored in `oo_.osr.optim_params`. See below for more details. + +After running `osr` the parameters entering the simple rule will be set +to their optimal value so that subsequent runs of `stoch_simul` will be +conducted at these values. +::: + +::: {.command} +osr\_params PARAMETER\_NAME\...; + +This command declares parameters to be optimized by `osr`. +::: + +::: {.block} +optim\_weights ; + +This block specifies quadratic objectives for optimal policy problems. + +More precisely, this block specifies the nonzero elements of the weight +matrix $W$ used in the quadratic form of the objective function in +`osr`. + +An element of the diagonal of the weight matrix is given by a line of +the form: + + VARIABLE_NAME EXPRESSION; + +An off-the-diagonal element of the weight matrix is given by a line of +the form: + + VARIABLE_NAME, VARIABLE_NAME EXPRESSION; +::: + +*Example* + +> var y inflation r; +> varexo y_ inf_; +> +> parameters delta sigma alpha kappa gammarr gammax0 gammac0 gamma_y_ gamma_inf_; +> +> delta = 0.44; +> kappa = 0.18; +> alpha = 0.48; +> sigma = -0.06; +> +> gammarr = 0; +> gammax0 = 0.2; +> gammac0 = 1.5; +> gamma_y_ = 8; +> gamma_inf_ = 3; +> +> model(linear); +> y = delta * y(-1) + (1-delta)*y(+1)+sigma *(r - inflation(+1)) + y_; +> inflation = alpha * inflation(-1) + (1-alpha) * inflation(+1) + kappa*y + inf_; +> r = gammax0*y(-1)+gammac0*inflation(-1)+gamma_y_*y_+gamma_inf_*inf_; +> end; +> +> shocks; +> var y_; stderr 0.63; +> var inf_; stderr 0.4; +> end; +> +> optim_weights; +> inflation 1; +> y 1; +> y, inflation 0.5; +> end; +> +> osr_params gammax0 gammac0 gamma_y_ gamma_inf_; +> osr y; + +::: {.block} +osr\_params\_bounds ; + +This block declares lower and upper bounds for parameters in the optimal +simple rule. If not specified the optimization is unconstrained. + +Each line has the following syntax: + + PARAMETER_NAME, LOWER_BOUND, UPPER_BOUND; + +Note that the use of this block requires the use of a constrained +optimizer, i.e. setting +`opt_algo `{.interpreted-text role="opt"} to `1`, +`2`, `5` or `9`. + +*Example* + +> osr_params_bounds; +> gamma_inf_, 0, 2.5; +> end; +> +> osr(opt_algo=9) y; +::: + +::: {.matvar} +[oo]().osr.objective\_function + +After an execution of the `osr` command, this variable contains the +value of the objective under optimal policy. +::: + +::: {.matvar} +[oo]().osr.optim\_params + +After an execution of the `osr` command, this variable contains the +value of parameters at the optimum, stored in fields of the form +`oo_.osr.optim_params.PARAMETER_NAME`. +::: + +::: {.matvar} +[M]().osr.param\_names + +After an execution of the `osr` command, this cell contains the names of +the parameters. +::: + +::: {.matvar} +[M]().osr.param\_indices + +After an execution of the `osr` command, this vector contains the +indices of the OSR parameters in `M_.params`. +::: + +::: {.matvar} +[M]().osr.param\_bounds + +After an execution of the `osr` command, this two by number of OSR +parameters matrix contains the lower and upper bounds of the parameters +in the first and second column, respectively. +::: + +::: {.matvar} +[M]().osr.variable\_weights + +After an execution of the `osr` command, this sparse matrix contains the +weighting matrix associated with the variables in the objective +function. +::: + +::: {.matvar} +[M]().osr.variable\_indices + +After an execution of the `osr` command, this vector contains the +indices of the variables entering the objective function in +`M_.endo_names`. +::: + + +Displaying and saving results +----------------------------- + +Dynare has comments to plot the results of a simulation and to save the +results. + +::: {.command} +rplot VARIABLE\_NAME\...; + +Plots the simulated path of one or several variables, as stored in +`oo_.endo_simul` by either `perfect_foresight_solver`, `simul` (see +`det-simul`{.interpreted-text role="ref"}) or `stoch_simul` with option +`periods` (see `stoch-sol`{.interpreted-text role="ref"}). The variables +are plotted in levels. +::: + +::: {.command} +dynatype (FILENAME) \[VARIABLE\_NAME\...\]; + +This command prints the listed endogenous or exogenous variables in a +text file named FILENAME. If no VARIABLE\_NAME is listed, all endogenous +variables are printed. +::: + +::: {.command} +dynasave (FILENAME) \[VARIABLE\_NAME\...\]; + +This command saves the listed endogenous or exogenous variables in a +binary file named FILENAME. If no VARIABLE\_NAME is listed, all +endogenous variables are saved. + +In MATLAB or Octave, variables saved with the `dynasave` command can be +retrieved by the command: + + load(FILENAME,'-mat') +::: + +Macro processing language {#macro-proc-lang} +------------------------- + +It is possible to use "macro" commands in the `.mod` file for performing +tasks such as: including modular source files, replicating blocks of +equations through loops, conditionally executing some code, writing +indexed sums or products inside equations\... + +The Dynare macro-language provides a new set of *macro-commands* which +can be used in `.mod` files. It features: + +> - File inclusion +> - Loops (`for` structure) +> - Conditional inclusion (`if/then/else` structures) +> - Expression substitution + +This macro-language is totally independent of the basic Dynare language, +and is processed by a separate component of the Dynare pre-processor. +The macro processor transforms a `.mod` file with macros into a `.mod` +file without macros (doing expansions/inclusions), and then feeds it to +the Dynare parser. The key point to understand is that the macro +processor only does text substitution (like the C preprocessor or the +PHP language). Note that it is possible to see the output of the macro +processor by using the `savemacro` option of the `dynare` command (see +`dyn-invoc`{.interpreted-text role="ref"}). + +The macro processor is invoked by placing *macro directives* in the +`.mod` file. Directives begin with an at-sign followed by a pound sign +(`@#`). They produce no output, but give instructions to the macro +processor. In most cases, directives occupy exactly one line of text. If +needed, two backslashes (`\\`) at the end of the line indicate that the +directive is continued on the next line. Macro directives following `//` +are not interpreted by the macro processor. For historical reasons, +directives in commented blocks, *ie* surrounded by `/*` and `*/`, are +interpreted by the macro processor. The user should not rely on this +behavior. The main directives are: + +> - `@#includepath`, paths to search for files that are to be +> included, +> - `@#include`, for file inclusion, +> - `@#define`, for defining a macro processor variable, +> - `@#if, @#ifdef, @#ifndef, @#elseif, @#else, @#endif` for +> conditional statements, +> - `@#for, @#endfor` for constructing loops. + +The macro processor maintains its own list of variables (distinct from +model variables and MATLAB/Octave variables). These macro-variables are +assigned using the `@#define` directive and can be of the following +basic types: boolean, real, string, tuple, function, and array (of any +of the previous types). + +### Macro expressions {#macro-exp} + +Macro-expressions can be used in two places: + +> - Inside macro directives, directly; +> - In the body of the `.mod` file, between an at-sign and curly +> braces (like `@{expr}`): the macro processor will substitute the +> expression with its value + +It is possible to construct macro-expressions that can be assigned to +macro-variables or used within a macro-directive. The expressions are +constructed using literals of the basic types (boolean, real, string, +tuple, array), comprehensions, macro-variables, macro-functions, and +standard operators. + +::: {.note} +::: {.admonition-title} +Note +::: + +Elsewhere in the manual, MACRO\_EXPRESSION designates an expression +constructed as explained in this section. +::: + +**Boolean** + +The following operators can be used on booleans: + +> - Comparison operators: `==, !=` +> - Logical operators: `&&, ||, !` + +**Real** + +The following operators can be used on reals: + +> - Arithmetic operators: `+, -, *, /, ^` +> - Comparison operators: `<, >, <=, >=, ==, !=` +> - Logical operators: `&&, ||, !` +> - Ranges with an increment of `1`: `REAL1:REAL2` (for example, `1:4` +> is equivalent to real array `[1, 2, 3, 4]`). +> +> ::: {.versionchanged} +> 4.6 Previously, putting brackets around the arguments to the colon +> operator (e.g. `[1:4]`) had no effect. Now, `[1:4]` will create an +> array containing an array (i.e. `[ [1, 2, 3, 4] ]`). +> ::: +> +> - Ranges with user-defined increment: `REAL1:REAL2:REAL3` (for +> example, `6:-2.1:-1` is equivalent to real array +> `[6, 3.9, 1.8, -0.3]`). +> - Functions: +> `max, min, mod, exp, log, log10, sin, cos, tan, asin, acos, atan, sqrt, cbrt, sign, floor, ceil, trunc, erf, erfc, gamma, lgamma, round, normpdf, normcdf`. +> NB `ln` can be used instead of `log` + +**String** + +String literals have to be enclosed by **double** quotes (like +`"name"`). + +The following operators can be used on strings: + +> - Comparison operators: `<, >, <=, >=, ==, !=` +> - Concatenation of two strings: `+` +> - Extraction of substrings: if `s` is a string, then `s[3]` is a +> string containing only the third character of `s`, and `s[4:6]` +> contains the characters from 4th to 6th +> - Function: `length` + +**Tuple** + +Tuples are enclosed by parenthesis and elements separated by commas +(like `(a,b,c)` or `(1,2,3)`). + +The following operators can be used on tuples: + +> - Comparison operators: `==, !=` +> - Functions: `empty, length` + +**Array** + +Arrays are enclosed by brackets, and their elements are separated by +commas (like `[1,[2,3],4]` or `["US", "FR"]`). + +The following operators can be used on arrays: + +> - Comparison operators: `==, !=` +> - Dereferencing: if `v` is an array, then `v[2]` is its 2nd element +> - Concatenation of two arrays: `+` +> - Set union of two arrays: `|` +> - Set intersection of two arrays: `&` +> - Difference `-`: returns the first operand from which the elements +> of the second operand have been removed. +> - Cartesian product of two arrays: `*` +> - Cartesian product of one array N times: `^N` +> - Extraction of sub-arrays: e.g. `v[4:6]` +> - Testing membership of an array: `in` operator (for example: `"b"` +> in `["a", "b", "c"]` returns `1`) +> - Functions: `empty, sum, length` + +**Comprehension** + +Comprehension syntax is a shorthand way to make arrays from other +arrays. There are three different ways the comprehension syntax can be +employed: [filtering]{.title-ref}, [mapping]{.title-ref}, and [filtering +and mapping]{.title-ref}. + +**Filtering** + +Filtering allows one to choose those elements from an array for which a +certain condition hold. + +> *Example* +> +> Create a new array, choosing the even numbers from the array `1:5`: +> +> [ i in 1:5 when mod(i,2) == 0 ] +> +> would result in: +> +> [2, 4] + +**Mapping** + +Mapping allows you to apply a transformation to every element of an +array. + +> *Example* +> +> Create a new array, squaring all elements of the array `1:5`: +> +> [ i^2 for i in 1:5 ] +> +> would result in: +> +> [1, 4, 9, 16, 25] + +**Filtering and Mapping** + +Combining the two preceding ideas would allow one to apply a +transformation to every selected element of an array. + +> *Example* +> +> Create a new array, squaring all even elements of the array `1:5`: +> +> [ i^2 for i in 1:5 when mod(i,2) == 0] +> +> would result in: +> +> [4, 16] +> +> *Further Examples* : +> +> [ (j, i+1) for (i,j) in (1:2)^2 ] +> [ (j, i+1) for (i,j) in (1:2)*(1:2) when i < j ] +> +> would result in: +> +> [(1, 2), (2, 2), (1, 3), (2, 3)] +> [(2, 2)] + +**Function** + +Functions can be defined in the macro processor using the `@#define` +directive (see below). A function is evaluated at the time it is +invoked, not at define time. Functions can be included in expressions +and the operators that can be combined with them depend on their return +type. + +**Checking variable type** + +Given a variable name or literal, you can check the type it evaluates to +using the following functions: `isboolean`, `isreal`, `isstring`, +`istuple`, and `isarray`. + +> *Examples* + + ---------------------------------- + **Code** **Output** + --------------------- ------------ + `isboolean(0)` `false` + + `isboolean(true)` `true` + + `isreal("str")` `false` + ---------------------------------- + +**Casting between types** + +Variables and literals of one type can be cast into another type. Some +type changes are straightforward (e.g. changing a [real]{.title-ref} to +a [string]{.title-ref}) whereas others have certain requirements (e.g. +to cast an [array]{.title-ref} to a [real]{.title-ref} it must be a one +element array containing a type that can be cast to [real]{.title-ref}). + +> *Examples* + + ----------------------------------------------- + **Code** **Output** + ---------------------------------- ------------ + `(bool) -1.1` `true` + + `(bool) 0` `false` + + `(real) "2.2"` `2.2` + + `(tuple) [3.3]` `(3.3)` + + `(array) 4.4` `[4.4]` + + `(real) [5.5]` `5.5` + + `(real) [6.6, 7.7]` `error` + + `(real) "8.8 in a string"` `error` + ----------------------------------------------- + +Casts can be used in expressions: + +> *Examples* + + ---------------------------------------- + **Code** **Output** + --------------------------- ------------ + `(bool) 0 && true` `false` + + `(real) "1" + 2` `3` + + `(string) (3 + 4)` `"7"` + + `(array) 5 + (array) 6` `[5, 6]` + ---------------------------------------- + +### Macro directives + +::: {.macrodir} +@\#includepath \"PATH\" @\#includepath MACRO\_EXPRESSION + +This directive adds the path contained in PATH to the list of those to +search when looking for a `.mod` file specified by `@#include`. If +provided with a MACRO\_EXPRESSION argument, the argument must evaluate +to a string. Note that these paths are added *after* any paths passed +using `-I <-I\<\\>>`{.interpreted-text role="opt"}. + +*Example* + +> @#includepath "/path/to/folder/containing/modfiles" +> @#includepath folders_containing_mod_files +::: + +::: {.macrodir} +@\#include \"FILENAME\" @\#include MACRO\_EXPRESSION + +This directive simply includes the content of another file in its place; +it is exactly equivalent to a copy/paste of the content of the included +file. If provided with a MACRO\_EXPRESSION argument, the argument must +evaluate to a string. Note that it is possible to nest includes (i.e. to +include a file from an included file). The file will be searched for in +the current directory. If it is not found, the file will be searched for +in the folders provided by `-I <-I\<\\>>`{.interpreted-text +role="opt"} and `@#includepath`. + +*Example* + +> @#include "modelcomponent.mod" +> @#include location_of_modfile +::: + +::: {.macrodir} +@\#define MACRO\_VARIABLE @\#define MACRO\_VARIABLE = MACRO\_EXPRESSION +@\#define MACRO\_FUNCTION = MACRO\_EXPRESSION + +Defines a macro-variable or macro function. + +*Example* + +> @#define var // Equals true +> @#define x = 5 // Real +> @#define y = "US" // String +> @#define v = [ 1, 2, 4 ] // Real array +> @#define w = [ "US", "EA" ] // String array +> @#define u = [ 1, ["EA"] ] // Mixed array +> @#define z = 3 + v[2] // Equals 5 +> @#define t = ("US" in w) // Equals true +> @#define f(x) = " " + x + y // Function `f` with argument `x` +> // returns the string ' ' + x + 'US' + +*Example* + +> @#define x = 1 +> @#define y = [ "B", "C" ] +> @#define i = 2 +> @#define f(x) = x + " + " + y[i] +> @#define i = 1 +> +> model; +> A = @{y[i] + f("D")}; +> end; +> +> The latter is strictly equivalent to: +> +> model; +> A = BD + B; +> end; +::: + +::: {.macrodir} +@\#if MACRO\_EXPRESSION @\#ifdef MACRO\_VARIABLE @\#ifndef +MACRO\_VARIABLE @\#elseif MACRO\_EXPRESSION @\#else @\#endif + +Conditional inclusion of some part of the `.mod` file. The lines between +`@#if`, `@#ifdef`, or `@#ifndef` and the next `@#elseif`, `@#else` or +`@#endif` is executed only if the condition evaluates to `true`. +Following the `@#if` body, you can zero or more `@#elseif` branches. An +`@#elseif` condition is only evaluated if the preceding `@#if` or +`@#elseif` condition evaluated to `false`. The `@#else` branch is +optional and is only evaluated if all `@#if` and `@#elseif` statements +evaluate to false. + +Note that when using `@#ifdef`, the condition will evaluate to `true` if +the MACRO\_VARIABLE has been previously defined, regardless of its +value. Conversely, `@#ifndef` will evaluate to true if the +MACRO\_VARIABLE has not yet been defined. + +Note that when using `@#elseif` you can check whether or not a variable +has been defined by using the `defined` operator. Hence, to enter the +body of an `@#elseif` branch if the variable `X` has not been defined, +you would write: `@#elseif !defined(X)`. + +Note that if a real appears as the result of the MACRO\_EXPRESSION, it +will be interpreted as a boolean; a value of `0` is interpreted as +`false`, otherwise it is interpreted as `true`. Further note that +because of the imprecision of reals, extra care must be taken when +testing them in the MACRO\_EXPRESSION. For example, `exp(log(5)) == 5` +will evaluate to `false`. Hence, when comparing real values, you should +generally use a zero tolerance around the value desired, e.g. +`exp(log(5)) > 5-1e-14 && exp(log(5)) < 5+1e-14` + +*Example* + +> Choose between two alternative monetary policy rules using a +> macro-variable: +> +> @#define linear_mon_pol = false // 0 would be treated the same +> ... +> model; +> @#if linear_mon_pol +> i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar); +> @#else +> i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2; +> @#endif +> ... +> end; +> +> This would result in: +> +> ... +> model; +> i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2; +> ... +> end; + +*Example* + +> Choose between two alternative monetary policy rules using a +> macro-variable. The only difference between this example and the +> previous one is the use of `@#ifdef` instead of `@#if`. Even though +> `linear_mon_pol` contains the value `false` because `@#ifdef` only +> checks that the variable has been defined, the linear monetary policy +> is output: +> +> @#define linear_mon_pol = false // 0 would be treated the same +> ... +> model; +> @#ifdef linear_mon_pol +> i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar); +> @#else +> i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2; +> @#endif +> ... +> end; +> +> This would result in: +> +> ... +> model; +> i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar); +> ... +> end; +::: + +::: {.macrodir} +@\#for MACRO\_VARIABLE in MACRO\_EXPRESSION @\#for MACRO\_VARIABLE in +MACRO\_EXPRESSION when MACRO\_EXPRESSION @\#for MACRO\_TUPLE in +MACRO\_EXPRESSION @\#for MACRO\_TUPLE in MACRO\_EXPRESSION when +MACRO\_EXPRESSION @\#endfor + +Loop construction for replicating portions of the `.mod` file. Note that +this construct can enclose variable/parameters declaration, +computational tasks, but not a model declaration. + +*Example* + +> model; +> @#for country in [ "home", "foreign" ] +> GDP_@{country} = A * K_@{country}^a * L_@{country}^(1-a); +> @#endfor +> end; +> +> The latter is equivalent to: +> +> model; +> GDP_home = A * K_home^a * L_home^(1-a); +> GDP_foreign = A * K_foreign^a * L_foreign^(1-a); +> end; + +*Example* + +> model; +> @#for (i, j) in ["GDP"] * ["home", "foreign"] +> @{i}_@{j} = A * K_@{j}^a * L_@{j}^(1-a); +> @#endfor +> end; +> +> The latter is equivalent to: +> +> model; +> GDP_home = A * K_home^a * L_home^(1-a); +> GDP_foreign = A * K_foreign^a * L_foreign^(1-a); +> end; + +*Example* + +> @#define countries = ["US", "FR", "JA"] +> @#define nth_co = "US" +> model; +> @#for co in countries when co != nth_co +> (1+i_@{co}) = (1+i_@{nth_co}) * E_@{co}(+1) / E_@{co}; +> @#endfor +> E_@{nth_co} = 1; +> end; +> +> The latter is equivalent to: +> +> model; +> (1+i_FR) = (1+i_US) * E_FR(+1) / E_FR; +> (1+i_JA) = (1+i_US) * E_JA(+1) / E_JA; +> E_US = 1; +> end; +::: + +::: {.macrodir} +@\#echo MACRO\_EXPRESSION + +Asks the preprocessor to display some message on standard output. The +argument must evaluate to a string. +::: + +::: {.macrodir} +@\#error MACRO\_EXPRESSION + +Asks the preprocessor to display some error message on standard output +and to abort. The argument must evaluate to a string. +::: + +::: {.macrodir} +@\#echomacrovars @\#echomacrovars MACRO\_VARIABLE\_LIST +@\#echomacrovars(save) MACRO\_VARIABLE\_LIST + +Asks the preprocessor to display the value of all macro variables up +until this point. If the `save` option is passed, then values of the +macro variables are saved to `options_.macrovars_line_<>`. +If `NAME_LIST` is passed, only display/save variables and functions with +that name. + +*Example* + +> @#define A = 1 +> @#define B = 2 +> @#define C(x) = x*2 +> @#echomacrovars A C D +> +> The output of the command above is: +> +> Macro Variables: +> A = 1 +> Macro Functions: +> C(x) = (x * 2) +::: + +### Typical usages + +#### Modularization + +The `@#include` directive can be used to split `.mod` files into several +modular components. + +Example setup: + +`modeldesc.mod` + +> Contains variable declarations, model equations, and shocks +> declarations. + +`simul.mod` + +> Includes `modeldesc.mod`, calibrates parameter,s and runs stochastic +> simulations. + +`estim.mod` + +> Includes `modeldesc.mod`, declares priors on parameters, and runs +> Bayesian estimation. + +Dynare can be called on `simul.mod` and `estim.mod` but it makes no +sense to run it on `modeldesc.mod`. + +The main advantage is that you don\'t have to copy/paste the whole model +(at the beginning) or changes to the model (during development). + +#### Indexed sums of products + +The following example shows how to construct a moving average: + + @#define window = 2 + + var x MA_x; + ... + model; + ... + MA_x = @{1/(2*window+1)}*( + @#for i in -window:window + +x(@{i}) + @#endfor + ); + ... + end; + +After macro processing, this is equivalent to: + + var x MA_x; + ... + model; + ... + MA_x = 0.2*( + +x(-2) + +x(-1) + +x(0) + +x(1) + +x(2) + ); + ... + end; + +#### Multi-country models + +Here is a skeleton example for a multi-country model: + + @#define countries = [ "US", "EA", "AS", "JP", "RC" ] + @#define nth_co = "US" + + @#for co in countries + var Y_@{co} K_@{co} L_@{co} i_@{co} E_@{co} ...; + parameters a_@{co} ...; + varexo ...; + @#endfor + + model; + @#for co in countries + Y_@{co} = K_@{co}^a_@{co} * L_@{co}^(1-a_@{co}); + ... + @#if co != nth_co + (1+i_@{co}) = (1+i_@{nth_co}) * E_@{co}(+1) / E_@{co}; // UIP relation + @#else + E_@{co} = 1; + @#endif + @#endfor + end; + +#### Endogeneizing parameters + +When calibrating the model, it may be useful to consider a parameter as +an endogenous variable (and vice-versa). + +For example, suppose production is defined by a CES function: + +> $$y = \left(\alpha^{1/\xi} \ell^{1-1/\xi}+(1-\alpha)^{1/\xi}k^{1-1/\xi}\right)^{\xi/(\xi-1)}$$ + +and the labor share in GDP is defined as: + +> $$\textrm{lab\_rat} = (w \ell)/(p y)$$ + +In the model, $\alpha$ is a (share) parameter and `lab_rat` is an +endogenous variable. + +It is clear that calibrating $\alpha$ is not straightforward; on the +contrary, we have real world data for `lab_rat` and it is clear that +these two variables are economically linked. + +The solution is to use a method called *variable flipping*, which +consists in changing the way of computing the steady state. During this +computation, $\alpha$ will be made an endogenous variable and `lab_rat` +will be made a parameter. An economically relevant value will be +calibrated for `lab_rat`, and the solution algorithm will deduce the +implied value for $\alpha$. + +An implementation could consist of the following files: + +`modeqs.mod` + +> This file contains variable declarations and model equations. The code +> for the declaration of $\alpha$ and `lab_rat` would look like: +> +> @#if steady +> var alpha; +> parameter lab_rat; +> @#else +> parameter alpha; +> var lab_rat; +> @#endif + +`steady.mod` + +> This file computes the steady state. It begins with: +> +> @#define steady = 1 +> @#include "modeqs.mod" +> +> Then it initializes parameters (including `lab_rat`, excluding +> $\alpha$), computes the steady state (using guess values for +> endogenous, including $\alpha$), then saves values of parameters and +> endogenous at steady state in a file, using the +> `save_params_and_steady_state` command. + +`simul.mod` + +> This file computes the simulation. It begins with: +> +> @#define steady = 0 +> @#include "modeqs.mod" +> +> Then it loads values of parameters and endogenous at steady state from +> file, using the `load_params_and_steady_state` command, and computes +> the simulations. + +### MATLAB/Octave loops versus macro processor loops + +Suppose you have a model with a parameter $\rho$ and you want to run +simulations for three values: $\rho = 0.8, 0.9, +1$. There are several ways of doing this: + +*With a MATLAB/Octave loop* + +> rhos = [ 0.8, 0.9, 1]; +> for i = 1:length(rhos) +> rho = rhos(i); +> stoch_simul(order=1); +> end +> +> Here the loop is not unrolled, MATLAB/Octave manages the iterations. +> This is interesting when there are a lot of iterations. + +*With a macro processor loop (case 1)* + +> rhos = [ 0.8, 0.9, 1]; +> @#for i in 1:3 +> rho = rhos(@{i}); +> stoch_simul(order=1); +> @#endfor +> +> This is very similar to the previous example, except that the loop is +> unrolled. The macro processor manages the loop index but not the data +> array (`rhos`). + +*With a macro processor loop (case 2)* + +> @#for rho_val in [ 0.8, 0.9, 1] +> rho = @{rho_val}; +> stoch_simul(order=1); +> @#endfor +> +> The advantage of this method is that it uses a shorter syntax, since +> the list of values is directly given in the loop construct. The +> inconvenience is that you can not reuse the macro array in +> MATLAB/Octave. + +Verbatim inclusion {#verbatim} +------------------ + +Pass everything contained within the verbatim block to the +`.m` file. + +::: {.block} +verbatim ; + +By default, whenever Dynare encounters code that is not understood by +the parser, it is directly passed to the preprocessor output. + +In order to force this behavior you can use the `verbatim` block. This +is useful when the code you want passed to the `.m` file +contains tokens recognized by the Dynare preprocessor. + +*Example* + +> verbatim; +> % Anything contained in this block will be passed +> % directly to the .m file, including comments +> var = 1; +> end; +::: + +Misc commands +------------- + +::: {.command} +set\_dynare\_seed (INTEGER) set\_dynare\_seed (\`default\') +set\_dynare\_seed (\`clock\') set\_dynare\_seed (\`reset\') +set\_dynare\_seed (\`ALGORITHM\', INTEGER) + +Sets the seed used for random number generation. It is possible to set a +given integer value, to use a default value, or to use the clock (by +using the latter, one will therefore get different results across +different Dynare runs). The `reset` option serves to reset the seed to +the value set by the last `set_dynare_seed` command. On MATLAB 7.8 or +above, it is also possible to choose a specific algorithm for random +number generation; accepted values are `mcg16807`, `mlfg6331_64`, +`mrg32k3a`, `mt19937ar` (the default), `shr3cong` and `swb2712`. +::: + +::: {.command} +save\_params\_and\_steady\_state (FILENAME); + +For all parameters, endogenous and exogenous variables, stores their +value in a text file, using a simple name/value associative table. + +> - for parameters, the value is taken from the last parameter +> initialization. +> - for exogenous, the value is taken from the last `initval` block. +> - for endogenous, the value is taken from the last steady state +> computation (or, if no steady state has been computed, from the +> last `initval` block). + +Note that no variable type is stored in the file, so that the values can +be reloaded with `load_params_and_steady_state` in a setup where the +variable types are different. + +The typical usage of this function is to compute the steady-state of a +model by calibrating the steady-state value of some endogenous variables +(which implies that some parameters must be endogeneized during the +steady-state computation). + +You would then write a first `.mod` file which computes the steady state +and saves the result of the computation at the end of the file, using +`save_params_and_steady_state`. + +In a second file designed to perform the actual simulations, you would +use `load_params_and_steady_state` just after your variable +declarations, in order to load the steady state previously computed +(including the parameters which had been endogeneized during the steady +state computation). + +The need for two separate `.mod` files arises from the fact that the +variable declarations differ between the files for steady state +calibration and for simulation (the set of endogenous and parameters +differ between the two); this leads to different `var` and `parameters` +statements. + +Also note that you can take advantage of the `@#include` directive to +share the model equations between the two files (see +`macro-proc-lang`{.interpreted-text role="ref"}). +::: + +::: {.command} +load\_params\_and\_steady\_state (FILENAME); + +For all parameters, endogenous and exogenous variables, loads their +value from a file created with `save_params_and_steady_state`. + +> - for parameters, their value will be initialized as if they had +> been calibrated in the `.mod` file. +> - for endogenous and exogenous variables, their value will be +> initialized as they would have been from an `initval` block . + +This function is used in conjunction with +`save_params_and_steady_state`; see the documentation of that function +for more information. +::: + +::: {.command} +compilation\_setup (OPTIONS); + +When the `use_dll`{.interpreted-text role="opt"} option is present, +Dynare uses the GCC compiler that was distributed with it to compile the +static and dynamic C files produced by the preprocessor. You can use +this option to change the compiler, flags, and libraries used. + +*Options* + +> ::: {.option} +> compiler = FILENAME +> +> The path to the compiler. +> ::: +> +> ::: {.option} +> substitute\_flags = QUOTED\_STRING +> +> The flags to use instead of the default flags. +> ::: +> +> ::: {.option} +> add\_flags = QUOTED\_STRING +> +> The flags to use in addition to the default flags. If +> `substitute_flags` is passed, these flags are added to the flags +> specified there. +> ::: +> +> ::: {.option} +> substitute\_libs = QUOTED\_STRING +> +> The libraries to link against instead of the default libraries. +> ::: +> +> ::: {.option} +> add\_libs = QUOTED\_STRING +> +> The libraries to link against in addition to the default libraries. If +> `substitute_libs` is passed, these libraries are added to the +> libraries specified there. +> ::: +::: + +::: {.matcomm} +dynare\_version ; + +Output the version of Dynare that is currently being used (i.e. the one +that is highest on the MATLAB/Octave path). +::: + +::: {.matcomm} +write\_latex\_definitions ; + +Writes the names, LaTeX names and long names of model variables to +tables in a file named `<>_latex_definitions.tex`. Requires +the following LaTeX packages: `longtable`. +::: + +::: {.matcomm} +write\_latex\_parameter\_table ; + +Writes the LaTeX names, parameter names, and long names of model +parameters to a table in a file named +`<>_latex_parameters.tex.` The command writes the values of +the parameters currently stored. Thus, if parameters are set or changed +in the steady state computation, the command should be called after a +steady-command to make sure the parameters were correctly updated. The +long names can be used to add parameter descriptions. Requires the +following LaTeX packages: `longtable, booktabs`. +::: + +::: {.matcomm} +write\_latex\_prior\_table ; + +Writes descriptive statistics about the prior distribution to a LaTeX +table in a file named `<>_latex_priors_table.tex`. The command +writes the prior definitions currently stored. Thus, this command must +be invoked after the `estimated_params` block. If priors are defined +over the measurement errors, the command must also be preceeded by the +declaration of the observed variables (with `varobs`). The command +displays a warning if no prior densities are defined (ML estimation) or +if the declaration of the observed variables is missing. Requires the +following LaTeX packages: `longtable, booktabs`. +::: + +::: {.matcomm} +collect\_latex\_files ; + +Writes a LaTeX file named `<>_TeX_binder.tex` that collects +all TeX output generated by Dynare into a file. This file can be +compiled using `pdflatex` and automatically tries to load all required +packages. Requires the following LaTeX packages: `breqn`, `psfrag`, +`graphicx`, `epstopdf`, `longtable`, `booktabs`, `caption`, `float,` +`amsmath`, `amsfonts`, and `morefloats`. +::: + +**Footnotes** + +[^1]: A `.mod` file must have lines that end with a line feed character, + which is not commonly visible in text editors. Files created on + Windows and Unix-based systems have always conformed to this + requirement, as have files created on OS X and macOS. Files created + on old, pre-OS X Macs used carriage returns as end of line + characters. If you get a Dynare parsing error of the form + `ERROR: <>: line 1, cols 341-347: syntax error,...` and + there\'s more than one line in your `.mod` file, know that it uses + the carriage return as an end of line character. To get more helpful + error messages, the carriage returns should be changed to line + feeds. + +[^2]: Note that arbitrary MATLAB or Octave expressions can be put in a + `.mod` file, but those expressions have to be on separate lines, + generally at the end of the file for post-processing purposes. They + are not interpreted by Dynare, and are simply passed on unmodified + to MATLAB or Octave. Those constructions are not addresses in this + section. + +[^3]: In particular, for big models, the compilation step can be very + time-consuming, and use of this option may be counter-productive in + those cases. + +[^4]: See options `conf_sig `{.interpreted-text role="ref"} and + `mh_conf_sig `{.interpreted-text role="opt"} + to change the size of the HPD interval. + +[^5]: See options `conf_sig `{.interpreted-text role="ref"} () + and `mh_conf_sig `{.interpreted-text + role="opt"} to qchange the size of the HPD interval. + +[^6]: When the shocks are correlated, it is the decomposition of + orthogonalized shocks via Cholesky decomposition according to the + order of declaration of shocks (see `var-decl`{.interpreted-text + role="ref"}) + +[^7]: See `forecast `{.interpreted-text role="opt"} + for more information. + +[^8]: In case of Excel not being installed, + + may be helpful. + +[^9]: In case of Excel not being installed, + + may be helpful. + +[^10]: See option `conf_sig `{.interpreted-text role="ref"} to + change the size of the HPD interval. + +[^11]: See option `conf_sig `{.interpreted-text role="ref"} to + change the size of the HPD interval. + +[^12]: If you want to align the paper with the description herein, + please note that $A$ is $A^0$ and $F$ is $A^+$. + +[^13]: An example can be found at + . diff --git a/doc/make.jl b/docs/make.jl similarity index 100% rename from doc/make.jl rename to docs/make.jl diff --git a/docs/src/development/Outputs.md b/docs/src/development/Outputs.md new file mode 100644 index 00000000..65e95587 --- /dev/null +++ b/docs/src/development/Outputs.md @@ -0,0 +1,17 @@ +# Results generated by Dynare + +Dynare stores results in the `context` structure. The main entry +points are +- `trends`: `context.results.model_results[1].trends` +- `LREresults`: `context.results.model_results[1].linearrationalresults` +| Object | Storage | Generated by | Accessor | Remark | +|--------------------|--------------------------------|------------------|----------|--------| +| steady state | trends.endogenous_steady_state | Steady_State.jl | | | +| | trends.exogenous_steady_state | | | | +| 1st order solution | LREresults.g1 | perturbations.jl | | | +| | LREresults.g1_1 | | | | +| | LREresults.g1_2 | | | | +| | LREresults.gns1 | | | | +| | LREresults.gs1 | | | | +| | LREresults.hns1 | | | | +| | LREresults.hs1 | | | | diff --git a/docs/src/development/RecursiveBlocks.blocks.md b/docs/src/development/RecursiveBlocks.blocks.md new file mode 100644 index 00000000..3ceafc53 --- /dev/null +++ b/docs/src/development/RecursiveBlocks.blocks.md @@ -0,0 +1,286 @@ +# Computing recursive blocks + +This notes present the identification of recursive blocks and the +construction of function to compute residuals and Jacobian by blocks + +## Identification of recrusive blocks + +Assuming that we have the sparse representation of the Jacobian matrix +of the model where the variables are in columns and the equations in rows + +### Getting the static and dynamic Jacobian matrices +``` +using Dynare + +context = @dynare "models/example1/example1.mod"; + +model = context.models[1] +results = context.results.model_results[1] +wsd = Dynare.DynamicWs(context) +wss = Dynare.StaticWs(context) +params = context.work.params +steadystate = results.trends.endogenous_steady_state +endogenous = repeat(steadystate, 3) +exogenous = results.trends.exogenous_steady_state +Jdynamic = Dynare.get_dynamic_jacobian!(wsd, params, endogenous, exogenous, steadystate, model, 200) +Jstatic = Dynare.get_static_jacobian!(wss, params, steadystate, exogenous, model) +``` + +### The incidence matrix + +The incidence matrix of the model is a boolean matrix indicating which +variable appears in which equation. + +#### Incidence matrix in the static model +``` +using SparseArrays + +ONES = Vector{Bool}(undef, length(Jstatic.rowval)) # all ONES elements must be true +fill!(ONES, true) +IncidenceStatic = SparseMatrixCSC(size(Jstatic, 1), size(Jstatic,2), Jstatic.colptr, Jstatic.rowval, ONES) +``` +The incidence matrix of the static model is a square matrix and its +order corresponds to the number of endogenous variables. + +#### Incidence matrix in the dynamic model +``` +using SparseArrays + +ONES = Vector{Bool}(undef, length(Jdynamic.rowval)) # all ONES elements must be true +fill!(ONES, true) +IncidenceDynamic = SparseMatrixCSC(size(Jdynamic, 1), size(Jdynamic,2), Jdynamic.colptr, Jdynamic.rowval, ONES) +``` +The incidence matrix of the dynamic model is a rectangular matrix +$n\times 3n$ as variables in period $t-1$, $t$, and $t+1$ are treated +as different variables. Depending on how we are going to use the +blocks, we can consider different kind of unknowns. + +When we treat variables identically at all leads and lags, we compute +the incidence matrix in the static model. This is appropriate when we +want to compute dynamic simulations block by block. + +If we want to compute solution functions block by block, we consider +that variables in previous periods are predetermined and we consider +only variables appearing in an equation at the current or future periods. + + +### Normalization of the model + +We assign each variable to one and only one equation that "determines" +this variable. Several assignements are possible. For our purpose any +one is fine. If no normalization is available, that means that the +model is ill specified, the Jacobian is singular, and two or more +equations are linearly dependent. + +Normalization is obtained by computing the maximum cardinality +matching of the graph of the model + +``` +using BipartiteMatching +using Graphs + +n = model.endogenous_nbr + +U1 = BitMatrix(IncidenceStatic) #bipartite graph +matching1, matched1 = findmaxcardinalitybipartitematching(U1) #maximum cardinality matching of the graph +!all(matched1) && error("Model can't be normalized") + +U2 = BitMatrix(IncidenceDynamic[:,n+1:2*n] .| IncidenceDynamic[:,2n+1:3*n]) #bipartite graph +matching2, matched2 = findmaxcardinalitybipartitematching(U2) #maximum cardinality matching of the graph +!all(matched2) && error("Model can't be normalized") +``` + + + +### Recursive blocks + +Once we have the normalization of the model, we can assign each +equation to a different variable and obtain a simple graph describing +which variable enters directly in the determination of which variable. +Equations must be in the same order as variables. As the purpose of +this procedure is to partition equations, we keep equations in the +original order and reorder the variables (columns) of the incidence matrix. + +``` +#Reorder columns of incidence matrix in the static model +iorder1 = [p[2] for p in sort(collect(pairs(matching1)), by=x -> x[1])] + +#Reorder columns of incidence matrix in the dynamic model +iorder2 = [p[2] for p in sort(collect(pairs(matching2)), by=x -> x[1])] +``` + +The strongly connected components of this simple graph provide the +subsets of variables that need to be evaluated or solved for +simultaneously. These are the recursive blocks. + +``` +# Strongly connected components in the static model +g1 = SimpleDiGraph(U1[:, iorder1]) +sccStatic = strongly_connected_components(g1) + +# Strongly connected components in the dynamic model +g2 = SimpleDiGraph(U2[:, iorder2]) +sccDynamic = strongly_connected_components(g2) +``` + + +## Writing block functions + +The general idea is to take advantage of the already parsed version of +the functions for the model as a whole + +### Functions as expressions + +``` +e = :(function f(x); x=1; return x; end) #:(function f(x) +``` +Expression `e` is made of two fields: `head` and `args`: +``` +e.head #:function +e.args #2-element Vector{Any}: + +``` +- `e.head` indicates that expression `e` represents a function +- `e.args[1]` is the calling sequence +- `e.args[2]` contains the body of the function +``` +e.args[2].head #:block +e.args[2].args #5-element Vector{Any}: +``` +- `e.args[2].args[[1, 2,4]]` indicates where the lines are coming from +- `e.args[2].args[3]` is `:(x[1] = 1]` +- `e.args[2].args[5]` is `:(return x)` + +and + +``` +e.args[2].args[3].head #:(=) +e.args[2].args[3].args #2-element Vector{Any}: +e.args[2].args[3].args[1].head #ERROR: type Symbol has no field head +e.args[2].args[3].args[1].args #ERROR: type Symbol has no field args +``` +Observe that the element of `x` that is modified by the function is +indicated in `e.args[2].args[3].args[1].args[2]` + +### The SparseDynamicResid! function as an expression + +``` +julia> Dynare.DFunctions.SparseDynamicResid! +RuntimeGeneratedFunction(#=in Dynare.DFunctions=#, #=using Dynare.DFunctions=#, :((T, residual, y, x, params, steady_state)->begin + #= none:1 =# + #= none:2 =# + #= none:2 =# @assert length(T) >= 5 + #= none:3 =# + #= none:3 =# @assert length(residual) == 6 + #= none:4 =# + #= none:4 =# @assert length(y) == 18 + #= none:5 =# + #= none:5 =# @assert length(x) == 2 + #= none:6 =# + #= none:6 =# @assert length(params) == 7 + #= none:7 =# + #= none:7 =# @inbounds begin + #= none:8 =# + residual[1] = y[8] * params[5] * T[1] - (1 - params[3]) * y[7] + #= none:9 =# + residual[2] = y[9] - params[1] * T[2] * (params[3] * exp(y[18]) * y[13] + y[9] * (1 - params[4])) + #= none:10 =# + residual[3] = y[7] - T[5] + #= none:11 =# + residual[4] = y[9] - (exp(y[12]) * (y[7] - y[8]) + (1 - params[4]) * y[3]) + #= none:12 =# + residual[5] = y[10] - (params[2] * y[4] + params[7] * y[6] + x[1]) + #= none:13 =# + residual[6] = y[12] - (y[4] * params[7] + params[2] * y[6] + x[2]) + end + #= none:15 =# + return nothing + end)) +``` +Using the same logic as above, we get the residual of the first +equation of the model as +``` +julia> Dynare.DFunctions.SparseDynamicResid!.body.args[13].args[3].args[2] +:(residual[1] = y[8] * params[5] * T[1] - (1 - params[3]) * y[7]) +``` +and the number of the first equation is revealed by +``` +julia> Dynare.DFunctions.SparseDynamicResid!.body.args[13].args[3].args[2].args[1].args[2] +1 +``` +It is possible to exploit this technique to dispatch the computation +of the residuals belonging to each block in different functions + +``` +using RuntimeGeneratedFunctions + +sdr = Dynare.DFunctions.SparseDynamicResid! +equs = sdr.body.args[13].args[3].args + +sdr_block_1 = :((T, residual, y, x, params, steady_state) -> @inbounds begin; end) +@show sdr_block_1.args + +function make_block_function(equs, block_component) + # make function template + func = :((T, residual, y, x, params, steady_state) -> @inbounds begin; end) + # add equations belonging to this block + for (i, ie) in enumerate(block_component) + # in sdr each equations is the second of two elements + eq = copy(equs[2*ie]) + # change the index of the residual + eq.args[1].args[2] = i + push!(func.args[2].args[2].args[3].args, eq) + end + return @RuntimeGeneratedFunction(func) +end + +function make_blocks(func0, block_components) + block_functions = Function[] + equs = func0.body.args[13].args[3].args + for block in block_components + push!(block_functions, make_block_function(equs, block)) + end + return block_functions +end + +@show make_blocks(sdr, sccDynamic) + +#Get Sparse Dynamic Resid, G1 and G2 +sdr = Dynare.DFunctions.SparseDynamicResid! +sdg1 = Dynare.DFunctions.SparseDynamicG1! +sdg2 = Dynare.DFunctions.SparseDynamicG2! + +#Blocks by function (tuples) +function blocks_by_functions(funcs0, block_components) + model_functions = Dict()#Vector{Function}[] + for (name, func) in pairs(funcs0) + try + model_functions[name] = make_blocks(func, block_components) + catch + model_functions[name] = "Has no field body" + end + end + return model_functions +end + +funcs0 = (sdr=sdr, sdg1=sdg1, sdg2=sdg2) +model_functions = blocks_by_functions(funcs0, sccDynamic) + +#Blocks by function (Array) +function blocks_by_functions2(funcs0, block_components) + model_functions = Any[] + for func in funcs0 + try + push!(model_functions, make_blocks(func, block_components)) + catch + push!(model_functions, "Has no field body") + end + end + return model_functions +end + +funcs0 = [sdr, sdg1, sdg2] +model_functions = blocks_by_functions2(funcs0, sccDynamic) + +``` + diff --git a/docs/src/RecursiveBlocks.md b/docs/src/development/RecursiveBlocks.md similarity index 100% rename from docs/src/RecursiveBlocks.md rename to docs/src/development/RecursiveBlocks.md diff --git a/docs/src/development/algorighms_derivatives.aux b/docs/src/development/algorighms_derivatives.aux new file mode 100644 index 00000000..64146fde --- /dev/null +++ b/docs/src/development/algorighms_derivatives.aux @@ -0,0 +1,6 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {1}Derivatives of the steady state}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2}Derivatives of the coefficents of the linear approximation of the model}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3}Derivatives of the solution of the UQME}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {4}Derivatives of the coefficients of response to the shocks}{3}{}\protected@file@percent } +\gdef \@abspage@last{3} diff --git a/docs/src/development/derivative_UQME.aux b/docs/src/development/derivative_UQME.aux new file mode 100644 index 00000000..b6401217 --- /dev/null +++ b/docs/src/development/derivative_UQME.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{1} diff --git a/docs/src/development/derivativs_eigenvalue.aux b/docs/src/development/derivativs_eigenvalue.aux new file mode 100644 index 00000000..b6401217 --- /dev/null +++ b/docs/src/development/derivativs_eigenvalue.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{1} diff --git a/docs/src/development/derivativs_eigenvalue.pdf b/docs/src/development/derivativs_eigenvalue.pdf new file mode 100644 index 0000000000000000000000000000000000000000..47f5e1339b39441f0de52a494ef7617409699815 GIT binary patch literal 35396 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