diff --git a/src/@dseries/onesidedhpcycle.m b/src/@dseries/onesidedhpcycle.m index 34044ffb489b93a36b70ac41e08505261e1953d0..a9f2dca48726ebb481a321a031e25ba3485c2f32 100644 --- a/src/@dseries/onesidedhpcycle.m +++ b/src/@dseries/onesidedhpcycle.m @@ -1,4 +1,4 @@ -function o = onesidedhpcycle(o, lambda) % --*-- Unitary tests --*-- +function o = onesidedhpcycle(o, lambda, init) % --*-- Unitary tests --*-- % Extracts the cycle component from a dseries object using the one sided HP filter. % @@ -28,14 +28,23 @@ function o = onesidedhpcycle(o, lambda) % --*-- Unitary tests --*-- if nargin>1 if lambda<=0 - error(['dseries::onesidedhptrend: Lambda must be a positive integer!']) + error(['dseries::onesidedhpcycle: Lambda must be a positive integer!']) + end + if nargin>2 + if ~isequal(init, 'hpfilter') + error('dseries::onesidedhpcycle: Unknown option!') + end end else lambda = []; end o = copy(o); -o.onesidedhpcycle_(lambda); +if nargin<3 + o.onesidedhpcycle_(lambda); +else + o.onesidedhpcycle_(lambda, init); +end return diff --git a/src/@dseries/onesidedhpcycle_.m b/src/@dseries/onesidedhpcycle_.m index f9487219824e6a24f2acedee43de06d6fb44328e..61d89b845c8bcf48b17c6723a057750d44610fdc 100644 --- a/src/@dseries/onesidedhpcycle_.m +++ b/src/@dseries/onesidedhpcycle_.m @@ -1,4 +1,4 @@ -function o = onesidedhpcycle_(o, lambda) % --*-- Unitary tests --*-- +function o = onesidedhpcycle_(o, lambda, init) % --*-- Unitary tests --*-- % Extracts the cycle component from a dseries object using a one sided HP filter. % @@ -28,7 +28,12 @@ function o = onesidedhpcycle_(o, lambda) % --*-- Unitary tests --*-- if nargin>1 if lambda<=0 - error(['dseries::onesidedhpcycle: Lambda must be a positive integer!']) + error('dseries::onesidedhpcycle: Lambda must be a positive integer!') + end + if nargin>2 + if ~isequal(init, 'hpfilter') + error('dseries::onesidedhpcycle: Unknown option!') + end end else lambda = []; @@ -37,20 +42,42 @@ end for i=1:vobs(o) if isempty(o.ops{i}) if isempty(lambda) - o.ops(i) = {sprintf('onesidedhpcycle(%s, [])', o.name{i})}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhpcycle(%s, [], ''%s'')', o.name{i}, init)}; + else + o.ops(i) = {sprintf('onesidedhpcycle(%s, [])', o.name{i})}; + end else - o.ops(i) = {sprintf('onesidedhpcycle(%s, %s)', o.name{i}, num2str(lambda))}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhpcycle(%s, %s, ''%s'')', o.name{i}, num2str(lambda), init)}; + else + o.ops(i) = {sprintf('onesidedhpcycle(%s, %s)', o.name{i}, num2str(lambda))}; + end end else if isempty(lambda) - o.ops(i) = {sprintf('onesidedhpcycle(%s, [])', o.ops{i})}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhpcycle(%s, [], ''%s'')', o.ops{i}, init)}; + else + o.ops(i) = {sprintf('onesidedhpcycle(%s, [])', o.ops{i})}; + end else - o.ops(i) = {sprintf('onesidedhpcycle(%s, %s)', o.ops{i}, num2str(lambda))}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhpcycle(%s, %s, ''%s'')', o.ops{i}, num2str(lambda), init)}; + else + o.ops(i) = {sprintf('onesidedhpcycle(%s, %s)', o.ops{i}, num2str(lambda))}; + end end end end -[~, o.data] = one_sided_hp_filter(o.data, lambda); +if nargin>2 + trend = o.hptrend(lambda); + x0 = trend.data(1:2,:); + [~, o.data] = one_sided_hp_filter(o.data, lambda, x0); +else + [~, o.data] = one_sided_hp_filter(o.data, lambda); +end return diff --git a/src/@dseries/onesidedhptrend.m b/src/@dseries/onesidedhptrend.m index 033588c0907bf2f74c21db81cf9459b2d5df9f24..cb0e2fc7641c819914a6f4fbcf9de2768bcdd4e4 100644 --- a/src/@dseries/onesidedhptrend.m +++ b/src/@dseries/onesidedhptrend.m @@ -1,4 +1,4 @@ -function o = onesidedhptrend(o, lambda) % --*-- Unitary tests --*-- +function o = onesidedhptrend(o, lambda, init) % --*-- Unitary tests --*-- % Extracts the trend component from a dseries object using the one sided HP filter. % @@ -30,12 +30,21 @@ if nargin>1 if lambda<=0 error(['dseries::onesidedhptrend: Lambda must be a positive integer!']) end + if nargin>2 + if ~isequal(init, 'hpfilter') + error('dseries::onesidedhpcycle: Unknown option!') + end + end else lambda = []; end o = copy(o); -o.onesidedhptrend_(lambda); +if nargin<3 + o.onesidedhptrend_(lambda); +else + o.onesidedhptrend_(lambda, init); +end return diff --git a/src/@dseries/onesidedhptrend_.m b/src/@dseries/onesidedhptrend_.m index 620f7425966b88e34a4fffd72864d7d660a7ac1e..eb881ced658d663f054402f17f9348c1402098ba 100644 --- a/src/@dseries/onesidedhptrend_.m +++ b/src/@dseries/onesidedhptrend_.m @@ -30,6 +30,11 @@ if nargin>1 if lambda<=0 error(['dseries::onesidedhptrend: Lambda must be a positive integer!']) end + if nargin>2 + if ~isequal(init, 'hpfilter') + error('dseries::onesidedhptrend: Unknown option!') + end + end else lambda = []; end @@ -37,20 +42,42 @@ end for i=1:vobs(o) if isempty(o.ops{i}) if isempty(lambda) - o.ops(i) = {sprintf('onesidedhptrend(%s, [])', o.name{i})}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhptrend(%s, [], ''%s'')', o.name{i}, init)}; + else + o.ops(i) = {sprintf('onesidedhptrend(%s, [])', o.name{i})}; + end else - o.ops(i) = {sprintf('onesidedhptrend(%s, %s)', o.name{i}, num2str(lambda))}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhptrend(%s, %s, ''%s'')', o.name{i}, num2str(lambda), init)}; + else + o.ops(i) = {sprintf('onesidedhptrend(%s, %s)', o.name{i}, num2str(lambda))}; + end end else if isempty(lambda) - o.ops(i) = {sprintf('onesidedhptrend(%s, [])', o.ops{i})}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhptrend(%s, [], ''%s'')', o.ops{i}, init)}; + else + o.ops(i) = {sprintf('onesidedhptrend(%s, [])', o.ops{i})}; + end else - o.ops(i) = {sprintf('onesidedhptrend(%s, %s)', o.ops{i}, num2str(lambda))}; + if nargin>2 + o.ops(i) = {sprintf('onesidedhptrend(%s, %s, ''%s'')', o.ops{i}, num2str(lambda), init)}; + else + o.ops(i) = {sprintf('onesidedhptrend(%s, %s)', o.ops{i}, num2str(lambda))}; + end end end end -o.data = one_sided_hp_filter(o.data, lambda); +if nargin>2 + trend = o.hptrend(lambda); + x0 = trend.data(1:2,:); + o.data = one_sided_hp_filter(o.data, lambda, x0); +else + o.data = one_sided_hp_filter(o.data, lambda); +end return diff --git a/src/@dseries/subsref.m b/src/@dseries/subsref.m index ec8b082b1480a079de0e7485d3fc6ef4f7abede0..22d127abd17a46b216155b45ead61fbe4031d3a2 100644 --- a/src/@dseries/subsref.m +++ b/src/@dseries/subsref.m @@ -90,7 +90,7 @@ switch S(1).type case 'freq' % Returns an integer characterizing the data frequency (1, 4, 12 or 52) B = A.dates.freq; - case {'lag','lag_','lead','lead_','hptrend','hptrend_','hpcycle','hpcycle_','onesidedhptrend','onesidedhptrend_','onesidedhpcycle','onesidedhpcycle_','chain','chain_','detrend','detrend_','exist','mean','std','center','center_'} % Methods with less than two arguments. + case {'lag','lag_','lead','lead_','hptrend','hptrend_','hpcycle','hpcycle_','chain','chain_','detrend','detrend_','exist','mean','std','center','center_'} % Methods with less than two arguments. if length(S)>1 && isequal(S(2).type,'()') if isempty(S(2).subs) B = feval(S(1).subs,A); @@ -105,7 +105,7 @@ switch S(1).type else B = feval(S(1).subs,A); end - case {'cumsum','cumsum_','insert','pop','pop_','cumprod','cumprod_','remove','remove_'} % Methods with less than three argument. + case {'cumsum','cumsum_','insert','pop','pop_','cumprod','cumprod_','remove','remove_','onesidedhptrend','onesidedhptrend_','onesidedhpcycle','onesidedhpcycle_'} % Methods with less than three argument. if length(S)>1 && isequal(S(2).type,'()') if isempty(S(2).subs) B = feval(S(1).subs,A);