From aa50724379a26fc049cc170fe71ec385734b2dd5 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Thu, 19 Dec 2019 22:15:04 +0100 Subject: [PATCH] Changed cumfix==0: splits non-additive components proportionally to size of shock contribution --- matlab/annualized_shock_decomposition.m | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/matlab/annualized_shock_decomposition.m b/matlab/annualized_shock_decomposition.m index 03b5feb44..038f15a68 100644 --- a/matlab/annualized_shock_decomposition.m +++ b/matlab/annualized_shock_decomposition.m @@ -305,16 +305,22 @@ for j=1:nvar end ztmp=squeeze(za(j,:,:)); if cumfix==0 - zscale = sum(ztmp(1:end-1,:))./ztmp(end,:); - ztmp(1:end-1,:) = ztmp(1:end-1,:)./repmat(zscale,[nterms-1,1]); + zres = ztmp(end,:) - sum(ztmp(1:end-1,:)); + w = abs(ztmp(1:end-1,:))./sum(abs(ztmp(1:end-1,:))); + ztmp(1:end-1,:) = ztmp(1:end-1,:) + repmat(zres,[nterms-1 1]).*w; +% zscale = sum(ztmp(1:end-1,:))./ztmp(end,:); +% ztmp(1:end-1,:) = ztmp(1:end-1,:)./repmat(zscale,[nterms-1,1]); else zres = ztmp(end,:)-sum(ztmp(1:end-1,:)); ztmp(1:end-1,:) = ztmp(1:end-1,:) + repmat(zres,[nterms-1 1])/(nterms-1); end gztmp=squeeze(gza(j,:,:)); if cumfix==0 - gscale = sum(gztmp(1:end-1,:))./ gztmp(end,:); - gztmp(1:end-1,:) = gztmp(1:end-1,:)./repmat(gscale,[nterms-1,1]); + gres = gztmp(end,:) - sum(gztmp(1:end-1,:)); + w = abs(gztmp(1:end-1,:))./sum(abs(gztmp(1:end-1,:))); + gztmp(1:end-1,:) = gztmp(1:end-1,:) + repmat(gres,[nterms-1 1]).*w; +% gscale = sum(gztmp(1:end-1,:))./ gztmp(end,:); +% gztmp(1:end-1,:) = gztmp(1:end-1,:)./repmat(gscale,[nterms-1,1]); else gres = gztmp(end,:) - sum(gztmp(1:end-1,:)); gztmp(1:end-1,:) = gztmp(1:end-1,:) + repmat(gres,[nterms-1 1])/(nterms-1);