diff --git a/doc/guide.tex b/doc/guide.tex index 4aa2c09f54bb044cd533db729afdb49e889a3f43..f98d76f8d9f74451b20204be85bf6192fb3592ee 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -3,11 +3,11 @@ \usepackage[cp850]{inputenc} \begin{document} -\title{Stochastic simulations with {\sc Dynare}. A practical guide.} -\author{Fabrice Collard (GREMAQ, University of Toulouse)\\Adapted for Dynare 2.5.2\\ by Michel Juillard (CEPREMAP and University Paris 8)} -\date{First draft: February 2001\hspace{10mm}This draft: January 2003.} +\title{Stochastic simulations with {\sc Dynare}. \\ A practical guide.} +\author{Fabrice Collard (GREMAQ, University of Toulouse)\\Adapted for Dynare 4.1\\ by Michel Juillard and S\'ebastien Villemot (CEPREMAP)} +\date{First draft: February 2001\hspace{10mm}This draft: December 2009.} \maketitle -This document describes a model involving both endogenous and exogenous state variable. We first describe the theoretical model, before showing how the perturbation method is implemented in {\sc Dynare} (MATLAB version). +This document describes a model involving both endogenous and exogenous state variable. We first describe the theoretical model, before showing how the perturbation method is implemented in {\sc Dynare}. \section{A theoretical model} We consider an economy that consists of a large number of dynastic households and a large number of firms. Firms are producing a homogeneous final product that can be either consumed or invested by means of capital and labor services. Firms own their capital stock and hire labor supplied by the households. Households own the firms. In each and every period three perfectly competitive markets open --- the markets for consumption goods, labor services, and financial capital in the form of firms' shares. @@ -90,16 +90,15 @@ The dynamic equilibrium of this economy follows from the first order conditions &&b_t=\tau a_{t-1}+\rho b_{t-1}+\nu_t \end{eqnarray*} \section{The {\sc dynare} code} -The dynare code is straightforward to write, as the equilibrium is written in the natural way. The whole code is reported at the end of the section. Before that we proceed step by step. +The {\sc dynare} code is straightforward to write, as the equilibrium is written in the natural way. The whole code is reported at the end of the section. Before that we proceed step by step. \paragraph{Preamble} -The preamble consists of the some declarations to setup the number of periods the model should be simulated, the endogenous and exogenous variables, the parameters and assign values to these parameters. +The preamble consists of the some declarations to setup the endogenous and exogenous variables, the parameters and assign values to these parameters. \begin{enumerate} -\item {\tt periods 20100}; specifies that the model will be simulated over 20100 periods in order to compute the moments of the simulated variables. \item {\tt var y, c, k, h, a, b;} specifies the endogenous variables in the model since we have output ({\tt y}), consumption ({\tt c}), capital ({\tt k}), hours ({\tt h}) and the two shocks ({\tt a, b}). -\item {\tt varexo e, u}; specifies the exogenous variables in the model --- namely the innovations of the shocks, since we have the innovation of the non--incorporated shock ({\tt e}), and the innovation of the incorporated shock ({\tt u}). +\item {\tt varexo e, u;} specifies the exogenous variables in the model --- namely the innovations of the shocks, since we have the innovation of the non--incorporated shock ({\tt e}), and the innovation of the incorporated shock ({\tt u}). \item {\tt parameters list;} specifies the list of parameters of the model. In the case we are studying: -{\tt parameters beta, alpha, delta, theta, psi, rho, tau} +{\tt parameters beta, alpha, delta, theta, psi, rho, tau;} \begin{tabular}{ll} \hline @@ -137,7 +136,7 @@ theta = 2.95; This step is done in a straightforward way. It starts with the instruction {\tt model;} and ends with {\tt end;}, in between all equilibrium conditions are written exactly the way we write it ``by hand''. However, there is a simple rule that should be kept in mind when the model is written. Let us consider a variable $x$: \begin{itemize} \item If $x$ is decided in period $t$ then we simply write ${\tt x}$. -\item When the variable is decided in $t-1$, such as the capital stock in our simple model, we write $x(-1)$. \item Finally, when a variable is decided in the next period, $t+1$, such as consumption in the Euler equation, we write $x(+1)$. +\item When the variable is decided in $t-1$, such as the capital stock in our simple model, we write ${\tt x(-1)}$. \item Finally, when a variable is decided in the next period, $t+1$, such as consumption in the Euler equation, we write ${\tt x(+1)}$. \end{itemize} Hence the required code to declare our model in {\sc Dynare} will be: \begin{verbatim} @@ -182,72 +181,60 @@ end; Alternatively, we could provide only approximated values. {\sc Dynare} would then automatically compute the exact values. -\item We then specify the innovations and their matrix of variance--covariance. This is done using the {\tt Sigma\_e} command. As the matrix is symmetrical, one enters onlys the upper (or lower) triangular part: -\begin{verbatim} -Sigma_e = [ 0.000081, (phi*0.009*0.009); ... - 0.000081]; -\end{verbatim} -where the variance of both innovations is set to {\tt 0.000081} and the correlation between them is equal to $\varphi$. Note that if an element is computed as an expression, this expression must be put in parenthese. In the {\tt Sigma\_e} command, the shock variables are ordered as in the {\tt varexo} declaration. - -Alternatively, it is possible to use a {\tt shock;} and {\tt end;} block and declare only the nonzero elements of the covariance matrix: +\item We then specify the innovations and their matrix of variance--covariance. This is done using a {\tt shocks;} and {\tt end;} block and declare only the nonzero elements of the covariance matrix: \begin{verbatim} shocks; -var e = 0.009^2; -var u = 0.009^2; -var e,u = phi*0.009*0.009; -end; +var e; stderr 0.009; +var u; stderr 0.009; +var e, u = phi*0.009*0.009; +end; \end{verbatim} -Note that in the current version of {\sc Dynare}, it isn't possible to shut down of shock by assigning it a zero variance. To shut down a shock the variable must be removed from the {\tt varexo} and {\tt initval} list, added to the {\tt parameters} list and assigned a value of zero. +Note that it is possible to shut down a shock by assigning it a zero variance. -\item The model is then solved and simulated using the {\tt stoch\_simul;} command. By default, the coefficients of the approximated decision rules are reported as well as the moments of the simulated variables and impulse response functions for each exogenous shocks are ploted. In addition, the following options are aavailable: +\item The model is then solved and simulated using the {\tt stoch\_simul;} command. By default, the coefficients of the approximated decision rules are reported as well as the moments of the variables and impulse response functions for each exogenous shocks are ploted. In addition, the following options are available (out of many others): \begin{itemize} -\item {\tt DR\_ALG0 = [0,1]}: Specify the algorithm used to compute the quadratic approximation of the decision rules. [0] (default) uses a ``pure'' perturbation method as in \cite{SGU/02}; [1] moves the point around which the Taylor approximation is computed toward the mean of the distribution as in \cite{COLL/JUIL/01a}. -\item AR = Integer +\item {\tt ar} = Integer: Order of autocorrelation coefficients to compute and to print (default = 5) -\item NOCORR +\item {\tt periods} = Integer: +If different from zero, the model will be simulated and empirical moments will be computed instead of theoretical moments. The value of the option specifies the number of periods to use in the simulations (default = 0) +\item {\tt nocorr}: Doesn't print the correlation matrix (default = PRINT) -\item DROP = Integer +\item {\tt drop} = Integer: Number of points dropped at the beginning of simulation before computing the summary statistics (default = 100) -\item IRF = Integer +\item {\tt irf} = Integer: Number of periods on which to compute the IRFs (default = 40) -\item NOFUNCTIONS +\item {\tt nofunctions}: Doesn't print the coefficients of the approximated solution -\item LINEAR -Indicates that the original model is linear -\item NOMOMENTS +\item {\tt nomoments}: Doesn't print moments of the endogenous variables -\item ORDER = [1,2] +\item {\tt order} = [1,2,3]: Order of Taylor approximation (default = 2) -\item REPLIC = Integer +\item {\tt replic} = Integer: Number of simulated series used to compute the IRFs (default = 1, if order = 1, and 50 otherwise) \end{itemize} -The simulated trajectories are returned in MATLAB vectors named as the variables (be careful not to use MATLAB reserved names such as INV for your variables \ldots). Note that the specification of the variance--covariance matrix of the shocks is enough to compute a second order approximation of the policy function. In addition, for the simulation and the computation of moments, {\sc Dynare} assumes that the shocks follow a normal distribution. -In our example, we use simply +In our first example, we use simply: \begin{verbatim} stoch_simul; \end{verbatim} +{\sc Dynare} will compute theoretical moments of variables. -If one wants to use the algorithm in \cite{COLL/JUIL/01a} and to drop 200 initial values instead of 100, one would write +In our second example, we use: \begin{verbatim} -simul_stoch(dr_algo=1,drop=200); +stoch_simul(periods=2000, drop=200); \end{verbatim} +{\sc Dynare} will compute simulated moments of variables. The simulated trajectories are returned in MATLAB vectors named as the variables (be careful not to use MATLAB reserved names such as INV for your variables \ldots). \end{enumerate} -\clearpage - -\begin{center} -{\sc Dynare code for the model in level} -\end{center} -Here is the model file for the model in level. The last instructions are regular MATLAB commands for graphics. It can be found in file {\tt example1.mod}. +\appendix +\section{{\sc Dynare} code for the model in level} +Here is the model file for the model in level. It can be found in file {\tt example1.mod}. \begin{verbatim} -periods 20100; - var y, c, k, a, h, b; -varexo e,u; +varexo e, u; -parameters beta, rho, beta, alpha, delta, theta, psi, tau; +parameters beta, rho, alpha, delta, theta, psi, tau; alpha = 0.36; rho = 0.95; @@ -256,6 +243,7 @@ beta = 0.99; delta = 0.025; psi = 0; theta = 2.95; + phi = 0.1; model; @@ -279,23 +267,24 @@ e = 0; u = 0; end; -Sigma_e = [ 0.000081, phi*0.009*0.009; 0.000081 ]; +shocks; +var e; stderr 0.009; +var u; stderr 0.009; +var e, u = phi*0.009*0.009; +end; + stoch_simul; \end{verbatim} -\newpage -\begin{center} -{\sc Dynare code for the model in logs} -\end{center} -Here is the model file for the model in logs. In this case, {\tt initval} only contains guessed values and {\tt steady} is used to compute and display the exact value of the deterministic equilibrium. The shocks are supposed to be uncorrelated. Also, Collard \& Juillard (2001) algorithm is used. The model file can be found in {\tt example2.mod}. +\section{{\sc Dynare} code for the model in logs} -\begin{verbatim} -periods 20100; +Here is the model file for the model in logs. In this case, {\tt initval} only contains guessed values and {\tt steady} is used to compute and display the exact value of the deterministic equilibrium. The shocks are supposed to be uncorrelated. The model file can be found in {\tt example2.mod}. +\begin{verbatim} var y, c, k, a, h, b; -varexo e,u; +varexo e, u; -parameters beta, rho, beta, alpha, delta, theta, psi, tau; +parameters beta, rho, alpha, delta, theta, psi, tau; alpha = 0.36; rho = 0.95; @@ -333,7 +322,7 @@ var e = 0.009^2; var u = 0.009^2; end; -stoch_simul(dr_algo=1,drop=200); +stoch_simul(periods=2000, drop=200); \end{verbatim} \bibliographystyle{Usmad} \bibliography{/papers/biblio/michel} diff --git a/tests/Makefile.am b/tests/Makefile.am index 41322bb311deaa0912b29254588d590c62c41472..55bcd42f4d2514fcc21d06d578343e3cc7545ae9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -5,6 +5,7 @@ OCTAVE_MODS = \ ramst.mod \ ramst_a.mod \ example1.mod \ + example2.mod \ example1_use_dll.mod \ t_sgu_ex1.mod \ ramsey.mod \ diff --git a/tests/example1.mod b/tests/example1.mod index eb197c63d0f4dce386d3bfad64e891d4c18af728..638302fbedb7e6fdfebd94abd0fafdbfe202508c 100644 --- a/tests/example1.mod +++ b/tests/example1.mod @@ -1,8 +1,8 @@ -// example 1 from Collard's guide to Dynare +// Example 1 from Collard's guide to Dynare var y, c, k, a, h, b; -varexo e,u; +varexo e, u; -parameters beta, rho, alpha, delta, theta, psi, tau, phi; +parameters beta, rho, alpha, delta, theta, psi, tau; alpha = 0.36; rho = 0.95; @@ -28,7 +28,7 @@ initval; y = 1.08068253095672; c = 0.80359242014163; h = 0.29175631001732; -k = 5; +k = 11.08360443260358; a = 0; b = 0; e = 0; diff --git a/tests/example1_use_dll.mod b/tests/example1_use_dll.mod index 4e630c21ece20035e56432f22a768e0f31ddd5c0..66bbe7c5c8a6e89340d29315492f7c9bd49108ac 100644 --- a/tests/example1_use_dll.mod +++ b/tests/example1_use_dll.mod @@ -1,9 +1,9 @@ // Test USE_DLL option at order 2 var y, c, k, a, h, b; -varexo e,u; +varexo e, u; -parameters beta, rho, alpha, delta, theta, psi, tau, phi; +parameters beta, rho, alpha, delta, theta, psi, tau; alpha = 0.36; rho = 0.95; @@ -29,7 +29,7 @@ initval; y = 1.08068253095672; c = 0.80359242014163; h = 0.29175631001732; -k = 5; +k = 11.08360443260358; a = 0; b = 0; e = 0; diff --git a/tests/example2.mod b/tests/example2.mod index 3c01e7e2b7b0ba260c17f96d729930dde676e448..6022f3e8a62f42966a1568f4d0499863da34eb67 100644 --- a/tests/example2.mod +++ b/tests/example2.mod @@ -1,8 +1,8 @@ -// example 2 from Collard's guide to Dynare +// Example 2 from Collard's guide to Dynare var y, c, k, a, h, b; -varexo e,u; +varexo e, u; -parameters beta, rho, beta, alpha, delta, theta, psi, tau ; +parameters beta, rho, alpha, delta, theta, psi, tau; alpha = 0.36; rho = 0.95; @@ -40,5 +40,4 @@ var e = 0.009^2; var u = 0.009^2; end; -stoch_simul(dr_algo=1,drop=200); - +stoch_simul(periods=2000, drop=200);