diff --git a/doc/dseries-and-reporting/dseriesReporting.tex b/doc/dseries-and-reporting/dseriesReporting.tex index 4b46bf9ef..10bb85a37 100644 --- a/doc/dseries-and-reporting/dseriesReporting.tex +++ b/doc/dseries-and-reporting/dseriesReporting.tex @@ -1,6 +1,6 @@ \documentclass[10pt]{beamer} -\usepackage{tikz} +\usepackage{tikz, hyperref, alltt} \usetikzlibrary{positioning,shapes,shadows,arrows} \tikzstyle{abstract}=[rectangle, rounded corners, draw=black, anchor=north, fill=blue!10, text centered, minimum height={height("Gp")+2pt}, minimum width=3cm, font=\footnotesize] @@ -32,10 +32,12 @@ \setbeamertemplate{frametitle continuation}[from second] \title{Dynare Time Series \& Reporting} -\author{Houtan Bastani} +\author[Houtan Bastani]{Houtan Bastani\newline\href{mailto:houtan@dynare.org}{houtan@dynare.org}} \institute{CEPREMAP} \date{13 June 2014} +\newcommand{\myitem}{\item[$\bullet$]} + \begin{document} \begin{frame} @@ -56,11 +58,95 @@ \begin{frame}[fragile,t] \frametitle{Overview} \begin{itemize} - \item Provide support for time series in Dynare - \item Introduced in Dynare 4.4 - \item Currently only used for reporting - \item Use will increase with time (\textit{e.g.,} to be included in new estimation code) - \item NB: More complete information is included in the Dynare manual + \myitem Provide support for time series (\texttt{dseries}) + \begin{itemize} + \myitem Based on an implementation for handling dates (\texttt{dates}) + \end{itemize} + \myitem Introduced in Dynare 4.4 + \myitem Currently only used for reporting, though use will increase with time + (\textit{e.g.,} to be included in new estimation code) + \myitem Compatible with all setups that are supported by Dynare + \begin{itemize} + \myitem Windows, Mac OS X, Linux + \myitem Matlab 7.5 (R2007b) or later, Octave + \end{itemize} + \myitem NB: More complete information is included in the Dynare manual + \end{itemize} +\end{frame} + + +\subsection{A Programming Note} +\begin{frame}[fragile,t] + \frametitle{A Programming Note (1/2)} + \begin{itemize} + \myitem Time series and dates are implemented as Matlab/Octave classes + \myitem Inplace modification of instantiated objects not supported. Let me explain \dots + \begin{itemize} + \myitem A class is a template for defining objects, defining their member + variables and methods. + \begin{itemize} + \myitem \textit{e.g.,} The \texttt{dates} class defines 3 member + variables--\texttt{ndat}, \texttt{freq}, and \texttt{time}--and many + methods (analogous to functions) + \end{itemize} + \myitem An object is an instance of a specific class. For exemplary + purposes, imagine an object \texttt{X}, which is an instantiation of the + class ``Integer''. The object has value \texttt{1}: +\begin{verbatim} +>> X + +X = + + 1 +\end{verbatim} + \myitem You can call any method defined for the integer class on integer + object \texttt{X}. Imagine such a method is called + \texttt{multiplyByTwo()}. + \myitem In most object-oriented + languages, writing \texttt{X.multiplyByTwo();} will change the value + contained in \texttt{X} to \texttt{2/2} + \end{itemize} + \end{itemize} +\end{frame} + + +\begin{frame}[fragile,t] + \frametitle{A Programming Note (2)} + \begin{itemize} + \item[] \begin{itemize} + \myitem But! For Matlab/Octave's implementation of classes this is not the + case as it does not support inplace modification +\begin{verbatim} +>> X.multiplyByTwo() + +ans = + + 2 + +>> X + +X = + + 1 +\end{verbatim} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}[fragile,t] + \frametitle{A Programming Note (concluded)} + \begin{itemize} + \item[] \begin{itemize} + \myitem To get the desired change, you must overwrite \texttt{X} +\begin{verbatim} +>> X=X.multiplyByTwo() + +X = + + 2 +\end{verbatim} +\myitem Keep this in mind when using Dynare dates, time series, and reporting + \end{itemize} \end{itemize} \end{frame} @@ -69,10 +155,10 @@ \begin{frame}[fragile,t] \frametitle{Syntax} \begin{itemize} - \item Two components of a time series: + \myitem Two components of a time series: \begin{itemize} - \item A time component. In Dynare: \texttt{dates} - \item A data component mapped to time. In Dynare: \texttt{dseries} + \myitem A time component. In Dynare: \texttt{dates} + \myitem A data component mapped to time. In Dynare: \texttt{dseries} \end{itemize} \end{itemize} \end{frame} @@ -81,164 +167,204 @@ \begin{frame}[fragile,t] \frametitle{\texttt{dates} Syntax} \begin{itemize} - \item The \texttt{dates} command creates an object that represents at least one date at a given frequency + \myitem The \texttt{dates} command creates an object that represents at least one date at a given frequency + \myitem A \texttt{dates} object contains 3 members (fields): \begin{itemize} - \item Yearly: \texttt{`Y', `y', 1} - \item Quarterly: \texttt{`Q', `q', 4} - \item Monthly: \texttt{`M', `m', 12} - \item Weekly: \texttt{`W', `w', 52} + \myitem{\textbf{\texttt{freq}}}: 1 (Annual), 4 (Quarterly), 12 (Monthly), 52 (Weekly) + \myitem{\textbf{\texttt{ndat}}}: The number of dates + \myitem{\textbf{\texttt{time}}}: An \texttt{ndat$\times$2} matrix; the 1\textsuperscript{st} col is the year and the 2\textsuperscript{nd} col is the period \end{itemize} - \item It has two slightly different syntaxes + \myitem Date members cannot be modified. Thus, this is not allowed: +\begin{alltt} + >> dd.freq = 12; +\end{alltt} + \myitem Can index a \texttt{dates} object. If \texttt{t} is a \texttt{dates} object, then \begin{itemize} - \item One for inclusion in \texttt{.m} files - \item One for inclusion in \texttt{.mod} files (simplified using the preprocessor) - \begin{itemize} - \item To prevent date translation, escape the date with `\texttt{\$}' (\textit{e.g.,} \texttt{\$2020y}) - \end{itemize} - \end{itemize} - \item Minimal restrictions on dates. Can be - \begin{itemize} - \item Negative - \item Empty - \item Noncontiguous - \end{itemize} - \item Can index a \texttt{dates} object. If \texttt{t} is a \texttt{dates} object, then - \begin{itemize} - \item \texttt{t(1) \% refers to the first date} - \item \texttt{t(1:3) \% refers to the first three dates} - \item \texttt{t([1,4,5]) \% refers to the first, fourth, and fifth dates} + \myitem \texttt{t(1) \% refers to the first date} + \myitem \texttt{t(1:3) \% refers to the first three dates} + \myitem \texttt{t([1,4,5]) \% refers to the first, fourth, and fifth dates} \end{itemize} \end{itemize} \end{frame} \begin{frame}[fragile,t] - \frametitle{Creating a new \texttt{dates} object} + \frametitle{Creating a new \texttt{dates} object in Matlab/Octave} \begin{itemize} - \item A single date: - \begin{itemize} - \item In a \texttt{.m} file: \texttt{t = dates(`1999y');} - \item In a \texttt{.mod} file: \texttt{t = 1999y;} - \end{itemize} - \item A date range: - \begin{itemize} - \item In a \texttt{.m} file: \texttt{dr = dates(`1999y'):dates(`2020y');} - \item In a \texttt{.mod} file: \texttt{dr = 1999y:2020y;} - \end{itemize} - \item In what follows, \texttt{t} and \texttt{dr} are as above. Operations that assign to \texttt{t} and \texttt{dr} keep the value thereafter. + \myitem{A single date} +\begin{alltt} + >> t = dates(`1999y'); +\end{alltt} + \myitem{Multiple dates} +\begin{alltt} + >> t = dates(`1999q1', `2020q2', `-190q3'); +\end{alltt} +Notice that noncontiguous and negative dates are possible + \myitem{A date range} +\begin{alltt} + >> dr = dates(`1999y'):dates(`2020y'); +\end{alltt} + \myitem Can also create \texttt{dates} programatically +\begin{alltt} + >> t = dates(4, [1990; 1990; 1978], [1; 2; 3]) + t = +\end{alltt} + \myitem Can specify an empty \texttt{dates}\dots +\begin{alltt} + >> qq = dates(`Q'); + >> qq = dates(4); +\end{alltt} + \myitem \dots and use it to instantiate new \texttt{dates} +\begin{alltt} + >> t = qq(1990, 1); + t = +\end{alltt} +\begin{alltt} + >> t = qq([1990; 1990; 1978], [1; 2; 3]) + t = +\end{alltt} + \end{itemize} +\end{frame} + + + +\begin{frame}[fragile,t] + \frametitle{Creating a new \texttt{dates} object in a \texttt{.mod} file} + \begin{itemize} + \myitem The preprocessor allows for syntax simplification when + \texttt{dates} are in \texttt{.mod} files + \myitem{A single date} \texttt{t = 1999y;} +\begin{alltt} + \(\Rightarrow\) t = dates(`1999y'); +\end{alltt} + \myitem{Multiple dates} \texttt{t = [1999q1 2020q2 1960q3];} +\begin{alltt} + \(\Rightarrow\) t = [dates(`1999q1') dates(`2020q2') dates(`1960q3')]; +\end{alltt} + \myitem{A date range} \texttt{dr = 1999y:2020y;} +\begin{alltt} + \(\Rightarrow\) dr = dates(`1999y'):dates(`2020y'); +\end{alltt} + \myitem NB: This can cause problems when dates are included in strings. \textit{e.g.,} +\begin{alltt} + disp(`In 1999q1, ...') +\end{alltt} +would be transformed into +\begin{alltt} + disp(`In dates(`1999q1'), ...') +\end{alltt} + \myitem To fix this, simply escape any date that you don't want transformed by the preprocessor with a `\texttt{\$}' +\begin{alltt} + disp(`In $1999q1, ...') +\end{alltt} + \end{itemize} \end{frame} \begin{frame}[fragile,t] - \frametitle{Modifying \texttt{dates}} + \frametitle{Collections and Ranges of \texttt{dates} in a \texttt{.mod} file} \begin{itemize} - \item \texttt{append}: appends a date to the date - \begin{itemize} - \item \texttt{t=t.append(dates(`1900y')); \% } - \end{itemize} - \item \texttt{horzcat}: horizontal concatenation - \begin{itemize} - \item \texttt{[t t]; \% }; - \end{itemize} - \item \texttt{minus}: either the distance between two \texttt{dates} or lag one \texttt{dates} - \begin{itemize} - \item \texttt{t-t \% [0 0]'} - \item \texttt{t-[3 3]' \% } - \end{itemize} - \item \texttt{plus}: either combine two \texttt{dates} or forward one \texttt{dates} - \begin{itemize} - \item \texttt{t+t \% } - \item \texttt{t+[3 3]' \% } - \end{itemize} - \item \texttt{pop}: remove last element - \begin{itemize} - \item \texttt{t.pop(); \% } - \end{itemize} - \item \texttt{sort}: sort dates in ascending order - \begin{itemize} - \item \texttt{t.sort(); \% } - \end{itemize} - \item \texttt{uminus}: shifts dates back one period - \begin{itemize} - \item \texttt{-t; \% } - \end{itemize} - \item \texttt{unique}: removes repetitions (keeping last unique value) - \begin{itemize} - \item \texttt{t.append(dates(`1999y')).unique() \% } - \end{itemize} - \item \texttt{uplus}: shifts dates forward one period - \begin{itemize} - \item \texttt{++t; \% } - \end{itemize} + \myitem A collection of \texttt{dates} + \begin{alltt} + a = 1990Q1; b = 1957Q1; c = -52Q1; + d = [a b c]; + \(\Rightarrow\) d = + \end{alltt} + \myitem A Range of \texttt{dates} + \begin{alltt} + a = 1990Q3:1991Q2 + \(\Rightarrow\) a = + \end{alltt} + \myitem A set of regularly-spaced \texttt{dates} + \begin{alltt} + a = 1990Q3:2:1991Q2 + \(\Rightarrow\) a = + \end{alltt} \end{itemize} \end{frame} \begin{frame}[fragile,t] - \frametitle{Getting info about \texttt{dates}} + \frametitle{Comparing \texttt{dates}} \begin{itemize} - \item \texttt{char}: returns a single date as a string - \begin{itemize} - \item \texttt{t(1).char() \% 1999Y} - \end{itemize} - \item \texttt{double}: returns a floating point representation of the date - \begin{itemize} - \item \texttt{t.double() \% [1999 1900]'} - \end{itemize} - \item \texttt{freq}: returns the frequency - \begin{itemize} - \item \texttt{t.freq; \% 1} - \end{itemize} - \item \texttt{isequal}: returns true if the two arguments are equal - \begin{itemize} - \item \texttt{isequal(t,t) \% 1} - \end{itemize} - \item \texttt{length}: returns the number of dates - \begin{itemize} - \item \texttt{t.length() \% 2} - \end{itemize} - \item \texttt{max}: returns the maximum \texttt{dates} in the arguments - \begin{itemize} - \item \texttt{max(t,dr) \% } - \end{itemize} - \item \texttt{min}: returns the minimum \texttt{dates} in the arguments - \begin{itemize} - \item \texttt{min(t,dr) \% } - \end{itemize} - \item \texttt{eq, ge, gt, le, lt, ne}: returns boolean value of comparison - \begin{itemize} - \item \texttt{t==t \% [1 1]'} - \item \texttt{t>=dates(`1950y') \% [1 0]'} - \item \texttt{t$\thicksim$=dates(`1999y') \% [0 1]'} - \end{itemize} + \myitem The following comparison operators are supported: $==$, $\backsim=$, $<$, $\leq$, $>$, and $\geq$ + \myitem Compared objects must have the same frequency + \myitem Compared objects must have the same number of elements (except for singletons) + \myitem Returns the result of an element-wise comparison + \myitem Let \texttt{a=[1999W1 2020W3]}, \texttt{b=1999W1}, and \texttt{c=[1888w1 2020w3]}. Then + \begin{alltt} + >> a == b >> a > b >> c < a + + ans = ans = ans = + + 1 0 1 + 0 1 0 + \end{alltt} \end{itemize} \end{frame} + + +\begin{frame}[fragile,t] + \frametitle{Arithmetic Operations on \texttt{dates}} + \begin{itemize} + \myitem The unary \texttt{+} and \texttt{-} operators + \begin{alltt} + >> a = dates(`1999q4'); + >> +a \(\Rightarrow\) ans = 2000q1 + >> -a \(\Rightarrow\) ans = 1999q3 + >> ++-+a \(\Rightarrow\) ans = 2000q2 + \end{alltt} + \myitem The binary \texttt{+} and \texttt{-} operators + \begin{itemize} + \myitem Objects must have the same frequency + \myitem Objects must have the same number of elements (except for singletons) + \myitem \texttt{1999q4 + 2} $\Rightarrow$ \texttt{ans = 2000q2} + \myitem \texttt{1999w4 + 2} $\Rightarrow$ \texttt{ans = 1999w6} + \myitem \texttt{1999m4 - 2} $\Rightarrow$ \texttt{ans = 1999m2} + \myitem \texttt{1999m4 - 1999m2} $\Rightarrow$ \texttt{ans = 2} + \myitem \texttt{1999m4 + 1999m2} $\Rightarrow$ \texttt{ans = } + \end{itemize} + \myitem The binary \texttt{*} operator + \begin{alltt} + >> a*3 + ans = + \end{alltt} + \end{itemize} +\end{frame} + + + \begin{frame}[fragile,t] \frametitle{Set Operations on \texttt{dates}} \begin{itemize} - \item \texttt{intersect}: returns the intersection of the arguments - \begin{itemize} - \item \texttt{intersect(t,dr) \% } - \end{itemize} - \item \texttt{isempty}: returns true if the argument is empty - \begin{itemize} - \item \texttt{isempty(t) \% 0} - \item \texttt{isempty(dates()) \% 1} - \end{itemize} - \item \texttt{setdiff}: returns dates present in first arg but not in second - \begin{itemize} - \item \texttt{setdiff(t,dr) \% } - \end{itemize} - \item \texttt{union}: - \begin{itemize} - \item \texttt{union(dr,t) \% } - \end{itemize} + \myitem Let \texttt{a = [1990Q1:1991Q1 1990Q1]; b = [1990Q3:1991Q3];} + \myitem \texttt{intersect}: returns the intersection of the arguments + \begin{alltt} + >> intersect(a, b) + ans = + \end{alltt} + \myitem \texttt{setdiff}: returns dates present in first arg but not in second + \begin{alltt} + >> setdiff(a, b) + ans = + \end{alltt} + \myitem \texttt{union}: returns the union of two sets (repititions removed) + \begin{alltt} + union(a, b) + ans = + \end{alltt} + \myitem \texttt{unique}: removes repititions from set (keeps last unique value) + \begin{alltt} + >> unique(a) + ans = + \end{alltt} \end{itemize} \end{frame} + % % DSERIES % @@ -246,9 +372,9 @@ \begin{frame}[fragile,t] \frametitle{\texttt{dseries} Syntax} \begin{itemize} - \item A \texttt{dseries} is composed of one or more individual series - \item All time series in a dseries must have the same frequency - \item A \texttt{dseries} runs from the earliest date to the latest date, with \texttt{NaN}'s inserted to pad the shorter series + \myitem A \texttt{dseries} is composed of one or more individual series + \myitem All time series in a dseries must have the same frequency + \myitem A \texttt{dseries} runs from the earliest date to the latest date, with \texttt{NaN}'s inserted to pad the shorter series \end{itemize} \end{frame} @@ -256,22 +382,22 @@ \begin{frame}[fragile,t] \frametitle{Creating a new \texttt{dseries} object} \begin{itemize} - \item Load series from data file (\texttt{.csv, .xls}). Dates in first column, optional variable names in first row + \myitem Load series from data file (\texttt{.csv, .xls}). Dates in first column, optional variable names in first row \begin{itemize} - \item \texttt{ts=dseries(`data.csv');} + \myitem \texttt{ts=dseries(`data.csv');} \end{itemize} - \item Load series from a Matlab/Octave file (\texttt{.m, .mat}). Must define the variables \texttt{INIT\_\_}, \texttt{NAMES\_\_}, and, optionally, \texttt{TEX\_\_}. + \myitem Load series from a Matlab/Octave file (\texttt{.m, .mat}). Must define the variables \texttt{INIT\_\_}, \texttt{NAMES\_\_}, and, optionally, \texttt{TEX\_\_}. \begin{itemize} - \item \texttt{ts=dseries(`data.m');} + \myitem \texttt{ts=dseries(`data.m');} \end{itemize} - \item Load data directly. Here: one variable, `MyVar1', with three annual observations starting in 1999. Only first argument is required. + \myitem Load data directly. Here: one variable, `MyVar1', with three annual observations starting in 1999. Only first argument is required. \begin{itemize} - \item \texttt{ts=dseries([1;2;3], `1999y', \{`MyVar1'\}, \{`MyVar\_1'\});} + \myitem \texttt{ts=dseries([1;2;3], `1999y', \{`MyVar1'\}, \{`MyVar\_1'\});} \end{itemize} - \item Create an empty time series. Usefull for programatically creating a series. + \myitem Create an empty time series. Usefull for programatically creating a series. \begin{itemize} - \item \texttt{ts=dseries();} - \item \texttt{ts=dseries(dates(`1999y'));} + \myitem \texttt{ts=dseries();} + \myitem \texttt{ts=dseries(dates(`1999y'));} \end{itemize} \end{itemize} \end{frame} @@ -280,31 +406,31 @@ \begin{frame}[fragile,t] \frametitle{Referencing data from a \texttt{dseries}} \begin{itemize} - \item For the following, let + \myitem For the following, let \begin{itemize} - \item \texttt{ts1=dseries([1;2;3], `1999y', \{`MyVar1'\}, \{`MyVar\_1'\})} - \item \texttt{ts2=dseries([4;5;6], `2000y', \{`MyVar2'\}, \{`MyVar\_2'\})} - \item \texttt{ts3=[ts1 ts2]} + \myitem \texttt{ts1=dseries([1;2;3], `1999y', \{`MyVar1'\}, \{`MyVar\_1'\})} + \myitem \texttt{ts2=dseries([4;5;6], `2000y', \{`MyVar2'\}, \{`MyVar\_2'\})} + \myitem \texttt{ts3=[ts1 ts2]} \end{itemize} - \item To get \texttt{MyVar1} from \texttt{t3}, you have three options + \myitem To get \texttt{MyVar1} from \texttt{t3}, you have three options \begin{itemize} - \item \texttt{ts3\{1\}} - \item \texttt{ts3.MyVar1} - \item \texttt{ts3\{`MyVar1'\}} + \myitem \texttt{ts3\{1\}} + \myitem \texttt{ts3.MyVar1} + \myitem \texttt{ts3\{`MyVar1'\}} \end{itemize} - \item To select a subsample of MyVar2 from 2001 to 2002: + \myitem To select a subsample of MyVar2 from 2001 to 2002: \begin{itemize} - \item \texttt{ts3\{2\}(dates(`2001y'):dates(`2002y'))} - \item \texttt{ts3.MyVar2(dates(`2001y'):dates(`2002y'))} - \item \texttt{ts3\{`MyVar2'\}(dates(`2001y'):dates(`2002y'))} + \myitem \texttt{ts3\{2\}(dates(`2001y'):dates(`2002y'))} + \myitem \texttt{ts3.MyVar2(dates(`2001y'):dates(`2002y'))} + \myitem \texttt{ts3\{`MyVar2'\}(dates(`2001y'):dates(`2002y'))} \end{itemize} - \item To see the data for both variables in 2000: + \myitem To see the data for both variables in 2000: \begin{itemize} - \item \texttt{ts3(`2000y')} - \item \texttt{ts3\{[1 2]\}(`2000y')} - \item \texttt{ts3\{`MyVar1',`MyVar2'\}(`2000y')} - \item \texttt{ts3\{`MyVar@1,2@'\}(`2000y')} - \item \texttt{ts3\{`MyVar[1-2]'\}(`2000y')} + \myitem \texttt{ts3(`2000y')} + \myitem \texttt{ts3\{[1 2]\}(`2000y')} + \myitem \texttt{ts3\{`MyVar1',`MyVar2'\}(`2000y')} + \myitem \texttt{ts3\{`MyVar@1,2@'\}(`2000y')} + \myitem \texttt{ts3\{`MyVar[1-2]'\}(`2000y')} \end{itemize} \end{itemize} \end{frame} @@ -313,22 +439,22 @@ \begin{frame}[fragile,t] \frametitle{Getting info about \texttt{dseries}} \begin{itemize} - \item \texttt{eq, ne}: returns boolean value of element-wise comparison; series must have same start dates and number of observations + \myitem \texttt{eq, ne}: returns boolean value of element-wise comparison; series must have same start dates and number of observations \begin{itemize} - \item \texttt{ts1==ts3.MyVar1(dates(`1999y'):dates(`2001y')) \% [1 1 1]'} - \item \texttt{ts1$\thicksim$=ts1 \% [0 0 0]'} + \myitem \texttt{ts1==ts3.MyVar1(dates(`1999y'):dates(`2001y')) \% [1 1 1]'} + \myitem \texttt{ts1$\thicksim$=ts1 \% [0 0 0]'} \end{itemize} - \item \texttt{isempty}: returns true if series is empty + \myitem \texttt{isempty}: returns true if series is empty \begin{itemize} - \item \texttt{isempty(dseries()) \% 1} + \myitem \texttt{isempty(dseries()) \% 1} \end{itemize} - \item \texttt{isequal}: returns true if the series are equal + \myitem \texttt{isequal}: returns true if the series are equal \begin{itemize} - \item \texttt{isequal(ts1,ts1) \% 1} + \myitem \texttt{isequal(ts1,ts1) \% 1} \end{itemize} - \item \texttt{size}: returns number of observations by number of variables + \myitem \texttt{size}: returns number of observations by number of variables \begin{itemize} - \item \texttt{ts3.size() \% [4 2]} + \myitem \texttt{ts3.size() \% [4 2]} \end{itemize} \end{itemize} \end{frame} @@ -337,33 +463,33 @@ \begin{frame}[fragile,t] \frametitle{Working with \texttt{dseries}} \begin{itemize} - \item \texttt{baxter\_king\_filter}: the Baxter and King (1999) band pass filter + \myitem \texttt{baxter\_king\_filter}: the Baxter and King (1999) band pass filter \begin{itemize} - \item \texttt{ts1.baxter\_king\_filter(high freq, low freq, K)} + \myitem \texttt{ts1.baxter\_king\_filter(high freq, low freq, K)} \end{itemize} - \item \texttt{hpcycle}: HP Filters the \texttt{dseries}, returning the business cycle component + \myitem \texttt{hpcycle}: HP Filters the \texttt{dseries}, returning the business cycle component \begin{itemize} - \item \texttt{ts1.hptrend(lambda) \% lambda = 1600 by default} + \myitem \texttt{ts1.hptrend(lambda) \% lambda = 1600 by default} \end{itemize} - \item \texttt{hptrend}: HP Filters the \texttt{dseries}, returning the trend component + \myitem \texttt{hptrend}: HP Filters the \texttt{dseries}, returning the trend component \begin{itemize} - \item \texttt{ts1.hptrend(lambda) \% lambda = 1600 by default} + \myitem \texttt{ts1.hptrend(lambda) \% lambda = 1600 by default} \end{itemize} - \item \texttt{qdiff}: Quarterly difference; works on quarterly, monthly, and weekly series + \myitem \texttt{qdiff}: Quarterly difference; works on quarterly, monthly, and weekly series \begin{itemize} - \item \texttt{ts1.qdiff()} + \myitem \texttt{ts1.qdiff()} \end{itemize} - \item \texttt{qgrowth}: Quarterly growth rate: $\frac{ts_t-ts_{t-1}}{ts_{t-1}}$. Works on quarterly, monthly, and weekly series + \myitem \texttt{qgrowth}: Quarterly growth rate: $\frac{ts_t-ts_{t-1}}{ts_{t-1}}$. Works on quarterly, monthly, and weekly series \begin{itemize} - \item \texttt{ts1.qgrowth()} + \myitem \texttt{ts1.qgrowth()} \end{itemize} - \item \texttt{yidff}: Yearly difference; works on yearly, quarterly, monthly, and weekly series + \myitem \texttt{yidff}: Yearly difference; works on yearly, quarterly, monthly, and weekly series \begin{itemize} - \item \texttt{ts1.ydiff()} + \myitem \texttt{ts1.ydiff()} \end{itemize} - \item \texttt{ygrowth}: Annual growth rate: $\frac{ts_t-ts_{t-1}}{ts_{t-1}}$. Works on yearly ($t-1$), quarterly ($t-4$), monthly ($t-12$), and weekly ($t-52$) series + \myitem \texttt{ygrowth}: Annual growth rate: $\frac{ts_t-ts_{t-1}}{ts_{t-1}}$. Works on yearly ($t-1$), quarterly ($t-4$), monthly ($t-12$), and weekly ($t-52$) series \begin{itemize} - \item \texttt{ts1.ygrowth()} + \myitem \texttt{ts1.ygrowth()} \end{itemize} \end{itemize} \end{frame} @@ -372,25 +498,25 @@ \begin{frame}[fragile,t] \frametitle{Operations on \texttt{dseries}} \begin{itemize} - \item \texttt{abs}: The absolute value of each data point - \item \texttt{cumprod}/\texttt{cumsum}: Cumulative product/sum - \item \texttt{exp}/\texttt{log}: The exponential/log for each data point - \item \texttt{mrdivide}/\texttt{mtimes}: Division/Multiplication - \item \texttt{minus}/\texttt{plus}: Subtraction/Addition - \item \texttt{mpower}: Power + \myitem \texttt{abs}: The absolute value of each data point + \myitem \texttt{cumprod}/\texttt{cumsum}: Cumulative product/sum + \myitem \texttt{exp}/\texttt{log}: The exponential/log for each data point + \myitem \texttt{mrdivide}/\texttt{mtimes}: Division/Multiplication + \myitem \texttt{minus}/\texttt{plus}: Subtraction/Addition + \myitem \texttt{mpower}: Power \begin{itemize} - \item \texttt{ts1-ts2} - \item \texttt{ts1-3} - \item \texttt{ts1-[1:3]'} + \myitem \texttt{ts1-ts2} + \myitem \texttt{ts1-3} + \myitem \texttt{ts1-[1:3]'} \end{itemize} - \item \texttt{lag}/\texttt{lead}: lag/lead the series + \myitem \texttt{lag}/\texttt{lead}: lag/lead the series \begin{itemize} - \item \texttt{ts1(-1)}/\texttt{ts1(2)} - \item \texttt{ts1.lag()}/\texttt{ts1.lead(2)} + \myitem \texttt{ts1(-1)}/\texttt{ts1(2)} + \myitem \texttt{ts1.lag()}/\texttt{ts1.lead(2)} \end{itemize} - \item \texttt{uminus}: Equivalent to multiplying by $-1$. + \myitem \texttt{uminus}: Equivalent to multiplying by $-1$. \begin{itemize} - \item \texttt{-ts1} + \myitem \texttt{-ts1} \end{itemize} \end{itemize} \end{frame} @@ -399,38 +525,38 @@ \begin{frame}[fragile,t] \frametitle{Modifying \texttt{dates}} \begin{itemize} - \item \texttt{align}: Makes both series cover the same time range by padding with \texttt{NaN}'s + \myitem \texttt{align}: Makes both series cover the same time range by padding with \texttt{NaN}'s \begin{itemize} - \item \texttt{[ts1,ts2]=align(ts1,ts2)} + \myitem \texttt{[ts1,ts2]=align(ts1,ts2)} \end{itemize} - \item \texttt{chain}: - \item \texttt{horzcat}: Join two or more \texttt{dseries} + \myitem \texttt{chain}: + \myitem \texttt{horzcat}: Join two or more \texttt{dseries} \begin{itemize} - \item \texttt{ts3=[ts1 ts2]} + \myitem \texttt{ts3=[ts1 ts2]} \end{itemize} - \item \texttt{insert}: Inserts variables from one \texttt{dseries} into another + \myitem \texttt{insert}: Inserts variables from one \texttt{dseries} into another \begin{itemize} - \item \texttt{ts1.insert(ts2, 2)} + \myitem \texttt{ts1.insert(ts2, 2)} \end{itemize} - \item \texttt{merge}: Merge two series - \item \texttt{pop}: remove the last variable from \texttt{dseries} - \item \texttt{plot}: plot a \texttt{dseries} - \item \texttt{rename}: Rename a variable in a dseries + \myitem \texttt{merge}: Merge two series + \myitem \texttt{pop}: remove the last variable from \texttt{dseries} + \myitem \texttt{plot}: plot a \texttt{dseries} + \myitem \texttt{rename}: Rename a variable in a dseries \begin{itemize} - \item \texttt{ts1.rename(`MyVar1',`MyFirstVar')} + \myitem \texttt{ts1.rename(`MyVar1',`MyFirstVar')} \end{itemize} - \item \texttt{save}: Save a \texttt{dseries} in either \texttt{.csv} (default), \texttt{.m}, or \texttt{.mat} - \item \texttt{set\_names}: Rename all variables in a \texttt{dseries} + \myitem \texttt{save}: Save a \texttt{dseries} in either \texttt{.csv} (default), \texttt{.m}, or \texttt{.mat} + \myitem \texttt{set\_names}: Rename all variables in a \texttt{dseries} \begin{itemize} - \item \texttt{ts3.set\_names(`NewName1',`NewName2')} + \myitem \texttt{ts3.set\_names(`NewName1',`NewName2')} \end{itemize} - \item \texttt{tex\_rename}: Rename the \LaTeX\ name for a given variable + \myitem \texttt{tex\_rename}: Rename the \LaTeX\ name for a given variable \begin{itemize} - \item \texttt{ts1.tex\_rename(`MyVar1',`MyVar\textbackslash\_1')} + \myitem \texttt{ts1.tex\_rename(`MyVar1',`MyVar\textbackslash\_1')} \end{itemize} - \item \texttt{vertcat}: Add more observations to existing \texttt{dseries} + \myitem \texttt{vertcat}: Add more observations to existing \texttt{dseries} \begin{itemize} - \item \texttt{[ts1; dseries(4,`2002y',`MyVar1')]} + \myitem \texttt{[ts1; dseries(4,`2002y',`MyVar1')]} \end{itemize} \end{itemize} \end{frame} @@ -450,32 +576,32 @@ \begin{frame} \frametitle{Overview} \begin{itemize} - \item Introduced in Dynare 4.4 - \item Introduce reporting functionality to Dynare + \myitem Introduced in Dynare 4.4 + \myitem Introduce reporting functionality to Dynare \begin{itemize} - \item Input: \texttt{dseries} - \item Output: \LaTeX\ report \& compiled \texttt{.pdf} + \myitem Input: \texttt{dseries} + \myitem Output: \LaTeX\ report \& compiled \texttt{.pdf} \end{itemize} - \item Graphs and Tables are modular + \myitem Graphs and Tables are modular \begin{itemize} - \item Can easily be included in another document + \myitem Can easily be included in another document \end{itemize} - \item Graphs are produced in Ti$k$Z/PGFPlots (standard in a TeX distribution) + \myitem Graphs are produced in Ti$k$Z/PGFPlots (standard in a TeX distribution) \begin{itemize} - \item Scales well - \item Formating follows that of enclosing document + \myitem Scales well + \myitem Formating follows that of enclosing document \end{itemize} - \item Dynare provides a subset of the many Ti$k$Z options + \myitem Dynare provides a subset of the many Ti$k$Z options \begin{itemize} - \item You can easily modify the Ti$k$Z graph if the option you want is not in Dynare + \myitem You can easily modify the Ti$k$Z graph if the option you want is not in Dynare \end{itemize} - \item Works with Matlab \& Octave - \item Works approximately 5 times faster than Iris reporting - \item NB: Must install a \LaTeX\ distribution to compile reports + \myitem Works with Matlab \& Octave + \myitem Works much faster than similar softawre + \myitem NB: Must install a \LaTeX\ distribution to compile reports \begin{itemize} - \item Windows: MiKTeX \url{http://miktex.org} - \item Mac OS X: MacTeX \url{http://tug.org/mactex} - \item Linux: TeX Live (from your package manager) + \myitem Windows: MiKTeX \url{http://miktex.org} + \myitem Mac OS X: MacTeX \url{http://tug.org/mactex} + \myitem Linux: TeX Live (from your package manager) \end{itemize} \end{itemize} \end{frame} @@ -484,18 +610,18 @@ \begin{frame} \frametitle{How Reporting Works} \begin{itemize} - \item Reports are created command by command + \myitem Reports are created command by command \begin{itemize} - \item Hence the order of commands matters + \myitem Hence the order of commands matters \end{itemize} - \item All reporting commands act on the previously added object until an object of greater or equal hierarchy is added (see next slide) + \myitem All reporting commands act on the previously added object until an object of greater or equal hierarchy is added (see next slide) \begin{itemize} - \item \textit{e.g.,} Once you add a \texttt{Page} to your report with the \texttt{addPage()} command, every \texttt{Section} you add via the \texttt{addSection()} command will be placed on this page. Only when you add another \texttt{Page} will items go on a new page. - \item This will become more clear with an example + \myitem \textit{e.g.,} Once you add a \texttt{Page} to your report with the \texttt{addPage()} command, every \texttt{Section} you add via the \texttt{addSection()} command will be placed on this page. Only when you add another \texttt{Page} will items go on a new page. + \myitem This will become more clear with an example \end{itemize} - \item Options to reporting commands are passed in option name/value pairs + \myitem Options to reporting commands are passed in option name/value pairs \begin{itemize} - \item \textit{e.g.,} \texttt{addPage(`title', \{`Page Title', `Page Subtitle'\})} + \myitem \textit{e.g.,} \texttt{addPage(`title', \{`Page Title', `Page Subtitle'\})} \end{itemize} \end{itemize} \end{frame} @@ -504,8 +630,8 @@ \begin{frame} \frametitle{Reporting Class Hierarchy} \begin{itemize} - \item Class names on the top half of the box, constructor names on the bottom - \item Arrows represent what the new object can be added to + \myitem Class names on the top half of the box, constructor names on the bottom + \myitem Arrows represent what the new object can be added to \end{itemize} \begin{center} \begin{tikzpicture}[ @@ -562,43 +688,43 @@ \subsection{Syntax} \begin{frame} - \frametitle{Reporting Syntax} + \frametitle{Reporting Syntax (1/2)} \begin{itemize} - \item \texttt{report(\ldots)}: Create a report + \myitem \texttt{report(\ldots)}: Create a report \begin{itemize} - \item \textbf{Options}: \texttt{compiler}, \texttt{showDate}, \texttt{fileName}, \texttt{margin}, \texttt{marginUnit}, \texttt{orientation}, \texttt{paper}, \texttt{title} + \myitem \textbf{Options}: \texttt{compiler}, \texttt{showDate}, \texttt{fileName}, \texttt{margin}, \texttt{marginUnit}, \texttt{orientation}, \texttt{paper}, \texttt{title} \end{itemize} - \item \texttt{addPage(\ldots)}: Add a page to the \texttt{Report} + \myitem \texttt{addPage(\ldots)}: Add a page to the \texttt{Report} \begin{itemize} - \item \textbf{Options}: \texttt{footnote}, \texttt{orientation}, \texttt{paper}, \texttt{title}, \texttt{titleFormat} + \myitem \textbf{Options}: \texttt{footnote}, \texttt{orientation}, \texttt{paper}, \texttt{title}, \texttt{titleFormat} \end{itemize} - \item \texttt{addSection(\ldots)}: Add a section to the current \texttt{Page} + \myitem \texttt{addSection(\ldots)}: Add a section to the current \texttt{Page} \begin{itemize} - \item You can think of a section as a matrix. As graphs and/or tables are added section, it fills up from left to right. Once you have added \texttt{cols} objects, a new row is started. - \item \textbf{Options}: \texttt{cols}, \texttt{height} + \myitem You can think of a section as a matrix. As graphs and/or tables are added section, it fills up from left to right. Once you have added \texttt{cols} objects, a new row is started. + \myitem \textbf{Options}: \texttt{cols}, \texttt{height} \end{itemize} - \item \texttt{addVspace(\ldots)}: Add a vertical space to the current \texttt{Section} + \myitem \texttt{addVspace(\ldots)}: Add a vertical space to the current \texttt{Section} \begin{itemize} - \item \textbf{Options}: \texttt{hline}, \texttt{number} + \myitem \textbf{Options}: \texttt{hline}, \texttt{number} \end{itemize} \end{itemize} \end{frame} \begin{frame} - \frametitle{Reporting Syntax (continued)} + \frametitle{Reporting Syntax (2/2)} \begin{itemize} - \item \texttt{addGraph(\ldots)}: Add a graph to the current \texttt{Section} + \myitem \texttt{addGraph(\ldots)}: Add a graph to the current \texttt{Section} \begin{itemize} - \item \textbf{Options}: \texttt{data}, \texttt{graphDirName}, \texttt{graphName}, \texttt{graphSize}, \texttt{height}, \texttt{showGrid}, \texttt{showLegend}, \texttt{showLegendBox}, \texttt{legendLocation}, \texttt{legendOrientation}, \texttt{legendFontSize}, \texttt{miscTikzAxisOptions}, \texttt{miscTikzPictureOptions}, \texttt{seriesToUse}, \texttt{shade}, \texttt{shadeColor}, \texttt{shadeOpacity}, \texttt{title}, \texttt{titleFormat}, \texttt{width}, \texttt{xlabel}, \texttt{ylabel}, \texttt{xAxisTight}, \texttt{xrange}, \texttt{xTicks}, \texttt{xTickLabels}, \texttt{xTickLabelAnchor}, \texttt{xTickLabelRotation}, \texttt{yAxisTight}, \texttt{yrange}, \texttt{showZeroLine} + \myitem \textbf{Options}: \texttt{data}, \texttt{graphDirName}, \texttt{graphName}, \texttt{graphSize}, \texttt{height}, \texttt{showGrid}, \texttt{showLegend}, \texttt{showLegendBox}, \texttt{legendLocation}, \texttt{legendOrientation}, \texttt{legendFontSize}, \texttt{miscTikzAxisOptions}, \texttt{miscTikzPictureOptions}, \texttt{seriesToUse}, \texttt{shade}, \texttt{shadeColor}, \texttt{shadeOpacity}, \texttt{title}, \texttt{titleFormat}, \texttt{width}, \texttt{xlabel}, \texttt{ylabel}, \texttt{xAxisTight}, \texttt{xrange}, \texttt{xTicks}, \texttt{xTickLabels}, \texttt{xTickLabelAnchor}, \texttt{xTickLabelRotation}, \texttt{yAxisTight}, \texttt{yrange}, \texttt{showZeroLine} \end{itemize} - \item \texttt{addTable(\ldots)}: Add a table to the current \texttt{Section} + \myitem \texttt{addTable(\ldots)}: Add a table to the current \texttt{Section} \begin{itemize} - \item \textbf{Options}: \texttt{data}, \texttt{showHlines}, \texttt{precision}, \texttt{range}, \texttt{seriesToUse}, \texttt{tableDirName}, \texttt{tableName}, \texttt{title}, \texttt{titleFormat}, \texttt{vlineAfter}, \texttt{vlineAfterEndOfPeriod}, \texttt{showVlines} + \myitem \textbf{Options}: \texttt{data}, \texttt{showHlines}, \texttt{precision}, \texttt{range}, \texttt{seriesToUse}, \texttt{tableDirName}, \texttt{tableName}, \texttt{title}, \texttt{titleFormat}, \texttt{vlineAfter}, \texttt{vlineAfterEndOfPeriod}, \texttt{showVlines} \end{itemize} - \item \texttt{addSeries(\ldots)}: Add a series to the current \texttt{Graph} or \texttt{Table} + \myitem \texttt{addSeries(\ldots)}: Add a series to the current \texttt{Graph} or \texttt{Table} \begin{itemize} - \item \textbf{Options}: \texttt{data}, \texttt{graphHline}, \texttt{graphLegendName}, \texttt{graphLineColor}, \texttt{graphLineStyle}, \texttt{graphLineWidth}, \texttt{graphMarker}, \texttt{graphMarkerEdgeColor}, \texttt{graphMarkerFaceColor}, \texttt{graphMarkerSize}, \texttt{graphMiscTikzAddPlotOptions}, \texttt{graphShowInLegend}, \texttt{graphVline}, \texttt{tableDataRhs}, \texttt{tableRowColor}, \texttt{tableRowIndent}, \texttt{tableShowMarkers}, \texttt{tableAlignRight}, \texttt{tableMarkerLimit}, \texttt{tableNegColor}, \texttt{tablePosColor}, \texttt{tableSubSectionHeader}, \texttt{zeroTol} + \myitem \textbf{Options}: \texttt{data}, \texttt{graphHline}, \texttt{graphLegendName}, \texttt{graphLineColor}, \texttt{graphLineStyle}, \texttt{graphLineWidth}, \texttt{graphMarker}, \texttt{graphMarkerEdgeColor}, \texttt{graphMarkerFaceColor}, \texttt{graphMarkerSize}, \texttt{graphMiscTikzAddPlotOptions}, \texttt{graphShowInLegend}, \texttt{graphVline}, \texttt{tableDataRhs}, \texttt{tableRowColor}, \texttt{tableRowIndent}, \texttt{tableShowMarkers}, \texttt{tableAlignRight}, \texttt{tableMarkerLimit}, \texttt{tableNegColor}, \texttt{tablePosColor}, \texttt{tableSubSectionHeader}, \texttt{zeroTol} \end{itemize} \end{itemize} \end{frame} @@ -608,18 +734,18 @@ \frametitle{Output} To create a report: \begin{itemize} - \item \texttt{write()}: Writes the report to a \LaTeX\ file - \item \texttt{compile(\ldots)}: Compiles the report + \myitem \texttt{write()}: Writes the report to a \LaTeX\ file + \myitem \texttt{compile(\ldots)}: Compiles the report \begin{itemize} - \item \textbf{Options}: \texttt{compiler} + \myitem \textbf{Options}: \texttt{compiler} \end{itemize} \end{itemize} Report Output \begin{itemize} - \item Unless you pass the \texttt{fileName} option to \texttt{report(\ldots)}, the report will be located in your working directory with the name \texttt{report.tex}. The compiled version will be called \texttt{report.pdf}. - \item Unless you pass the \texttt{graphDirName} or \texttt{graphName} options to \texttt{addGraph(\ldots)}, your graphs will be in a subdirectory of your working directory called \texttt{tmpRepDir}. The default name will take the form \texttt{graph\_pg9\_sec1\_row1\_col5.tex} - \item The same holds for the tables (substituting `table' for `graph' above). - \item Thus you can easily modify these files and include them in another report. + \myitem Unless you pass the \texttt{fileName} option to \texttt{report(\ldots)}, the report will be located in your working directory with the name \texttt{report.tex}. The compiled version will be called \texttt{report.pdf}. + \myitem Unless you pass the \texttt{graphDirName} or \texttt{graphName} options to \texttt{addGraph(\ldots)}, your graphs will be in a subdirectory of your working directory called \texttt{tmpRepDir}. The default name will take the form \texttt{graph\_pg9\_sec1\_row1\_col5.tex} + \myitem The same holds for the tables (substituting `table' for `graph' above). + \myitem Thus you can easily modify these files and include them in another report. \end{itemize} \end{frame} @@ -630,8 +756,8 @@ \begin{frame}[fragile=singleslide] \frametitle{Create Report of IRFs from \texttt{example1.mod}} \begin{itemize} - \item \texttt{example1.mod} is located in the Dynare \texttt{examples} directory - \item The lines below can be added at the end of that file. + \myitem \texttt{example1.mod} is located in the Dynare \texttt{examples} directory + \myitem The lines below can be added at the end of that file. \end{itemize} \begin{block}{Create \texttt{dseries} from IRFs} \begin{verbatim} @@ -646,7 +772,7 @@ \begin{frame}[fragile=singleslide] \frametitle{Create Report of IRFs from \texttt{example1.mod}} - \begin{block}{Populate Report} + \begin{block}{Populate Report (1/2)} \small{ \begin{verbatim} @#for shock in ["e", "u"] @@ -669,7 +795,7 @@ \begin{frame}[fragile=singleslide] \frametitle{Create Report of IRFs from \texttt{example1.mod}} - \begin{block}{Populate Report (continued)} + \begin{block}{Populate Report (2/2)} \small{ \begin{verbatim} report = report.addVspace(`number', 2);