doc: modify dates portion of slides based on Stéphane's slides

time-shift
Houtan Bastani 2014-05-26 12:12:44 +02:00
parent 9229a35e71
commit b63b8e381f
1 changed files with 402 additions and 276 deletions

View File

@ -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 = <dates: 1990Q1, 1990Q2, 1978Q3>
\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 = <dates: 1990Q1>
\end{alltt}
\begin{alltt}
>> t = qq([1990; 1990; 1978], [1; 2; 3])
t = <dates: 1990Q1, 1990Q2, 1978Q3>
\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')); \% <dates: 1999Y, 1900Y>}
\end{itemize}
\item \texttt{horzcat}: horizontal concatenation
\begin{itemize}
\item \texttt{[t t]; \% <dates: 1999Y, 1900Y, 1999Y, 1900Y>};
\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]' \% <dates: 1996Y, 1897Y>}
\end{itemize}
\item \texttt{plus}: either combine two \texttt{dates} or forward one \texttt{dates}
\begin{itemize}
\item \texttt{t+t \% <dates: 1999Y, 1900Y, 1999Y, 1900Y>}
\item \texttt{t+[3 3]' \% <dates: 2002Y, 1903Y>}
\end{itemize}
\item \texttt{pop}: remove last element
\begin{itemize}
\item \texttt{t.pop(); \% <dates: 1999Y>}
\end{itemize}
\item \texttt{sort}: sort dates in ascending order
\begin{itemize}
\item \texttt{t.sort(); \% <dates: 1900Y, 1999Y>}
\end{itemize}
\item \texttt{uminus}: shifts dates back one period
\begin{itemize}
\item \texttt{-t; \% <dates: 1998Y, 1899Y>}
\end{itemize}
\item \texttt{unique}: removes repetitions (keeping last unique value)
\begin{itemize}
\item \texttt{t.append(dates(`1999y')).unique() \% <dates: 1900Y, 1999Y>}
\end{itemize}
\item \texttt{uplus}: shifts dates forward one period
\begin{itemize}
\item \texttt{++t; \% <dates: 2001Y, 1902Y>}
\end{itemize}
\myitem A collection of \texttt{dates}
\begin{alltt}
a = 1990Q1; b = 1957Q1; c = -52Q1;
d = [a b c];
\(\Rightarrow\) d = <dates: 1990Q1, 1957Q1, -52Q1>
\end{alltt}
\myitem A Range of \texttt{dates}
\begin{alltt}
a = 1990Q3:1991Q2
\(\Rightarrow\) a = <dates: 1990Q3, 1990Q4, 1991Q1, 1991Q2>
\end{alltt}
\myitem A set of regularly-spaced \texttt{dates}
\begin{alltt}
a = 1990Q3:2:1991Q2
\(\Rightarrow\) a = <dates: 1990Q3, 1991Q1, 1991Q3>
\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) \% <dates: 2020Y>}
\end{itemize}
\item \texttt{min}: returns the minimum \texttt{dates} in the arguments
\begin{itemize}
\item \texttt{min(t,dr) \% <dates: 1900Y>}
\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 = <dates: 1999M4, 1999M2>}
\end{itemize}
\myitem The binary \texttt{*} operator
\begin{alltt}
>> a*3
ans = <dates: 1999Q4, 1999Q4, 1999Q4>
\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) \% <dates: 1999Y>}
\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) \% <dates: 1900Y>}
\end{itemize}
\item \texttt{union}:
\begin{itemize}
\item \texttt{union(dr,t) \% <dates: 1900Y, 1999Y, ..., 2019Y, 2020Y>}
\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 = <dates: 1990Q3, 1990Q4, 1991Q1>
\end{alltt}
\myitem \texttt{setdiff}: returns dates present in first arg but not in second
\begin{alltt}
>> setdiff(a, b)
ans = <dates: 1900Y>
\end{alltt}
\myitem \texttt{union}: returns the union of two sets (repititions removed)
\begin{alltt}
union(a, b)
ans = <dates: 1990Q1, 1990Q2, ..., 1991Q2, 1991Q3>
\end{alltt}
\myitem \texttt{unique}: removes repititions from set (keeps last unique value)
\begin{alltt}
>> unique(a)
ans = <dates: 1990Q2, 1990Q3, 1990Q4, 1991Q1, 1990Q1>
\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);