Updated dseries section in reference manual.

time-shift
Stéphane Adjemian (Charybdis) 2021-02-26 09:45:24 +01:00
parent 9e37e07075
commit 688ef1f5bf
Signed by: stepan
GPG Key ID: 295C1FE89E17EB3C
1 changed files with 146 additions and 33 deletions

View File

@ -25,11 +25,12 @@ Dates
Dates in a mod file Dates in a mod file
------------------- -------------------
Dynare understands dates in a mod file. Users can declare annual, Dynare understands dates in a mod file. Users can declare annual, bi-annual,
quarterly, or monthly dates using the following syntax:: quarterly, or monthly dates using the following syntax::
1990Y 1990Y
1990Q3 1990S2
1990Q4
1990M11 1990M11
Behind the scene, Dynares preprocessor translates these expressions Behind the scene, Dynares preprocessor translates these expressions
@ -164,20 +165,14 @@ The dates class
.. class:: dates .. class:: dates
:arg freq: equal to 1, 4, 12 or 365 (resp. for annual, quarterly, :arg freq: equal to 1, 2, 4, 12 or 365 (resp. for annual, bi-annual, quarterly,
monthly, or daily dates). monthly, or daily dates).
:arg time: a ``n*2`` array of integers. If `freq` is equal to 1, :arg time: a ``n*1`` array of integers, the number of periods since year 0 ().
4, or 12, the years are stored in the first column, the
subperiods (1 for annual dates, 1-4 for quarterly
dates, and 1-12 for monthly dates) are stored in the
second column. If `freq` is equal to 365, the first
column stores the number of days since the first day of
year 0, the second column is not used.
Each member is private, one can display the content of a member Each member is private, one can display the content of a member
but cannot change its value directly. Note that it is not possible but cannot change its value directly. Note also that it is not
to mix frequencies in a ``dates`` object: all the elements must possible to mix frequencies in a ``dates`` object: all the
have common frequency. elements must have common frequency.
The ``dates`` class has the following constructors: The ``dates`` class has the following constructors:
@ -187,12 +182,13 @@ The dates class
|br| Returns an empty ``dates`` object with a given frequency |br| Returns an empty ``dates`` object with a given frequency
(if the constructor is called with one input (if the constructor is called with one input
argument). ``FREQ`` is a character equal to Y or A for argument). ``FREQ`` is a character equal to Y or A for
annual dates, Q for quarterly dates, M for monthly dates, annual dates, S or H for bi-annual dates, Q for
or D for daily dates. Note that ``FREQ`` is not case quarterly dates, M for monthly dates, or D for daily
sensitive, so that, for instance, q is also allowed for dates. Note that ``FREQ`` is not case sensitive, so that, for
quarterly dates. The frequency can also be set with an integer instance, q is also allowed for quarterly dates. The
scalar equal to 1 (annual), 4 (quarterly), 12 frequency can also be set with an integer scalar equal to 1
(monthly), or 365 (daily). The instantiation of empty objects can be used to (annual), 2 (bi-annual), 4 (quarterly), 12 (monthly), or 365
(daily). The instantiation of empty objects can be used to
rename the ``dates`` class. For instance, if one only works rename the ``dates`` class. For instance, if one only works
with quarterly dates, object ``qq`` can be created as:: with quarterly dates, object ``qq`` can be created as::
@ -219,12 +215,17 @@ The dates class
|br| Returns a ``dates`` object that represents a date as |br| Returns a ``dates`` object that represents a date as
given by the string ``STRING``. This string has to be given by the string ``STRING``. This string has to be
interpretable as a date (only strings of the following forms interpretable as a date (only strings of the following forms
are admitted: ``'1990Y'``, ``'1990A'``, ``'1990Q1'``, are admitted: ``'1990Y'``, ``'1990A'``, ``1990S1``,
``'1990M2'``, or ``'2020-12-31'``), the routine ``isdate`` can ``1990H1``, ``'1990Q1'``, ``'1990M2'``, or ``'2020-12-31'``),
be used to test if a string is interpretable as a date. If the routine ``isdate`` can be used to test if a string is
more than one argument is provided, they should all be dates interpretable as a date. If more than one argument is
represented as strings, the resulting ``dates`` object provided, they should all be dates represented as strings, the
contains as many elements as arguments to the constructor. resulting ``dates`` object contains as many elements as
arguments to the constructor. For the daily dates, the string
must be of the form yyyy-mm-dd with two digits for the
months (mm) and days (dd), even if the number of days or
months is smaller than ten (in this case a leading 0 is
required).
.. construct:: dates(DATES) .. construct:: dates(DATES)
@ -240,14 +241,14 @@ The dates class
.. construct:: dates (FREQ, YEAR, SUBPERIOD[, S]) .. construct:: dates (FREQ, YEAR, SUBPERIOD[, S])
|br| where ``FREQ`` is a single character (Y, A, Q, M, |br| where ``FREQ`` is a single character (Y, A, S, H,
D) or integer (1, 4, 12, or 365) specifying the frequency, Q, M, D) or integer (1, 2, 4, 12, or 365) specifying the
``YEAR`` and ``SUBPERIOD`` and ``S`` are ``n*1`` vectors of frequency, ``YEAR`` and ``SUBPERIOD`` and ``S`` are ``n*1``
integers. Returns a ``dates`` object with ``n`` elements. The vectors of integers. Returns a ``dates`` object with ``n``
last argument, ``S``, is only to be used for daily elements. The last argument, ``S``, is only to be used for
frequency. If ``FREQ`` is equal to ``'Y'``, ``'A'`` or ``1``, daily frequency. If ``FREQ`` is equal to ``'Y'``, ``'A'`` or
the third argument is not needed (because ``SUBPERIOD`` is ``1``, the third argument is not needed (because ``SUBPERIOD``
necessarily a vector of ones in this case). is necessarily a vector of ones in this case).
*Example* *Example*
@ -3142,3 +3143,115 @@ X-13 ARIMA-SEATS interface
>> o.forecast('maxlead',18,'probability',0.95,'save','(fct fvr)'); >> o.forecast('maxlead',18,'probability',0.95,'save','(fct fvr)');
>> o.run(); >> o.run();
Miscellaneous
=============
Time aggregation
----------------
|br| A set of functions allows to convert time series to lower frequencies:
- ``dseries2M`` converts daily time series object to monthly
time series object.
- ``dseries2Q`` converts daily or monthly time series object
to quarterly time series object.
- ``dseries2S`` converts daily, monthly, or quarterly time
series object to bi-annual time series object.
- ``dseries2Y`` converts daily, monthly, quarterly, or
bi-annual time series object to annual time series object.
|br| All these routines have two mandatory input arguments: the first one is a
``dseries`` object, the second one the name (row char array) of the
aggregation method. Possible values for the second argument are:
- ``arithmetic-average`` (for growth rates),
- ``geometric-average`` (for growth factors),
- ``sum`` (for flow variables), and
- ``end-of-period`` (for stock variables).
*Example*
::
>> ts = dseries(rand(12,1),'2000M1')
ts is a dseries object:
| Variable_1
2000M1 | 0.55293
2000M2 | 0.14228
2000M3 | 0.38036
2000M4 | 0.39657
2000M5 | 0.57674
2000M6 | 0.019402
2000M7 | 0.57758
2000M8 | 0.9322
2000M9 | 0.10687
2000M10 | 0.73215
2000M11 | 0.97052
2000M12 | 0.60889
>> ds = dseries2Y(ts, 'end-of-period')
ds is a dseries object:
| Variable_1
2000Y | 0.60889
Create time series with a univariate model
------------------------------------------
|br| It is possible to expand a ``dseries`` object recursively
with the ``from`` command. For instance to create a ``dseries`` object
containing the simulation of an ARMA(1,1) model:
::
>> e = dseries(randn(100, 1), '2000Q1', 'e', '\varepsilon');
>> y = dseries(zeros(100, 1), '2000Q1', 'y');
>> from 2000Q2 to 2024Q4 do y(t)=.9*y(t-1)+e(t)-.4*e(t-1);
>> y
y is a dseries object:
| y
2000Q1 | 0
2000Q2 | -0.95221
2000Q3 | -0.6294
2000Q4 | -1.8935
2001Q1 | -1.1536
2001Q2 | -1.5905
2001Q3 | 0.97056
2001Q4 | 1.1409
2002Q1 | -1.9255
2002Q2 | -0.29287
|
2022Q2 | -1.4683
2022Q3 | -1.3758
2022Q4 | -1.2218
2023Q1 | -0.98145
2023Q2 | -0.96542
2023Q3 | -0.23203
2023Q4 | -0.34404
2024Q1 | 1.4606
2024Q2 | 0.901
2024Q3 | 2.4906
2024Q4 | 0.79661
The expression following the ``do`` keyword can be any univariate
equation, the only constraint is that the model cannot have
leads. It can be a static equation, or a very nonlinear backward
equation with an arbitrary number of lags. The ``from`` command
must be followed by a range, which is separated from the
(recursive) expression to be evaluated by the ``do`` command.