diff --git a/matlab/utilities/dataset/quarterly2annual.m b/matlab/utilities/dataset/quarterly2annual.m index 73d783606..08cd0846e 100644 --- a/matlab/utilities/dataset/quarterly2annual.m +++ b/matlab/utilities/dataset/quarterly2annual.m @@ -1,5 +1,5 @@ -function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog) -% function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog) +function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog,aux) +% function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog,aux) % transforms quarterly (log-)level time series to annual level and growth rate % it accounts for stock/flow/deflator series. % @@ -11,8 +11,13 @@ function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog) % 2 average % 3 last period (Q4) % 4 geometric average +% 5 annual price as quantity weighted average +% 6 annual quantity from average price +% 7 annual nominal from Q real and deflator % islog 0 level (default) % 1 log-level +% aux optional input used when type>4 +% % % OUTPUTS % ya annual (log-)level @@ -48,30 +53,75 @@ end if nargin<5 || isempty(islog), islog=0; end +if isstruct(aux), + yaux=aux.y; + yauxss=aux.yss; + islogaux=aux.islog; + GYTREND0aux=aux.GYTREND0; + typeaux=aux.type; + if islogaux + yaux=exp(yaux+yauxss); + yauxss=exp(yauxss); + yaux=yaux-yauxss; + end +elseif type > 4, + error('TYPE>4 requires auxiliary variable!') +end if islog y=exp(y+yss); yss=exp(yss); y=y-yss; end switch type + case 1 yass = yss*(exp(-GYTREND0*3)+exp(-GYTREND0*2)+exp(-GYTREND0)+1); tmp = lagged(y,3)*exp(-GYTREND0*3)+lagged(y,2)*exp(-GYTREND0*2)+lagged(y,1)*exp(-GYTREND0)+y; % annualized level + ya = tmp(4:4:end); + case 2 yass = yss*(exp(-GYTREND0*3)+exp(-GYTREND0*2)+exp(-GYTREND0)+1)/4; tmp = (lagged(y,3)*exp(-GYTREND0*3)+lagged(y,2)*exp(-GYTREND0*2)+lagged(y,1)*exp(-GYTREND0)+y)/4; % annualized level + ya = tmp(4:4:end); + case 3 yass=yss; tmp = y; + ya = tmp(4:4:end); + case 4 yass = yss*(exp(-GYTREND0*3/2)); tmp = (lagged(y+yss,3)*exp(-GYTREND0*3).*lagged(y+yss,2)*exp(-GYTREND0*2).*lagged(y+yss,1)*exp(-GYTREND0).*(y+yss)).^(1/4); % annualized level tmp = tmp - yass; + ya = tmp(4:4:end); + + case 5 + % nominal series + [yna, ynass] = quarterly2annual(y.*yaux,yss.*yauxss,GYTREND0+GYTREND0aux,typeaux,0,0); + % real series + [yra, yrass] = quarterly2annual(yaux,yauxss,GYTREND0aux,typeaux,0,0); + % deflator + yass = ynass/yrass; + ya = yna./yra; + + case 6 + % nominal series + [yna, ynass] = quarterly2annual(y.*yaux,yss.*yauxss,GYTREND0+GYTREND0aux,typeaux,0,0); + % deflator + [pa, pass] = quarterly2annual(yaux,yauxss,GYTREND0aux,2,0,0); + % real series + yass = ynass/pass; + ya = yna./pa; + + case 7 + % nominal series + [ya, yass] = quarterly2annual(y.*yaux,yss.*yauxss,GYTREND0+GYTREND0aux,typeaux,0,0); + GYTREND0=GYTREND0+GYTREND0aux; + otherwise error('Wrong type input') end -ya = tmp(4:4:end); % annual growth rate gyass = GYTREND0*4; gya = (ya+yass)./(lagged(ya,1)+yass).*exp(4*GYTREND0)-1-gyass;