irf_matching: make comparison graph prettier
parent
378e38c8c2
commit
2521314c39
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue