File: epilogue_shock_decomposition.m

package info (click to toggle)
dynare 6.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 67,648 kB
  • sloc: cpp: 79,109; ansic: 28,917; objc: 12,430; yacc: 4,528; pascal: 1,993; lex: 1,441; sh: 1,129; python: 634; makefile: 626; lisp: 163; xml: 18
file content (37 lines) | stat: -rw-r--r-- 1,197 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function [zout, zss] = epilogue_shock_decomposition(zout ,M_, oo_)

ivar = varlist_indices(M_.epilogue_var_list_,M_.endo_names);
y = nan(length(M_.epilogue_names),size(zout,2),size(zout,3));
z=zout(ivar,:,:);
if isfield(oo_.dr,'ys')
    zss = oo_.dr.ys;
else
    zss = oo_.steady_state;
end

ztmp = dseries(zss(ivar),'',M_.epilogue_var_list_);
fname = M_.fname;
h_dynamic = str2func([fname '.epilogue_dynamic']);
h_static = str2func([fname '.epilogue_static']);
yss = extract(h_static(M_.params, ztmp),M_.epilogue_names{:});
yss = yss.data;
yss1 = repmat(yss(:),[1,1,size(y,3)]);
for k=1:size(z,2)
    ztmp = dseries(squeeze(z(:,k,:))+zss(ivar),'',M_.epilogue_var_list_);
    tmp = extract(h_dynamic(M_.params, ztmp),M_.epilogue_names{:});
    y(:,k,:) = tmp.data';
    y(:,k,:) = y(:,k,:)-yss1;
end

nterms = size(z,2);
for k=1:size(y,1)
    ytmp  = squeeze(y(k,:,:));
    yres = ytmp(end,:) - sum(ytmp(1:end-1,:));
    w = abs(ytmp(1:end-1,:))./sum(abs(ytmp(1:end-1,:)));
    %     ytmp(1:end-1,:) = ytmp(1:end-1,:) + repmat(yres,[nterms-1 1])/(nterms-1);
    ytmp(1:end-1,:) = ytmp(1:end-1,:) + repmat(yres,[nterms-1 1]).*w;
    y(k,:,:) = ytmp;
end

zout = cat(1,zout,y);
zss = [zss; yss(:)];