From 06c2b49897dbdbea95955e1f0359d600be7bea20 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Mon, 9 Dec 2019 14:54:26 +0100 Subject: [PATCH] provisions for init2shocks: initial conditions are added to its correspondiong shock for shock decompositions, while they are removed in initial condition decompositions. --- matlab/initial_condition_decomposition.m | 17 +++++++++++- matlab/plot_shock_decomposition.m | 27 +++++++++++++++++++ ..._initial_condition_decomposition_options.m | 1 + ...default_plot_shock_decomposition_options.m | 1 + 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index e8a2b72d9..f6164cab2 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -43,6 +43,7 @@ options_.plot_shock_decomp.nodisplay = options_.initial_condition_decomp.nodispl options_.plot_shock_decomp.graph_format = options_.initial_condition_decomp.graph_format; options_.plot_shock_decomp.fig_name = options_.initial_condition_decomp.fig_name; options_.plot_shock_decomp.detail_plot = options_.initial_condition_decomp.detail_plot; +options_.plot_shock_decomp.init2shocks = options_.initial_condition_decomp.init2shocks; options_.plot_shock_decomp.steadystate = options_.initial_condition_decomp.steadystate; options_.plot_shock_decomp.write_xls = options_.initial_condition_decomp.write_xls; options_.plot_shock_decomp.type = options_.initial_condition_decomp.type; @@ -51,6 +52,11 @@ options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plo options_.plot_shock_decomp.diff = options_.initial_condition_decomp.diff; options_.plot_shock_decomp.flip = options_.initial_condition_decomp.flip; +if isfield(options_.initial_condition_decomp,'init2shocks') % private trap for uimenu calls + init2shocks=options_.initial_condition_decomp.init2shocks; +else + init2shocks=[]; +end % indices of endogenous variables if isempty(varlist) varlist = M_.endo_names(1:M_.orig_endo_nbr); @@ -129,6 +135,15 @@ end % if ~options_.no_graph.shock_decomposition oo=oo_; oo.shock_decomposition = oo_.initval_decomposition; +if ~isempty(init2shocks) + init2shocks = M_.init2shocks.(init2shocks); + n=size(init2shocks,1); + for i=1:n + j=strmatch(init2shocks{i}{1},M_.endo_names,'exact'); + oo.shock_decomposition(:,end-1,:)=oo.shock_decomposition(:,j,:)+oo.shock_decomposition(:,end-1,:); + oo.shock_decomposition(:,j,:)=0; + end +end M_.exo_names = M_.endo_names; M_.exo_nbr = M_.endo_nbr; options_.plot_shock_decomp.realtime=0; @@ -137,4 +152,4 @@ options_.plot_shock_decomp.use_shock_groups = ''; options_.plot_shock_decomp.init_cond_decomp = 1; % private flag to plotting utilities plot_shock_decomposition(M_,oo,options_,varlist); -% end \ No newline at end of file +% end diff --git a/matlab/plot_shock_decomposition.m b/matlab/plot_shock_decomposition.m index d649fc061..ce21cc610 100644 --- a/matlab/plot_shock_decomposition.m +++ b/matlab/plot_shock_decomposition.m @@ -36,6 +36,16 @@ if isempty(varlist) varlist = M_.endo_names(1:M_.orig_endo_nbr); end +if isfield(options_.plot_shock_decomp,'init2shocks') % private trap for uimenu calls + init2shocks=options_.plot_shock_decomp.init2shocks; +else + init2shocks=[]; +end +if ~isempty(init2shocks) + init2shocks=M_.init2shocks.(init2shocks); +end + + [i_var, ~, index_uniques] = varlist_indices(varlist, M_.endo_names); varlist = varlist(index_uniques); @@ -151,6 +161,23 @@ switch realtime_ end end + +if ~isempty(init2shocks) && ~expand + n=size(init2shocks,1); + for i=1:n + j=strmatch(init2shocks{i}{1},M_.endo_names,'exact'); + if ~isempty(init2shocks{i}{2}) + jj=strmatch(init2shocks{i}{2},M_.exo_names,'exact'); + z(:,jj,:)= z(:,jj,:) + oo_.initval_decomposition (:,j,:); + else + z(:,end,:)= z(:,end,:) - oo_.initval_decomposition (:,j,:); + end + z(:,end-1,:)= z(:,end-1,:) - oo_.initval_decomposition (:,j,:); + + end +end + + if isfield(oo_.dr,'ys') steady_state = oo_.dr.ys; else diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m index 3294d969b..58ecfff14 100644 --- a/matlab/set_default_initial_condition_decomposition_options.m +++ b/matlab/set_default_initial_condition_decomposition_options.m @@ -33,6 +33,7 @@ options.initial_condition_decomp.nodisplay = false; options.initial_condition_decomp.graph_format = 'eps'; options.initial_condition_decomp.fig_name = ''; options.initial_condition_decomp.detail_plot = false; +options.initial_condition_decomp.init2shocks = []; options.initial_condition_decomp.steadystate = false; options.initial_condition_decomp.write_xls = false; options.initial_condition_decomp.type = ''; diff --git a/matlab/set_default_plot_shock_decomposition_options.m b/matlab/set_default_plot_shock_decomposition_options.m index 5ffd23cb5..ecef090bf 100644 --- a/matlab/set_default_plot_shock_decomposition_options.m +++ b/matlab/set_default_plot_shock_decomposition_options.m @@ -33,6 +33,7 @@ options.plot_shock_decomp.colormap = ''; options.plot_shock_decomp.nodisplay = false; options.plot_shock_decomp.graph_format = 'eps'; options.plot_shock_decomp.detail_plot = false; +options.plot_shock_decomp.init2shocks = []; options.plot_shock_decomp.interactive = false; options.plot_shock_decomp.screen_shocks = false; options.plot_shock_decomp.steadystate = false;