From 6ba10b88f22e5a3bf429b60a74c12eb1f180b3eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 18 Dec 2019 11:55:53 +0100 Subject: [PATCH] Preprocessor: various provisions for improvements to shock decomposition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Accordingly update the MATLAB routines, the testsuite, and the manual. In particular, “squeeze_shock_decomp” has been renamed to “squeeze_shock_decomposition” for consistency with other commands. Ref. #1687, !1655 --- doc/manual/source/the-model-file.rst | 21 +++++++++++++++++++ matlab/graph_decomp_detail.m | 6 +----- matlab/initial_condition_decomposition.m | 1 + ..._initial_condition_decomposition_options.m | 1 + ...default_plot_shock_decomposition_options.m | 1 + ...decomp.m => squeeze_shock_decomposition.m} | 2 +- preprocessor | 2 +- scripts/dynare.el | 3 ++- tests/shock_decomposition/ls2003_plot.mod | 6 +++--- 9 files changed, 32 insertions(+), 11 deletions(-) rename matlab/{squeeze_shock_decomp.m => squeeze_shock_decomposition.m} (96%) diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst index dedafd797f..6ed77ce8de 100644 --- a/doc/manual/source/the-model-file.rst +++ b/doc/manual/source/the-model-file.rst @@ -7373,6 +7373,11 @@ Shock Decomposition If used in combination with :opt:`diff`, the ``diff`` operator is first applied. Default: not activated + .. option:: max_nrows + + Maximum number of rows in the subplot layout of detailed shock + decomposition graphs. Note that columns are always 3. Default: 6 + .. command:: initial_condition_decomposition [VARIABLE_NAME]...; initial_condition_decomposition (OPTIONS...) [VARIABLE_NAME]...; @@ -7459,6 +7464,22 @@ Shock Decomposition If used in combination with :opt:`diff`, the ``diff`` operator is first applied. Default: not activated +.. command:: squeeze_shock_decomposition [VARIABLE_NAME]...; + + |br| For large models, the size of the information stored by shock + decompositions (especially various settings of realtime decompositions) may + become huge. This command allows to squeeze this information in two + possible ways: + + * Automatic (default): only the variables for which plotting has been + explicitly required with `plot_shock_decomposition` will have their + decomposition left in `oo_` after this command is run; + + * If a list of variables is passed to the command, then only those + variables will have their decomposition left in `oo_` after this + command is run. + + Calibrated Smoother =================== diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index 448abae6c7..a928a1657e 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -60,11 +60,7 @@ if isfield(opts_decomp,'init_cond_decomp') else init_cond_decomp = 0; end -if isfield(opts_decomp,'min_nrows') - min_nrows = opts_decomp.min_nrows ; -else - max_nrows = 6; -end +max_nrows = opts_decomp.max_nrows; screen_shocks = opts_decomp.screen_shocks; if ~isempty(DynareOptions.plot_shock_decomp.use_shock_groups) || comp_nbr<=18 screen_shocks=0; diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index 12e39691a2..db35777ae1 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -51,6 +51,7 @@ options_.plot_shock_decomp.plot_init_date = options_.initial_condition_decomp.pl options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plot_end_date; options_.plot_shock_decomp.diff = options_.initial_condition_decomp.diff; options_.plot_shock_decomp.flip = options_.initial_condition_decomp.flip; +options_.plot_shock_decomp.max_nrows = options_.initial_condition_decomp.max_nrows; if isfield(options_.initial_condition_decomp,'init2shocks') % private trap for uimenu calls init2shocks=options_.initial_condition_decomp.init2shocks; diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m index 58ecfff142..167addad5a 100644 --- a/matlab/set_default_initial_condition_decomposition_options.m +++ b/matlab/set_default_initial_condition_decomposition_options.m @@ -41,4 +41,5 @@ options.initial_condition_decomp.plot_init_date = []; options.initial_condition_decomp.plot_end_date = []; options.initial_condition_decomp.diff = false; options.initial_condition_decomp.flip = false; +options.initial_condition_decomp.max_nrows = 6; end diff --git a/matlab/set_default_plot_shock_decomposition_options.m b/matlab/set_default_plot_shock_decomposition_options.m index ecef090bf7..385884e970 100644 --- a/matlab/set_default_plot_shock_decomposition_options.m +++ b/matlab/set_default_plot_shock_decomposition_options.m @@ -51,4 +51,5 @@ options.plot_shock_decomp.plot_init_date = []; options.plot_shock_decomp.plot_end_date = []; options.plot_shock_decomp.diff = false; options.plot_shock_decomp.flip = false; +options.plot_shock_decomp.max_nrows = 6; end diff --git a/matlab/squeeze_shock_decomp.m b/matlab/squeeze_shock_decomposition.m similarity index 96% rename from matlab/squeeze_shock_decomp.m rename to matlab/squeeze_shock_decomposition.m index 49073ee082..3fbfa13617 100644 --- a/matlab/squeeze_shock_decomp.m +++ b/matlab/squeeze_shock_decomposition.m @@ -1,4 +1,4 @@ -function oo_ = squeeze_shock_decomp(M_,oo_,options_,var_list_) +function oo_ = squeeze_shock_decomposition(M_,oo_,options_,var_list_) if isfield(oo_,'plot_shock_decomposition_info') && isfield(oo_.plot_shock_decomposition_info','i_var') my_vars = oo_.plot_shock_decomposition_info.i_var; diff --git a/preprocessor b/preprocessor index 031c0cff5f..c2461981d2 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 031c0cff5fca274ea1e75c70623a8e8be93269bb +Subproject commit c2461981d2917c69c3decfc55bf2aaf006057c52 diff --git a/scripts/dynare.el b/scripts/dynare.el index 3be0998a85..debcafaea1 100644 --- a/scripts/dynare.el +++ b/scripts/dynare.el @@ -68,7 +68,8 @@ "discretionary_policy" "identification" "bvar_density" "bvar_forecast" "dynare_sensitivity" "initval_file" "histval_file" "forecast" "shock_decomposition" "realtime_shock_decomposition" - "plot_shock_decomposition" "initial_condition_decomposition" "sbvar" + "plot_shock_decomposition" "initial_condition_decomposition" + "squeeze_shock_decomposition" "sbvar" "ms_estimation" "ms_simulation" "ms_compute_mdd" "ms_compute_probabilities" "ms_forecast" "ms_irf" "ms_variance_decomposition" "conditional_forecast" "plot_conditional_forecast" "gmm_estimation" "smm_estimation" diff --git a/tests/shock_decomposition/ls2003_plot.mod b/tests/shock_decomposition/ls2003_plot.mod index 3ef63d277e..a3134d2faa 100644 --- a/tests/shock_decomposition/ls2003_plot.mod +++ b/tests/shock_decomposition/ls2003_plot.mod @@ -85,7 +85,7 @@ end; options_.initial_date=dates('1989Q4'); % date arbitrarily set for testing purposes shock_decomposition(nograph); // test for nothing to squeeze -oo_ = squeeze_shock_decomp(M_,oo_,options_); +squeeze_shock_decomposition; // standard plot plot_shock_decomposition y_obs R_obs pie_obs dq de; @@ -112,7 +112,7 @@ close all, realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]) y_obs R_obs pie_obs dq de; // test squeeze -oo_ = squeeze_shock_decomp(M_,oo_,options_); +squeeze_shock_decomposition; //realtime pooled plot_shock_decomposition(realtime = 1) y_obs R_obs pie_obs dq de; @@ -157,7 +157,7 @@ close all, realtime_shock_decomposition(fast_realtime=75) y_obs R_obs pie_obs dq de; // re-test squeeze -oo_ = squeeze_shock_decomp(M_,oo_,options_); +squeeze_shock_decomposition; collect_latex_files; if system(['pdflatex -halt-on-error -interaction=batchmode ' M_.fname '_TeX_binder.tex']) -- GitLab