diff --git a/matlab/@dynSeries/qdiff.m b/matlab/@dynSeries/qdiff.m new file mode 100644 index 0000000000000000000000000000000000000000..835f0ec0c99e45a5c902469bf7ab909fcda484b3 --- /dev/null +++ b/matlab/@dynSeries/qdiff.m @@ -0,0 +1,101 @@ +function us = qdiff(ts) + +%@info: +%! @deftypefn {Function File} {@var{us} =} qdiff (@var{ts}) +%! @anchor{qdiff} +%! @sp 1 +%! Computes quaterly differences. +%! @sp 2 +%! @strong{Inputs} +%! @sp 1 +%! @table @var +%! @item ts +%! Dynare time series object, instantiated by @ref{dynSeries} +%! @end table +%! @sp 2 +%! @strong{Outputs} +%! @sp 1 +%! @table @var +%! @item us +%! Dynare time series object with transformed data field. +%! @end table +%! @end deftypefn +%@eod: + +% Copyright (C) 2012 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr + +us = ts; + +switch ts.freq + case 1 + error('dynSeries::qgrowth: I cannot compute quaterly differences from yearly data!') + case 4 + us.data(2:end,:) = ts.data(2:end,:)-ts.data(1:end-1,:); + us.data(1,:) = NaN; + case 12 + us.data(4:end,:) = ts.data(4:end,:)-ts.data(1:end-3,:); + us.data(1:3,:) = NaN; + case 52 + error('dynSeries::qgrowth: I do not know yet how to compute quaterly differences from weekly data!') + otherwise + error(['dynSeries::ygrowth: object ' inputname(1) ' has unknown frequency']); +end + +%@test:1 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = transpose(0:1:50); +%$ ts = dynSeries(data,'1950Q1'); +%$ ts = ts.qdiff; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ if length(t)>1 +%$ DATA = NaN(1,ts.vobs); +%$ DATA = [DATA; ones(ts.nobs-1,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA,1e-15); +%$ end +%$ +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = transpose(0:1:80); +%$ ts = dynSeries(data,'1950M1'); +%$ ts = ts.qdiff; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ if length(t)>1 +%$ DATA = NaN(3,ts.vobs); +%$ DATA = [DATA; 3*ones(ts.nobs-3,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA,1e-15); +%$ end +%$ +%$ T = all(t); +%@eof:2 \ No newline at end of file diff --git a/matlab/@dynSeries/qgrowth.m b/matlab/@dynSeries/qgrowth.m new file mode 100644 index 0000000000000000000000000000000000000000..ea532332f947b939dc4ad740705edf3ec5bf2050 --- /dev/null +++ b/matlab/@dynSeries/qgrowth.m @@ -0,0 +1,101 @@ +function us = qgrowth(ts) + +%@info: +%! @deftypefn {Function File} {@var{us} =} qgrowth (@var{ts}) +%! @anchor{qgrowth} +%! @sp 1 +%! Computes quaterly growth rates. +%! @sp 2 +%! @strong{Inputs} +%! @sp 1 +%! @table @var +%! @item ts +%! Dynare time series object, instantiated by @ref{dynSeries} +%! @end table +%! @sp 2 +%! @strong{Outputs} +%! @sp 1 +%! @table @var +%! @item us +%! Dynare time series object with transformed data field. +%! @end table +%! @end deftypefn +%@eod: + +% Copyright (C) 2012 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr + +us = ts; + +switch ts.freq + case 1 + error('dynSeries::qgrowth: I cannot compute quaterly growth rates from yearly data!') + case 4 + us.data(2:end,:) = ts.data(2:end,:)./ts.data(1:end-1,:) - 1; + us.data(1,:) = NaN; + case 12 + us.data(4:end,:) = ts.data(4:end,:)./ts.data(1:end-3,:) - 1; + us.data(1:3,:) = NaN; + case 52 + error('dynSeries::qgrowth: I do not know yet how to compute quaterly growth rates from weekly data!') + otherwise + error(['dynSeries::ygrowth: object ' inputname(1) ' has unknown frequency']); +end + +%@test:1 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = (1+.01).^transpose(0:1:50); +%$ ts = dynSeries(data,'1950Q1'); +%$ ts = ts.qgrowth; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ if length(t)>1 +%$ DATA = NaN(1,ts.vobs); +%$ DATA = [DATA; .01*ones(ts.nobs-1,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA,1e-15); +%$ end +%$ +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = (1+.01).^transpose(0:1:80); +%$ ts = dynSeries(data,'1950M1'); +%$ ts = ts.qgrowth; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ if length(t)>1 +%$ DATA = NaN(3,ts.vobs); +%$ DATA = [DATA; (1.01^3-1)*ones(ts.nobs-3,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA,1e-15); +%$ end +%$ +%$ T = all(t); +%@eof:2 \ No newline at end of file diff --git a/matlab/@dynSeries/subsref.m b/matlab/@dynSeries/subsref.m index ce2335e824c503b68adc152163dac366c2f905ea..1d9b0ea548b9f9749dc7cabf7d18b3ce306b3f42 100644 --- a/matlab/@dynSeries/subsref.m +++ b/matlab/@dynSeries/subsref.m @@ -67,7 +67,7 @@ if length(S)==1 && isequal(S.type,'.') switch S.subs case {'data','nobs','vobs','name','tex','freq','time','init'} % Public members. us = builtin('subsref', ts, S); - case {'log','exp'} % Give "dot access" to public methods. + case {'log','exp','ygrowth','qgrowth','ydiff','qdiff'} % Give "dot access" to public methods. us = feval(S.subs,ts); case {'save'} us = NaN; diff --git a/matlab/@dynSeries/ydiff.m b/matlab/@dynSeries/ydiff.m new file mode 100644 index 0000000000000000000000000000000000000000..55c07f91e9b3da5e93c7f3e8d7f4413424dd1d11 --- /dev/null +++ b/matlab/@dynSeries/ydiff.m @@ -0,0 +1,127 @@ +function us = ydiff(ts) + +%@info: +%! @deftypefn {Function File} {@var{us} =} ydiff (@var{ts}) +%! @anchor{ydiff} +%! @sp 1 +%! Computes annual differences. +%! @sp 2 +%! @strong{Inputs} +%! @sp 1 +%! @table @var +%! @item ts +%! Dynare time series object, instantiated by @ref{dynSeries} +%! @end table +%! @sp 2 +%! @strong{Outputs} +%! @sp 1 +%! @table @var +%! @item us +%! Dynare time series object with transformed data field. +%! @end table +%! @end deftypefn +%@eod: + +% Copyright (C) 2012 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr + +us = ts; + +switch ts.freq + case 1 + us.data(2:end,:) = ts.data(2:end,:)-ts.data(1:end-1,:); + us.data(1,:) = NaN; + case 4 + us.data(5:end,:) = ts.data(5:end,:)-ts.data(1:end-4,:); + us.data(1:4,:) = NaN; + case 12 + us.data(13:end,:) = ts.data(13:end,:)-ts.data(1:end-12,:); + us.data(1:12,:) = NaN; + case 52 + us.data(53:end,:) = ts.data(53:end,:)-ts.data(1:end-52,:); + us.data(1:52,:) = NaN; + otherwise + error(['dynSeries::ygrowth: object ' inputname(1) ' has unknown frequency']); +end + +%@test:1 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = transpose(1:100); +%$ ts = dynSeries(data,'1950Q1'); +%$ ts = ts.ydiff; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ +%$ if length(t)>1 +%$ DATA = NaN(4,ts.vobs); +%$ DATA = [DATA; 4*ones(ts.nobs-4,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA); +%$ end +%$ +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = transpose(1:100); +%$ ts = dynSeries(data,'1950M1'); +%$ ts = ts.ydiff; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ +%$ if length(t)>1 +%$ DATA = NaN(12,ts.vobs); +%$ DATA = [DATA; 12*ones(ts.nobs-12,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA); +%$ end +%$ +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = transpose(1:100); +%$ ts = dynSeries(data,'1950W1'); +%$ ts = ts.ydiff; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ +%$ if length(t)>1 +%$ DATA = NaN(52,ts.vobs); +%$ DATA = [DATA; 52*ones(ts.nobs-52,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA); +%$ end +%$ +%$ T = all(t); +%@eof:3 \ No newline at end of file diff --git a/matlab/@dynSeries/ygrowth.m b/matlab/@dynSeries/ygrowth.m new file mode 100644 index 0000000000000000000000000000000000000000..995ecd3ba93e079909ab7de292631e8228fa1858 --- /dev/null +++ b/matlab/@dynSeries/ygrowth.m @@ -0,0 +1,127 @@ +function us = ygrowth(ts) + +%@info: +%! @deftypefn {Function File} {@var{us} =} ygrowth (@var{ts}) +%! @anchor{ygrowth} +%! @sp 1 +%! Computes annual growth rates. +%! @sp 2 +%! @strong{Inputs} +%! @sp 1 +%! @table @var +%! @item ts +%! Dynare time series object, instantiated by @ref{dynSeries} +%! @end table +%! @sp 2 +%! @strong{Outputs} +%! @sp 1 +%! @table @var +%! @item us +%! Dynare time series object with transformed data field. +%! @end table +%! @end deftypefn +%@eod: + +% Copyright (C) 2012 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr + +us = ts; + +switch ts.freq + case 1 + us.data(2:end,:) = ts.data(2:end,:)./ts.data(1:end-1,:) - 1; + us.data(1,:) = NaN; + case 4 + us.data(5:end,:) = ts.data(5:end,:)./ts.data(1:end-4,:) - 1; + us.data(1:4,:) = NaN; + case 12 + us.data(13:end,:) = ts.data(13:end,:)./ts.data(1:end-12,:) - 1; + us.data(1:12,:) = NaN; + case 52 + us.data(53:end,:) = ts.data(53:end,:)./ts.data(1:end-52,:) - 1; + us.data(1:52,:) = NaN; + otherwise + error(['dynSeries::ygrowth: object ' inputname(1) ' has unknown frequency']); +end + +%@test:1 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = repmat(transpose(1:4),100,1); +%$ ts = dynSeries(data,'1950Q1'); +%$ ts = ts.ygrowth; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ +%$ if length(t)>1 +%$ DATA = NaN(4,ts.vobs); +%$ DATA = [DATA; zeros(ts.nobs-4,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA); +%$ end +%$ +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = repmat(transpose(1:12),100,1); +%$ ts = dynSeries(data,'1950M1'); +%$ ts = ts.ygrowth; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ +%$ if length(t)>1 +%$ DATA = NaN(12,ts.vobs); +%$ DATA = [DATA; zeros(ts.nobs-12,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA); +%$ end +%$ +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ t = zeros(2,1); +%$ +%$ try +%$ data = repmat(transpose(1:52),100,1); +%$ ts = dynSeries(data,'1950W1'); +%$ ts = ts.ygrowth; +%$ t(1) = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ +%$ if length(t)>1 +%$ DATA = NaN(52,ts.vobs); +%$ DATA = [DATA; zeros(ts.nobs-52,ts.vobs)]; +%$ t(2) = dyn_assert(ts.data,DATA); +%$ end +%$ +%$ T = all(t); +%@eof:3 \ No newline at end of file