diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst index 16d40aea21c7acb14675609ef5649a5b028613d4..a88f173bfb71260ecfeb4e30cf0f335c45e2b872 100644 --- a/doc/manual/source/the-model-file.rst +++ b/doc/manual/source/the-model-file.rst @@ -7349,6 +7349,113 @@ Shock Decomposition Default: ``0``. + .. option:: plot_init_date = DATE + + If passed, plots decomposition using ``plot_init_date`` as initial period. + Default: first observation in estimation + + .. option:: plot_end_date = DATE + + If passed, plots decomposition using ``plot_end_date`` as last period. + Default: last observation in estimation + + .. option:: diff + + If passed, plot the decomposition of the first difference of the list of variables. + If used in combination with :opt:`flip`, the ``diff`` operator is first applied. + Default: not activated + + .. option:: flip + + If passed, plot the decomposition of the opposite of the list of variables. + If used in combination with :opt:`diff`, the ``diff`` operator is first applied. + Default: not activated + +.. command:: initial_condition_decomposition [VARIABLE_NAME]...; + initial_condition_decomposition (OPTIONS...) [VARIABLE_NAME]...; + + |br| This command computes and plots the decomposition of the effect of + smoothed initial conditions of state variables. The ``variable_names`` provided + govern which variables the decomposition is plotted for. + + Further note that, unlike the majority of Dynare commands, the + options specified below are overwritten with their defaults before + every call to ``initial_condition_decomposition``. Hence, if you want to + reuse an option in a subsequent call to + ``initial_condition_decomposition``, you must pass it to the command + again. + + *Options* + + .. option:: colormap = STRING + + See :opt:`colormap <colormap = STRING>`. + + .. option:: nodisplay + + See :opt:`nodisplay`. + + .. option:: graph_format = FORMAT + graph_format = ( FORMAT, FORMAT... ) + + See :opt:`graph_format <graph_format = FORMAT>`. + + .. option:: detail_plot + + Plots shock contributions using subplots, one per shock (or + group of shocks). Default: not activated + + .. option:: steadystate + + If passed, the the :math:`y`-axis value of the zero line in + the shock decomposition plot is translated to the steady state + level. Default: not activated + + .. option:: type = qoq | yoy | aoa + + For quarterly data, valid arguments are: ``qoq`` for + quarter-on-quarter plots, ``yoy`` for year-on-year plots of + growth rates, ``aoa`` for annualized variables, i.e. the value + in the last quarter for each year is plotted. Default value: + empty, i.e. standard period-on-period plots (``qoq`` for + quarterly data). + + .. option:: fig_name = STRING + + Specifies a user-defined keyword to be appended to the default + figure name set by ``plot_shock_decomposition``. This can + avoid to overwrite plots in case of sequential calls to + ``plot_shock_decomposition``. + + .. option:: write_xls + + Saves shock decompositions to Excel-file in the main + directory, named + ``FILENAME_shock_decomposition_TYPE_FIG_NAME_initval.xls``. This + option requires your system to be configured to be able to + write Excel files. [#f7]_ + + .. option:: plot_init_date = DATE + + If passed, plots decomposition using ``plot_init_date`` as initial period. + Default: first observation in estimation + + .. option:: plot_end_date = DATE + + If passed, plots decomposition using ``plot_end_date`` as last period. + Default: last observation in estimation + + .. option:: diff + + If passed, plot the decomposition of the first difference of the list of variables. + If used in combination with :opt:`flip`, the ``diff`` operator is first applied. + Default: not activated + + .. option:: flip + + If passed, plot the decomposition of the opposite of the list of variables. + If used in combination with :opt:`diff`, the ``diff`` operator is first applied. + Default: not activated Calibrated Smoother =================== diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index ea3e1ebe495c3e6259d8a2206660283dcf9d3cd8..2f24e17c7c07217fc7a04ebfefec20105e6e5d53 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -50,6 +50,32 @@ if ~isempty(opts_decomp.type) fig_mode1 = ['_' fig_mode]; fig_mode = [fig_mode '_']; end + +if isfield(opts_decomp,'flip') + flip_decomp = opts_decomp.flip ; +else + flip_decomp = 0; +end +if flip_decomp + fig_mode1 = [fig_mode1 '_flip']; + fig_mode = [fig_mode 'flip_']; +end + +if isfield(opts_decomp,'diff') + differentiate_decomp = opts_decomp.diff ; +else + differentiate_decomp = 0; +end +if differentiate_decomp + fig_mode1 = [fig_mode1 '_diff']; + fig_mode = [fig_mode 'diff_']; +end +if isfield(opts_decomp,'init_cond_decomp') + init_cond_decomp = opts_decomp.init_cond_decomp ; +else + init_cond_decomp = 0; +end + fig_name_long = opts_decomp.fig_name; use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups; @@ -96,10 +122,16 @@ if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp fprintf(fidTeX,' \n'); end -if opts_decomp.vintage && opts_decomp.realtime>1 - preamble_txt = 'Shock decomposition'; +if init_cond_decomp + preamble_txt = 'Initial condition decomposition'; + preamble_figname = '_initval_decomposition_'; else - preamble_txt = 'Historical shock decomposition'; + preamble_figname = '_shock_decomposition_'; + if opts_decomp.vintage && opts_decomp.realtime>1 + preamble_txt = 'Shock decomposition'; + else + preamble_txt = 'Historical shock decomposition'; + end end if ~(screen_shocks && comp_nbr>18) @@ -223,18 +255,18 @@ for j=1:nvar hold off if ~DynareOptions.plot_shock_decomp.expand - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); - fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[endo_names{i_var(j)} fig_mode1 fig_name]); + fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s%s}\n',DynareModel.fname,DynareModel.fname,[preamble_figname endo_names{i_var(j)} fig_mode1 fig_name]); fprintf(fidTeX,'\\label{Fig:shock_decomp:%s}\n',[fig_mode endo_names{i_var(j)} fig_name]); fprintf(fidTeX,['\\caption{' preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': $ %s $.}\n'],DynareModel.endo_names_tex{i_var(j)}); fprintf(fidTeX,'\\end{figure}\n'); fprintf(fidTeX,' \n'); end else - dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,'_shock_decomposition_',endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); + dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); end end diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index d2099764090354bd97085396c2685551550d1693..59e1c45026e59be6108fb82f817ff631c1187422 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -53,6 +53,30 @@ if ~isempty(opts_decomp.type) fig_mode1 = ['_' fig_mode]; fig_mode = [fig_mode '_']; end +if isfield(opts_decomp,'flip') + flip_decomp = opts_decomp.flip ; +else + flip_decomp = 0; +end +if flip_decomp + fig_mode1 = [fig_mode1 '_flip']; + fig_mode = [fig_mode 'flip_']; +end + +if isfield(opts_decomp,'diff') + differentiate_decomp = opts_decomp.diff ; +else + differentiate_decomp = 0; +end +if differentiate_decomp + fig_mode1 = [fig_mode1 '_diff']; + fig_mode = [fig_mode 'diff_']; +end +if isfield(opts_decomp,'init_cond_decomp') + init_cond_decomp = opts_decomp.init_cond_decomp ; +else + init_cond_decomp = 0; +end screen_shocks = opts_decomp.screen_shocks; if ~isempty(DynareOptions.plot_shock_decomp.use_shock_groups) || comp_nbr<=18 screen_shocks=0; @@ -117,10 +141,16 @@ if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp fprintf(fidTeX,' \n'); end -if opts_decomp.vintage && opts_decomp.realtime>1 - preamble_txt = 'Shock decomposition'; +if init_cond_decomp + preamble_txt = 'Initial condition decomposition'; + preamble_figname = '_initval_decomposition_'; else - preamble_txt = 'Historical shock decomposition'; + preamble_figname = '_shock_decomposition_'; + if opts_decomp.vintage && opts_decomp.realtime>1 + preamble_txt = 'Shock decomposition'; + else + preamble_txt = 'Historical shock decomposition'; + end end ncol=3; @@ -248,18 +278,18 @@ for j=1:nvar end if ~DynareOptions.plot_shock_decomp.expand dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname, ... - '_shock_decomposition_', endo_names{i_var(j)}, fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); + preamble_figname, endo_names{i_var(j)}, fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); - fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[endo_names{i_var(j)} fig_mode1 fig_name suffix]); + fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s%s}\n',DynareModel.fname,DynareModel.fname,[preamble_figname endo_names{i_var(j)} fig_mode1 fig_name suffix]); fprintf(fidTeX,'\\label{Fig:shock_decomp_detail:%s}\n',[fig_mode endo_names{i_var(j)} fig_name suffix]); fprintf(fidTeX,['\\caption{' preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': $ %s $ (detail).}\n'], DynareModel.endo_names_tex{i_var(j)}); fprintf(fidTeX,'\\end{figure}\n'); fprintf(fidTeX,' \n'); end else - dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,'_shock_decomposition_',endo_names{i_var(j)},fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); + dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); end end diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index 0c846b1ff50493fcd5c5e0912ebe10fa660b341b..e8a2b72d9fcb1de9b56e280e8c7ba01861f4c536 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -38,12 +38,18 @@ function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. +options_.plot_shock_decomp.colormap = options_.initial_condition_decomp.colormap; +options_.plot_shock_decomp.nodisplay = options_.initial_condition_decomp.nodisplay; +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.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; options_.plot_shock_decomp.plot_init_date = options_.initial_condition_decomp.plot_init_date; 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; % indices of endogenous variables if isempty(varlist) @@ -128,11 +134,7 @@ M_.exo_nbr = M_.endo_nbr; options_.plot_shock_decomp.realtime=0; options_.plot_shock_decomp.screen_shocks=1; options_.plot_shock_decomp.use_shock_groups = ''; -fig_name = options_.plot_shock_decomp.fig_name; -if ~isempty(fig_name) - options_.plot_shock_decomp.fig_name=[fig_name '_initval']; -else -options_.plot_shock_decomp.fig_name='initval'; -end +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 diff --git a/matlab/plot_shock_decomposition.m b/matlab/plot_shock_decomposition.m index dbe76f9b95dfd5255ff80e93f2cf7038f4b5ca87..d649fc0615fc6ecfde4e425030ada53edc59869d 100644 --- a/matlab/plot_shock_decomposition.m +++ b/matlab/plot_shock_decomposition.m @@ -46,12 +46,25 @@ endo_nbr = M_.endo_nbr; nshocks = M_.exo_nbr; fig_name=''; +if isfield(options_.plot_shock_decomp,'diff') % private trap for uimenu calls + differentiate_decomp=options_.plot_shock_decomp.diff; +else + differentiate_decomp=0; +end +if isfield(options_.plot_shock_decomp,'flip') % private trap for uimenu calls + flip_decomp=options_.plot_shock_decomp.flip; +else + flip_decomp=0; +end if isfield(options_.plot_shock_decomp,'expand') % private trap for uimenu calls expand=options_.plot_shock_decomp.expand; else expand=0; options_.plot_shock_decomp.expand=0; end +if ~isfield(options_.plot_shock_decomp,'init_cond_decomp') + options_.plot_shock_decomp.init_cond_decomp=0; +end if ~isempty(options_.plot_shock_decomp.fig_name) fig_name=[' ' options_.plot_shock_decomp.fig_name]; @@ -229,6 +242,12 @@ if isempty(options_.plot_shock_decomp.colormap) options_.plot_shock_decomp.colormap = MAP; end +if differentiate_decomp + z(:,:,2:end) = z(:,:,2:end)-z(:,:,1:end-1); + z(:,:,1) = nan; + steady_state = steady_state*0; +end + switch type case '' % default @@ -337,6 +356,11 @@ switch type error('plot_shock_decomposition:: Wrong type') end + +if flip_decomp + z = -z; + steady_state = - steady_state; +end if steadystate options_.plot_shock_decomp.steady_state=steady_state; end diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m index b0591443cf3563fe7772f29a2e5c18236999c662..3294d969b41d4d4631814940c5cf9fe4efb793d5 100644 --- a/matlab/set_default_initial_condition_decomposition_options.m +++ b/matlab/set_default_initial_condition_decomposition_options.m @@ -28,9 +28,13 @@ function options = set_default_initial_condition_decomposition_options(options) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -options.initial_condition_decomp.detail_plot = 0; -options.initial_condition_decomp.steadystate = 0; -options.initial_condition_decomp.write_xls = 0; +options.initial_condition_decomp.colormap = ''; +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.steadystate = false; +options.initial_condition_decomp.write_xls = false; options.initial_condition_decomp.type = ''; options.initial_condition_decomp.plot_init_date = []; options.initial_condition_decomp.plot_end_date = [];