irf_matching: make comparison graph prettier

covariance-quadratic-approximation
Willi Mutschler 2023-12-13 13:00:17 +01:00
parent 378e38c8c2
commit 2521314c39
No known key found for this signature in database
GPG Key ID: 91E724BF17A73F6D
1 changed files with 39 additions and 37 deletions

View File

@ -1,5 +1,5 @@
function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth)
% graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth)
function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irf_horizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth)
% graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irf_horizon,relative_irf,endo_names,exo_names,exo_names_tex,dname,fname,graph_format,TeX,nodisplay,figures_textwidth)
% -------------------------------------------------------------------------
% Plots and saves to disk the comparison of the selected data irfs and corresponding model irfs
% -------------------------------------------------------------------------
@ -7,7 +7,7 @@ function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizo
% matched_irfs: [matrix] information on matched data irfs
% irf_model_varobs: [matrix] model irfs for observable variables
% varobs_id: [vector] index for observable variables in endo_names
% irfHorizon: [scalar] maximum horizon of irfs
% irf_horizon: [scalar] maximum horizon of irfs
% relative_irf: [boolean] if true, plots normalized irfs
% endo_names: [cell] names of endogenous variables
% exo_names: [cell] names of exogenous variables
@ -51,67 +51,69 @@ function graph_comparison_irfs(matched_irfs,irf_model_varobs,varobs_id,irfHorizo
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
graphDirectoryName = CheckPath('graphs',dname);
latexDirectoryName = CheckPath('latex',dname);
graph_directory_name = CheckPath('graphs',dname);
latex_directory_name = CheckPath('latex',dname);
if TeX && any(strcmp('eps',cellstr(graph_format)))
fidTeX = fopen([latexDirectoryName filesep fname '_irf_matching_plot.tex'],'w');
fprintf(fidTeX,'%% TeX eps-loader file generated by mom.run.m (Dynare).\n');
fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
fprintf(fidTeX,' \n');
fid_TeX = fopen([latex_directory_name filesep fname '_irf_matching_plot.tex'],'w');
fprintf(fid_TeX,'%% TeX eps-loader file generated by mom.run.m (Dynare).\n');
fprintf(fid_TeX,['%% ' datestr(now,0) '\n']);
fprintf(fid_TeX,' \n');
end
shockEntries = cellfun(@(x) x(2), matched_irfs(:, 1));
uniqueShockEntries = unique(shockEntries);
for jexo = uniqueShockEntries'
entriesDataIrfs = find(cellfun(@(x) x(2) == jexo, matched_irfs(:, 1)));
uniqueVariables = unique(cellfun(@(x) x(1), matched_irfs(entriesDataIrfs,1)));
[nbplt,nr,nc,lr,lc,nstar] = pltorg(length(uniqueVariables));
shock_entries = cellfun(@(x) x(2), matched_irfs(:, 1));
unique_shock_entries = unique(shock_entries);
colDarkGrey = [0.3, 0.3, 0.3]; % dark grey
for jexo = unique_shock_entries'
entries_data_irfs = find(cellfun(@(x) x(2) == jexo, matched_irfs(:, 1)));
unique_variables = unique(cellfun(@(x) x(1), matched_irfs(entries_data_irfs,1)));
[nbplt,nr,nc,lr,lc,nstar] = pltorg(length(unique_variables));
fig = 0;
for jvar = 1:length(uniqueVariables)
for jvar = 1:length(unique_variables)
if jvar==1 || ~( (fig-1)*nstar<jvar && jvar<=fig*nstar )
fig = fig+1;
fig_irf = dyn_figure(nodisplay,'Name',['Irf matching shock to ' exo_names{jexo} ' figure ' int2str(fig)]);
end
plt = jvar-(fig-1)*nstar;
dataIrfRows = find(cellfun(@(x) x(1) == uniqueVariables(jvar) && x(2) == jexo, matched_irfs(:, 1)));
dataIrfPeriods = cellfun(@(x) x(3), matched_irfs(dataIrfRows,1));
dataIrfValues = cell2mat(matched_irfs(dataIrfRows,2));
data_irf_rows = find(cellfun(@(x) x(1) == unique_variables(jvar) && x(2) == jexo, matched_irfs(:, 1)));
data_irf_periods = cellfun(@(x) x(3), matched_irfs(data_irf_rows,1));
data_irf_values = cell2mat(matched_irfs(data_irf_rows,2));
if nbplt>1 && fig==nbplt
subplot(lr,lc,plt);
else
subplot(nr,nc,plt);
end
plt_data = plot(dataIrfPeriods,dataIrfValues,'x','linewidth',2);
plt_data = plot(data_irf_periods,data_irf_values,'h', 'MarkerEdgeColor',colDarkGrey,'MarkerFaceColor',colDarkGrey,'MarkerSize',8);
hold on
plt_model = plot(1:irfHorizon, irf_model_varobs(:,varobs_id==uniqueVariables(jvar),jexo),'-k','linewidth',1);
plt_model = plot(1:irf_horizon, irf_model_varobs(:,varobs_id==unique_variables(jvar),jexo),'-k','linewidth',2);
hold on
plot([1 irfHorizon],[0 0],'-r','linewidth',0.5);
plot([1 irf_horizon],[0 0],'-r','linewidth',1);
hold off
xlim([1 irfHorizon]);
xlim([1 irf_horizon]);
remove_fractional_xticks
if TeX
title(['$' endo_names{uniqueVariables(jvar)} '$'],'Interpreter','latex');
title(['$' endo_names{unique_variables(jvar)} '$'],'Interpreter','latex');
else
title(endo_names{uniqueVariables(jvar)},'Interpreter','none');
title(endo_names{unique_variables(jvar)},'Interpreter','none');
end
if (plt==nstar) || jvar==length(uniqueVariables)
set(gca,'FontSize',12);
if (plt==nstar) || jvar==length(unique_variables)
% Adding a legend at the bottom
axes('Position',[0, 0, 1, 1],'Visible','off');
lgd = legend([plt_data,plt_model],{'Data', 'Model'}, 'Location', 'southeast','NumColumns',2);
lgd.Position = [0.405 0.025 lgd.Position(3) lgd.Position(4)];
lgd = legend([plt_data,plt_model],{'Data', 'Model'}, 'Location', 'southeast','NumColumns',2,'FontSize',14);
lgd.Position = [0.37 0.01 lgd.Position(3) lgd.Position(4)];
dyn_saveas(fig_irf,[graphDirectoryName filesep fname '_matched_irf_' exo_names{jexo} int2str(fig)],nodisplay,graph_format);
dyn_saveas(fig_irf,[graph_directory_name filesep fname '_matched_irf_' exo_names{jexo} int2str(fig)],nodisplay,graph_format);
if TeX && any(strcmp('eps',cellstr(graph_format)))
fprintf(fidTeX,'\\begin{figure}[H]\n');
fprintf(fidTeX,'\\centering \n');
fprintf(fidTeX,'\\includegraphics[width=%2.2f\\textwidth]{%s_matched_irf_%s%s}\n',figures_textwidth*min(plt/nc,1),[graphDirectoryName filesep fname],exo_names{jexo},int2str(fig));
fprintf(fid_TeX,'\\begin{figure}[H]\n');
fprintf(fid_TeX,'\\centering \n');
fprintf(fid_TeX,'\\includegraphics[width=%2.2f\\textwidth]{%s_matched_irf_%s%s}\n',figures_textwidth*min(plt/nc,1),[graph_directory_name filesep fname],exo_names{jexo},int2str(fig));
if relative_irf
fprintf(fidTeX,'\\caption{Relative impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo});
fprintf(fid_TeX,'\\caption{Relative impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo});
else
fprintf(fidTeX,'\\caption{Impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo});
fprintf(fid_TeX,'\\caption{Impulse response functions (orthogonalized shock to $%s$).}', exo_names_tex{jexo});
end
fprintf(fidTeX,'\\label{Fig:IRF:%s:%s}\n', exo_names{jexo},int2str(fig));
fprintf(fidTeX,'\\end{figure}\n');
fprintf(fidTeX,' \n');
fprintf(fid_TeX,'\\label{Fig:MatchedIRF:%s:%s}\n', exo_names{jexo},int2str(fig));
fprintf(fid_TeX,'\\end{figure}\n');
fprintf(fid_TeX,' \n');
end
end
end