function plot_ms_forecast(M_, options_, forecast, figure_name) % function plot_ms_forecast(M_, options_, forecast, figure_name) % plots the forecast from the output from a ms-sbvar % % INPUTS % M_: (struct) model structure % options_: (struct) options % forecast: (matrix) in the form (percentile x horizon x nvar ), if banded otherwise % ( horizon x nvar ) % figure_name: (string) title % % OUTPUTS % none % % SPECIAL REQUIREMENTS % none % Copyright © 2011-2018 Dynare Team % % This file is part of Dynare. % % Dynare is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % Dynare is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . nc = 2; nr = 2; nvars = M_.endo_nbr; endo_names = M_.endo_names; var_list = endo_names(1:M_.orig_endo_nbr); names = {}; tex_names = {}; m = 1; for i = 1:length(var_list) tmp = strmatch(var_list{i}, endo_names, 'exact'); if isempty(tmp) error([var_list{i} ' isn''t and endogenous variable']) end tex_name = M_.endo_names_tex{i}; if ~isempty(tex_name) names{m} = var_list{i}; tex_names{m} = tex_name; m = m + 1; end end dims = size(forecast); if (length(dims) == 2) % Point Forecast (horizon x nvars ) horizon = dims(1); num_percentiles = 1; elseif (length(dims) == 3) % Banded Forecast horizon = dims(2); num_percentiles = dims(1); else error('The impulse response matrix passed to be plotted does not appear to be the correct size'); end if num_percentiles == 1 plot_point_forecast(forecast, nvars, nr, nc, var_list, figure_name, ... options_.graph_save_formats, options_.TeX, names, tex_names, ... [options_.ms.output_file_tag filesep 'Output' filesep 'Forecast']); else plot_banded_forecast(forecast, nvars, nr, nc, var_list, num_percentiles, ... figure_name, options_.graph_save_formats, options_.TeX, names, tex_names, ... [options_.ms.output_file_tag filesep 'Output' filesep 'Forecast']); end end function plot_point_forecast(forecast,nvars,nr,nc,endo_names,figure_name,save_graph_formats,TeX,names,tex_names,dirname) if nvars > nr*nc graph_name = ['MS (1) ' figure_name]; figure('Name', graph_name); else graph_name = figure_name; figure('Name', graph_name); end m = 1; n_fig = 1; for j=1:nvars if m > nr*nc graph_name = ['MS (' int2str(n_fig) ') ' figure_name]; dyn_save_graph(dirname,['MS-forecast-' int2str(n_fig)],... save_graph_formats,TeX,names,tex_names,graph_name); n_fig =n_fig+1; figure('Name', graph_name); m = 1; end subplot(nr,nc,m); vn = endo_names{j}; plot(forecast(:,j)) title(vn,'Interpreter','none'); grid on; m = m+1; end if m > 1 dyn_save_graph(dirname,['MS-forecast-' int2str(n_fig)],... save_graph_formats,TeX,names,tex_names,graph_name); end end function plot_banded_forecast(forecast,nvars,nr,nc,endo_names,num_percentiles,figure_name,save_graph_formats,TeX,names,tex_names,dirname) if nvars > nr*nc graph_name = ['MS (1) ' figure_name]; figure('Name', graph_name); else graph_name = figure_name; figure('Name', graph_name); end m = 1; n_fig = 1; for j=1:nvars if m > nr*nc graph_name = ['MS (' int2str(n_fig) ') ' figure_name]; dyn_save_graph(dirname,['MS-forecast-' int2str(n_fig)],... save_graph_formats,TeX,names,tex_names,graph_name); n_fig =n_fig+1; figure('Name',graph_name); m = 1; end subplot(nr,nc,m); vn = endo_names{j}; for k=1:num_percentiles if ceil(num_percentiles/2) == k plot(forecast(k,:,j),'LineWidth',1.5) else plot(forecast(k,:,j),'LineWidth',1.1) end if k==1 hold on; end end title(vn,'Interpreter','none'); hold off grid on; m = m+1; end if m > 1 dyn_save_graph(dirname,['MS-forecast-' int2str(n_fig)],... save_graph_formats,TeX,names,tex_names,graph_name); end end