From c17b24f56107232553f405b3e348e2c7293a7cc4 Mon Sep 17 00:00:00 2001 From: Marco Ratto <marco.ratto@ec.europa.eu> Date: Fri, 13 Sep 2024 08:35:48 +0200 Subject: [PATCH] big fixes for aoa decomposition requiring auxiliary variable: - when init2shocks is used, list of exo names must be re-set before retrieving decomposition info for auxiliary variable - when decomposition results are squeezed, steady state info in oo_ must also be temporarily squeezed, other wise plotted results will be wrong (cherry picked from commit 64f0f1fcf39ec43f2d8b4f87fdeb148f499c0b1b) --- .../plot_shock_decomposition.m | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/matlab/shock_decomposition/plot_shock_decomposition.m b/matlab/shock_decomposition/plot_shock_decomposition.m index 7b95613a75..20c369bf82 100644 --- a/matlab/shock_decomposition/plot_shock_decomposition.m +++ b/matlab/shock_decomposition/plot_shock_decomposition.m @@ -265,6 +265,7 @@ if ~isempty(init2shocks) && ~expand end n=size(init2shocks,1); M_.exo_names_init=M_.exo_names; + M_.orig_exo_names=M_.exo_names; for i=1:n j=strmatch(init2shocks{i}{1},orig_endo_names,'exact'); if ~isempty(init2shocks{i}{2}) @@ -479,7 +480,31 @@ switch type opts=options_; opts.plot_shock_decomp.type='qoq'; opts.plot_shock_decomp.use_shock_groups=[]; + if ~isempty(init2shocks) + M_.exo_names = M_.orig_exo_names; + end + is_squeezed_steady_state=false; + if length(steady_state)<length(oo_.steady_state) + is_squeezed_steady_state=true; + if isfield(oo_.dr,'ys') + steady_state0= oo_.dr.ys; + oo_.dr.ys = steady_state; + else + steady_state0=oo_.steady_state; + oo_.steady_state=steady_state; + end + end [y_aux, steady_state_aux] = plot_shock_decomposition(M_,oo_,opts,q2a.aux.y); + if is_squeezed_steady_state + if isfield(oo_.dr,'ys') + oo_.dr.ys = steady_state0; + else + oo_.steady_state=steady_state0; + end + end + if ~isempty(init2shocks) + M_.exo_names = M_.exo_names_init; + end q2a.aux.y=y_aux; q2a.aux.yss=steady_state_aux; end -- GitLab