154 lines
4.6 KiB
Matlab
154 lines
4.6 KiB
Matlab
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 (C) 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 <http://www.gnu.org/licenses/>.
|
|
|
|
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
|