Skip to content
Snippets Groups Projects
Select Git revision
  • 91cf1d59f89da415c2552b7175491b51a867a863
  • master default protected
  • 6.x protected
  • madysson
  • 5.x protected
  • asm
  • time-varying-information-set
  • 4.6 protected
  • dynare_minreal
  • dragonfly
  • various_fixes
  • 4.5 protected
  • clang+openmp
  • exo_steady_state
  • declare_vars_in_model_block
  • julia
  • error_msg_undeclared_model_vars
  • static_aux_vars
  • slice
  • aux_func
  • penalty
  • 6.4 protected
  • 6.3 protected
  • 6.2 protected
  • 6.1 protected
  • 6.0 protected
  • 6-beta2 protected
  • 6-beta1 protected
  • 5.5 protected
  • 5.4 protected
  • 5.3 protected
  • 5.2 protected
  • 5.1 protected
  • 5.0 protected
  • 5.0-rc1 protected
  • 4.7-beta3 protected
  • 4.7-beta2 protected
  • 4.7-beta1 protected
  • 4.6.4 protected
  • 4.6.3 protected
  • 4.6.2 protected
41 results

stability_mapping_bivariate.m

Blame
  • map_calibration.m 25.59 KiB
    function map_calibration(OutputDirectoryName, M_, options_, oo_, estim_params_, bayestopt_)
    % map_calibration(OutputDirectoryName, M_, options_, oo_, estim_params_, bayestopt_)
    % Inputs:
    %  - OutputDirectoryName [string]    name of the output directory
    %  - M_                  [structure] describing the model
    %  - options_            [structure] describing the options
    %  - oo_                 [structure] storing the results
    %  - estim_params_       [structure] characterizing parameters to be estimated
    %  - bayestopt_          [structure] describing the priors
    %
    % Written by Marco Ratto
    % Joint Research Centre, The European Commission,
    % marco.ratto@ec.europa.eu
    
    % Copyright © 2014-2016 European Commission
    % Copyright © 2014-2023 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 <https://www.gnu.org/licenses/>.
    
    fname_ = M_.fname;
    
    np = estim_params_.np;
    nshock = estim_params_.nvx + estim_params_.nvn + estim_params_.ncx + estim_params_.ncn;
    pnames=cell(np,1);
    pnames_tex=cell(np,1);
    for jj=1:np
        if options_.TeX
            [param_name_temp, param_name_tex_temp]= get_the_name(nshock+jj, options_.TeX, M_, estim_params_, options_.varobs);
            pnames_tex{jj,1} = param_name_tex_temp;
            pnames{jj,1} = param_name_temp;
        else
            param_name_temp = get_the_name(nshock+jj, options_.TeX, M_, estim_params_, options_.varobs);
            pnames{jj,1} = param_name_temp;
        end
    end
    
    indx_irf = [];
    indx_moment = [];
    init = ~options_.opt_gsa.load_stab;
    
    options_mcf.pvalue_ks = options_.opt_gsa.pvalue_ks;
    options_mcf.pvalue_corr = options_.opt_gsa.pvalue_corr;
    options_mcf.alpha2 = options_.opt_gsa.alpha2_stab;
    options_mcf.param_names = pnames;
    if options_.TeX
        options_mcf.param_names_tex = pnames_tex;
    end
    options_mcf.fname_ = fname_;
    options_mcf.OutputDirectoryName = OutputDirectoryName;
    
    skipline()
    disp('Sensitivity analysis for calibration criteria')
    
    if options_.opt_gsa.ppost
        filetoload=dir([M_.dname filesep 'metropolis' filesep fname_ '_param_irf*.mat']);
        lpmat=[];
        for j=1:length(filetoload)
            load([M_.dname filesep 'metropolis' filesep fname_ '_param_irf',int2str(j),'.mat'],'stock')
            lpmat = [lpmat; stock];
            clear stock
        end
        type = 'post';
    else
        if options_.opt_gsa.pprior
            filetoload=[OutputDirectoryName '/' fname_ '_prior'];
            load(filetoload,'lpmat','lpmat0')
            lpmat = [lpmat0 lpmat];
            type = 'prior';
        else
            filetoload=[OutputDirectoryName '/' fname_ '_mc'];
            load(filetoload,'lpmat','lpmat0')
            lpmat = [lpmat0 lpmat];
            type = 'mc';
        end
    end
    [Nsam, np] = size(lpmat);
    npar = size(pnames,1);
    nshock = np - npar;
    
    nbr_irf_restrictions = size(options_.endogenous_prior_restrictions.irf,1);
    nbr_moment_restrictions = size(options_.endogenous_prior_restrictions.moment,1);
    
    if init
        mat_irf=cell(nbr_irf_restrictions,1);
        for ij=1:nbr_irf_restrictions
            mat_irf{ij}=NaN(Nsam,length(options_.endogenous_prior_restrictions.irf{ij,3}));
        end
    
        mat_moment=cell(nbr_moment_restrictions,1);
        for ij=1:nbr_moment_restrictions
            mat_moment{ij}=NaN(Nsam,length(options_.endogenous_prior_restrictions.moment{ij,3}));
        end
    
        irestrictions = 1:Nsam;
        h = dyn_waitbar(0,'Please wait...');
        for j=1:Nsam
            M_ = set_all_parameters(lpmat(j,:)',estim_params_,M_);
            if nbr_moment_restrictions
                [Tt,Rr,~,info,oo_.dr, M_.params] = dynare_resolve(M_,options_,oo_.dr, oo_.steady_state, oo_.exo_steady_state, oo_.exo_det_steady_state);
            else
                [Tt,Rr,~,info,oo_.dr, M_.params] = dynare_resolve(M_,options_,oo_.dr, oo_.steady_state, oo_.exo_steady_state, oo_.exo_det_steady_state,'restrict');
            end
            if info(1)==0
                [~, info_irf, info_moment, data_irf, data_moment]=endogenous_prior_restrictions(Tt,Rr,M_,options_,oo_.dr,oo_.steady_state,oo_.exo_steady_state,oo_.exo_det_steady_state);
                if ~isempty(info_irf)
                    for ij=1:nbr_irf_restrictions
                        mat_irf{ij}(j,:)=data_irf{ij}(:,2)';
                    end
                    indx_irf(j,:)=info_irf(:,1);
                end
                if ~isempty(info_moment)
                    for ij=1:nbr_moment_restrictions
                        mat_moment{ij}(j,:)=data_moment{ij}(:,2)';
                    end
                    indx_moment(j,:)=info_moment(:,1);
                end
            else
                irestrictions(j)=0;
            end
            if mod(j,3)==0
                dyn_waitbar(j/Nsam,h,['MC iteration ',int2str(j),'/',int2str(Nsam)])
            end
        end
        dyn_waitbar_close(h);
    
        irestrictions=irestrictions(find(irestrictions));
        xmat=lpmat(irestrictions,:);
        skipline()
        endo_prior_restrictions=options_.endogenous_prior_restrictions;
        save([OutputDirectoryName,filesep,fname_,'_',type,'_restrictions'],'xmat','mat_irf','mat_moment','irestrictions','indx_irf','indx_moment','endo_prior_restrictions');
    else
        load([OutputDirectoryName,filesep,fname_,'_',type,'_restrictions'],'xmat','mat_irf','mat_moment','irestrictions','indx_irf','indx_moment','endo_prior_restrictions');
    end
    if ~isempty(indx_irf)
        skipline()
        disp('Deleting old IRF calibration plots ...')
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_irf_calib*.eps']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_irf_calib*.fig']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_irf_calib*.pdf']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions.eps']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions.fig']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions.pdf']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        disp('done !')
        skipline()
    
        % For single legend search which has maximum nbr of restrictions
        all_irf_couples = cellstr([char(endo_prior_restrictions.irf(:,1)) char(endo_prior_restrictions.irf(:,2))]);
        irf_couples = unique(all_irf_couples);
        nbr_irf_couples = size(irf_couples,1);
        plot_indx = NaN(nbr_irf_couples,1);
        time_matrix=cell(nbr_irf_couples,1);
        indx_irf_matrix=zeros(length(irestrictions),nbr_irf_couples);
        irf_matrix=cell(nbr_irf_couples,1);
        irf_mean=cell(nbr_irf_couples,1);
        irf_median=cell(nbr_irf_couples,1);
        irf_var=cell(nbr_irf_couples,1);
        irf_HPD=cell(nbr_irf_couples,1);
        irf_distrib=cell(nbr_irf_couples,1);
        maxijv=0;
        for ij=1:nbr_irf_restrictions
            if length(endo_prior_restrictions.irf{ij,3})>maxijv
                maxijv=length(endo_prior_restrictions.irf{ij,3});
            end
            plot_indx(ij) = find(strcmp(irf_couples,all_irf_couples(ij,:)));
            time_matrix{plot_indx(ij)} = [time_matrix{plot_indx(ij)} endo_prior_restrictions.irf{ij,3}];
        end
        iplot_indx = ones(size(plot_indx));
    
        indx_irf = indx_irf(irestrictions,:);
        if ~options_.nograph
            h1=dyn_figure(options_.nodisplay,'name',[type ' evaluation of irf restrictions']);
            nrow=ceil(sqrt(nbr_irf_couples));
            ncol=nrow;
            if nrow*(nrow-1)>nbr_irf_couples
                ncol=nrow-1;
            end
        end
        for ij=1:nbr_irf_restrictions
            mat_irf{ij}=mat_irf{ij}(irestrictions,:);
            irf_matrix{plot_indx(ij)} = [irf_matrix{plot_indx(ij)} mat_irf{ij}];
            indx_irf_matrix(:,plot_indx(ij)) = indx_irf_matrix(:,plot_indx(ij)) + indx_irf(:,ij);
            for ik=1:size(mat_irf{ij},2)
                [Mean,Median,Var,HPD,Distrib] = ...
                    posterior_moments(mat_irf{ij}(:,ik),options_.mh_conf_sig);
                irf_mean{plot_indx(ij)} = [irf_mean{plot_indx(ij)}; Mean];
                irf_median{plot_indx(ij)} = [irf_median{plot_indx(ij)}; Median];
                irf_var{plot_indx(ij)} = [irf_var{plot_indx(ij)}; Var];
                irf_HPD{plot_indx(ij)} = [irf_HPD{plot_indx(ij)}; HPD];
                irf_distrib{plot_indx(ij)} = [irf_distrib{plot_indx(ij)}; Distrib'];
            end
            leg = num2str(endo_prior_restrictions.irf{ij,3}(1));
            aleg = num2str(endo_prior_restrictions.irf{ij,3}(1));
            if size(mat_irf{ij},2)>1
                leg = [leg,':' ,num2str(endo_prior_restrictions.irf{ij,3}(end))];
                aleg = [aleg,'-' ,num2str(endo_prior_restrictions.irf{ij,3}(end))];
                iplot_indx(ij)=0;
            end
            if ~options_.nograph && length(time_matrix{plot_indx(ij)})==1
                set(0,'currentfigure',h1),
                subplot(nrow,ncol, plot_indx(ij)),
                hc = gsa.cumplot(mat_irf{ij}(:,ik));
                a=axis;
                delete(hc);
                x1val=max(endo_prior_restrictions.irf{ij,4}(1),a(1));
                x2val=min(endo_prior_restrictions.irf{ij,4}(2),a(2));
                hp = patch([x1val x2val x2val x1val],a([3 3 4 4]),'b');
                hold all,
                set(hp,'FaceColor', [0.7 0.8 1])
                hc = gsa.cumplot(mat_irf{ij}(:,ik));
                set(hc,'color','k','linewidth',2)
                hold off,
                %         hold off,
                title([endo_prior_restrictions.irf{ij,1},' vs ',endo_prior_restrictions.irf{ij,2}, '(', leg,')'],'interpreter','none'),
            end
            indx1 = find(indx_irf(:,ij)==0);
            indx2 = find(indx_irf(:,ij)~=0);
            atitle0=[endo_prior_restrictions.irf{ij,1},' vs ',endo_prior_restrictions.irf{ij,2}, '(', leg,')'];
            fprintf(['%4.1f%% of the ',type,' support matches IRF ',atitle0,' inside [%4.1f, %4.1f]\n'],length(indx1)/length(irestrictions)*100,endo_prior_restrictions.irf{ij,4})
            aname=[type '_irf_calib_',endo_prior_restrictions.irf{ij,1},'_vs_',endo_prior_restrictions.irf{ij,2},'_',aleg];
            atitle=[type ' IRF Calib: Parameter(s) driving ',endo_prior_restrictions.irf{ij,1},' vs ',endo_prior_restrictions.irf{ij,2}, '(', leg,')'];
            options_mcf.amcf_name = aname;
            options_mcf.amcf_title = atitle;
            options_mcf.beha_title = 'IRF restriction';
            options_mcf.nobeha_title = 'NO IRF restriction';
            if options_.TeX
                options_mcf.beha_title_latex = 'IRF restriction';
                options_mcf.nobeha_title_latex = 'NO IRF restriction';
            end
            options_mcf.title = atitle0;
            if ~isempty(indx1) && ~isempty(indx2)
                gsa.monte_carlo_filtering_analysis(xmat(:,nshock+1:end), indx1, indx2, options_mcf, M_, options_, bayestopt_, estim_params_);
            end
        end
        for ij=1:nbr_irf_couples
            if length(time_matrix{ij})>1
                if ~options_.nograph
                    set(0,'currentfigure',h1);
                    subplot(nrow,ncol, ij)
                    itmp = (find(plot_indx==ij));
                    htmp = plot(time_matrix{ij},[max(irf_matrix{ij})' min(irf_matrix{ij})'],'k--','linewidth',2);
                    a=axis;
                    delete(htmp);
                    tmp=[];
                    for ir=1:length(itmp)
                        for it=1:length(endo_prior_restrictions.irf{itmp(ir),3})
                            temp_index = find(time_matrix{ij}==endo_prior_restrictions.irf{itmp(ir),3}(it));
                            tmp(temp_index,:) = endo_prior_restrictions.irf{itmp(ir),4};
                        end
                    end
                    tmp(isinf(tmp(:,1)),1)=a(3);
                    tmp(isinf(tmp(:,2)),2)=a(4);
                    hp = patch([time_matrix{ij} time_matrix{ij}(end:-1:1)],[tmp(:,1); tmp(end:-1:1,2)],'c');
                    set(hp,'FaceColor',[0.7 0.8 1])
                    hold on,
                    plot(time_matrix{ij},[max(irf_matrix{ij})' min(irf_matrix{ij})'],'k--','linewidth',2)
                    plot(time_matrix{ij},irf_median{ij},'k','linewidth',2)
                    plot(time_matrix{ij},[irf_distrib{ij}],'k-')
                    plot(a(1:2),[0 0],'r')
                    hold off
                    axis([max(1,a(1)) a(2:4)])
                    box on
                    itmp = min(itmp);
                    title([endo_prior_restrictions.irf{itmp,1},' vs ',endo_prior_restrictions.irf{itmp,2}],'interpreter','none'),
                end
                if any(iplot_indx.*plot_indx==ij)
                    % MCF of the couples with logical AND
                    itmp = min(find(plot_indx==ij));
                    indx1 = find(indx_irf_matrix(:,ij)==0);
                    indx2 = find(indx_irf_matrix(:,ij)~=0);
                    leg = num2str(time_matrix{ij}(1));
                    leg = [leg '...' num2str(time_matrix{ij}(end))];
                    aleg = 'ALL';
                    atitle0=[endo_prior_restrictions.irf{itmp,1},' vs ',endo_prior_restrictions.irf{itmp,2}, '(', leg,')'];
                    fprintf(['%4.1f%% of the ',type,' support matches IRF restrictions ',atitle0,'\n'],length(indx1)/length(irestrictions)*100)
                    aname=[type '_irf_calib_',endo_prior_restrictions.irf{itmp,1},'_vs_',endo_prior_restrictions.irf{itmp,2},'_',aleg];
                    atitle=[type ' IRF Calib: Parameter(s) driving ',endo_prior_restrictions.irf{itmp,1},' vs ',endo_prior_restrictions.irf{itmp,2}, '(', leg,')'];
                    options_mcf.amcf_name = aname;
                    options_mcf.amcf_title = atitle;
                    options_mcf.beha_title = 'IRF restriction';
                    options_mcf.nobeha_title = 'NO IRF restriction';
                    if options_.TeX
                        options_mcf.beha_title_latex = 'IRF restriction';
                        options_mcf.nobeha_title_latex = 'NO IRF restriction';
                    end
    
                    options_mcf.title = atitle0;
                    if ~isempty(indx1) && ~isempty(indx2)
                        gsa.monte_carlo_filtering_analysis(xmat(:,nshock+1:end), indx1, indx2, options_mcf, M_, options_, bayestopt_, estim_params_);
                    end
                end
            end
        end
        if ~options_.nograph
            dyn_saveas(h1,[OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions'],options_.nodisplay,options_.graph_format);
            create_TeX_loader(options_,[OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions'],[type ' evaluation of irf restrictions'],'irf_restrictions',type,options_.figures.textwidth*min(ij/ncol,1))
        end
        skipline()
    end
    
    if ~isempty(indx_moment)
        skipline()
        disp('Deleting old MOMENT calibration plots ...')
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_moment_calib*.eps']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_moment_calib*.fig']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_moment_calib*.pdf']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions.eps']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions.fig']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        a=dir([OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions.pdf']);
        for j=1:length(a)
            delete([OutputDirectoryName,filesep,a(j).name]);
        end
        disp('done !')
        skipline()
    
        %get parameter names including standard deviations
        np=size(bayestopt_.name,1);
        name=cell(np,1);
        name_tex=cell(np,1);
        for jj=1:np
            if options_.TeX
                [param_name_temp, param_name_tex_temp]= get_the_name(jj,options_.TeX,M_,estim_params_,options_.varobs);
                name_tex{jj,1} = param_name_tex_temp;
                name{jj,1} = param_name_temp;
            else
                param_name_temp = get_the_name(jj,options_.TeX,M_,estim_params_,options_.varobs);
                name{jj,1} = param_name_temp;
            end
        end
        options_mcf.param_names = name;
        if options_.TeX
            options_mcf.param_names_tex = name_tex;
        end
        options_mcf.param_names = bayestopt_.name;
        all_moment_couples = cellstr([char(endo_prior_restrictions.moment(:,1)) char(endo_prior_restrictions.moment(:,2))]);
        moment_couples = unique(all_moment_couples);
        nbr_moment_couples = size(moment_couples,1);
        plot_indx = NaN(nbr_moment_couples,1);
        time_matrix=cell(nbr_moment_couples,1);
        indx_moment_matrix=zeros(length(irestrictions),nbr_moment_couples);
        moment_matrix=cell(nbr_moment_couples,1);
        moment_mean=cell(nbr_moment_couples,1);
        moment_median=cell(nbr_moment_couples,1);
        moment_var=cell(nbr_moment_couples,1);
        moment_HPD=cell(nbr_moment_couples,1);
        moment_distrib=cell(nbr_moment_couples,1);
        % For single legend search which has maximum nbr of restrictions
        maxijv=0;
        for ij=1:nbr_moment_restrictions
            endo_prior_restrictions.moment{ij,3} = sort(endo_prior_restrictions.moment{ij,3});
            if length(endo_prior_restrictions.moment{ij,3})>maxijv
                maxijv=length(endo_prior_restrictions.moment{ij,3});
            end
            plot_indx(ij) = find(strcmp(moment_couples,all_moment_couples(ij,:)));
            time_matrix{plot_indx(ij)} = [time_matrix{plot_indx(ij)} endo_prior_restrictions.moment{ij,3}];
        end
        iplot_indx = ones(size(plot_indx));
    
        indx_moment = indx_moment(irestrictions,:);
        if ~options_.nograph
            h2=dyn_figure(options_.nodisplay,'name',[type ' evaluation of moment restrictions']);
            nrow=ceil(sqrt(nbr_moment_couples));
            ncol=nrow;
            if nrow*(nrow-1)>nbr_moment_couples
                ncol=nrow-1;
            end
        end
    
        for ij=1:nbr_moment_restrictions
            mat_moment{ij}=mat_moment{ij}(irestrictions,:);
            moment_matrix{plot_indx(ij)} = [moment_matrix{plot_indx(ij)} mat_moment{ij}];
            indx_moment_matrix(:,plot_indx(ij)) = indx_moment_matrix(:,plot_indx(ij)) + indx_moment(:,ij);
            for ik=1:size(mat_moment{ij},2)
                [Mean,Median,Var,HPD,Distrib] = ...
                    posterior_moments(mat_moment{ij}(:,ik),options_.mh_conf_sig);
                moment_mean{plot_indx(ij)} = [moment_mean{plot_indx(ij)}; Mean];
                moment_median{plot_indx(ij)} = [moment_median{plot_indx(ij)}; Median];
                moment_var{plot_indx(ij)} = [moment_var{plot_indx(ij)}; Var];
                moment_HPD{plot_indx(ij)} = [moment_HPD{plot_indx(ij)}; HPD];
                moment_distrib{plot_indx(ij)} = [moment_distrib{plot_indx(ij)}; Distrib'];
            end
            leg = num2str(endo_prior_restrictions.moment{ij,3}(1));
            aleg = num2str(endo_prior_restrictions.moment{ij,3}(1));
            if size(mat_moment{ij},2)>1
                leg = [leg,':' ,num2str(endo_prior_restrictions.moment{ij,3}(end))];
                aleg = [aleg,'_' ,num2str(endo_prior_restrictions.moment{ij,3}(end))];
                iplot_indx(ij)=0;
            end
            if ~options_.nograph && length(time_matrix{plot_indx(ij)})==1
                set(0,'currentfigure',h2);
                subplot(nrow,ncol,plot_indx(ij)),
                hc = gsa.cumplot(mat_moment{ij}(:,ik));
                a=axis; delete(hc),
                %     hist(mat_moment{ij}),
                x1val=max(endo_prior_restrictions.moment{ij,4}(1),a(1));
                x2val=min(endo_prior_restrictions.moment{ij,4}(2),a(2));
                hp = patch([x1val x2val x2val x1val],a([3 3 4 4]),'b');
                set(hp,'FaceColor', [0.7 0.8 1])
                hold all
                hc = gsa.cumplot(mat_moment{ij}(:,ik));
                set(hc,'color','k','linewidth',2)
                hold off
                title([endo_prior_restrictions.moment{ij,1},' vs ',endo_prior_restrictions.moment{ij,2},'(',leg,')'],'interpreter','none'),
            end
            indx1 = find(indx_moment(:,ij)==0);
            indx2 = find(indx_moment(:,ij)~=0);
            atitle0=[endo_prior_restrictions.moment{ij,1},' vs ',endo_prior_restrictions.moment{ij,2}, '(', leg,')'];
            fprintf(['%4.1f%% of the ',type,' support matches MOMENT ',atitle0,' inside [%4.1f, %4.1f]\n'],length(indx1)/length(irestrictions)*100,endo_prior_restrictions.moment{ij,4})
            aname=[type '_moment_calib_',endo_prior_restrictions.moment{ij,1},'_vs_',endo_prior_restrictions.moment{ij,2},'_',aleg];
            atitle=[type ' MOMENT Calib: Parameter(s) driving ',endo_prior_restrictions.moment{ij,1},' vs ',endo_prior_restrictions.moment{ij,2}, '(', leg,')'];
            options_mcf.amcf_name = aname;
            options_mcf.amcf_title = atitle;
            options_mcf.beha_title = 'moment restriction';
            options_mcf.nobeha_title = 'NO moment restriction';
            if options_.TeX
                options_mcf.beha_title_latex = 'moment restriction';
                options_mcf.nobeha_title_latex = 'NO moment restriction';
            end
            options_mcf.title = atitle0;
            if ~isempty(indx1) && ~isempty(indx2)
                gsa.monte_carlo_filtering_analysis(xmat, indx1, indx2, options_mcf, M_, options_, bayestopt_, estim_params_);
            end
        end
        for ij=1:nbr_moment_couples
            time_matrix{ij} = sort(time_matrix{ij});
            if length(time_matrix{ij})>1
                if ~options_.nograph
                    itmp = (find(plot_indx==ij));
                    set(0,'currentfigure',h2);
                    subplot(nrow,ncol, ij)
                    htmp = plot(time_matrix{ij},[max(moment_matrix{ij})' min(moment_matrix{ij})'],'k--','linewidth',2);
                    a=axis;
                    delete(htmp);
                    tmp=[];
                    for ir=1:length(itmp)
                        for it=1:length(endo_prior_restrictions.moment{itmp(ir),3})
                            temp_index = find(time_matrix{ij}==endo_prior_restrictions.moment{itmp(ir),3}(it));
                            tmp(temp_index,:) = endo_prior_restrictions.moment{itmp(ir),4};
                        end
                    end
                    tmp(isinf(tmp(:,1)),1)=a(3);
                    tmp(isinf(tmp(:,2)),2)=a(4);
                    hp = patch([time_matrix{ij} time_matrix{ij}(end:-1:1)],[tmp(:,1); tmp(end:-1:1,2)],'b');
                    set(hp,'FaceColor',[0.7 0.8 1])
                    hold on
                    plot(time_matrix{ij},[max(moment_matrix{ij})' min(moment_matrix{ij})'],'k--','linewidth',2)
                    plot(time_matrix{ij},moment_median{ij},'k','linewidth',2)
                    plot(time_matrix{ij},[moment_distrib{ij}],'k-')
                    plot(a(1:2),[0 0],'r')
                    hold off
                    axis(a)
                    box on
                    itmp = min(itmp);
                    title([endo_prior_restrictions.moment{itmp,1},' vs ',endo_prior_restrictions.moment{itmp,2}],'interpreter','none'),
                end
                if any(iplot_indx.*plot_indx==ij)
                    % MCF of the couples with logical AND
                    itmp = min(find(plot_indx==ij));
                    indx1 = find(indx_moment_matrix(:,ij)==0);
                    indx2 = find(indx_moment_matrix(:,ij)~=0);
                    leg = num2str(time_matrix{ij}(1));
                    leg = [leg '...' num2str(time_matrix{ij}(end))];
                    aleg = 'ALL';
                    atitle0=[endo_prior_restrictions.moment{itmp,1},' vs ',endo_prior_restrictions.moment{itmp,2}, '(', leg,')'];
                    fprintf(['%4.1f%% of the ',type,' support matches MOMENT restrictions ',atitle0,'\n'],length(indx1)/length(irestrictions)*100)
                    aname=[type '_moment_calib_',endo_prior_restrictions.moment{itmp,1},'_vs_',endo_prior_restrictions.moment{itmp,2},'_',aleg];
                    atitle=[type ' MOMENT Calib: Parameter(s) driving ',endo_prior_restrictions.moment{itmp,1},' vs ',endo_prior_restrictions.moment{itmp,2}, '(', leg,')'];
                    options_mcf.amcf_name = aname;
                    options_mcf.amcf_title = atitle;
                    options_mcf.beha_title = 'moment restriction';
                    options_mcf.nobeha_title = 'NO moment restriction';
                    if options_.TeX
                        options_mcf.beha_title_latex = 'moment restriction';
                        options_mcf.nobeha_title_latex = 'NO moment restriction';
                    end                
                    options_mcf.title = atitle0;
                    if ~isempty(indx1) && ~isempty(indx2)
                        gsa.monte_carlo_filtering_analysis(xmat, indx1, indx2, options_mcf, M_, options_, bayestopt_, estim_params_);
                    end
                end
            end
        end
        if ~options_.nograph
            dyn_saveas(h2,[OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions'],options_.nodisplay,options_.graph_format);
            create_TeX_loader(options_,[OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions'],[type ' evaluation of moment restrictions'],'moment_restrictions',type,options_.figures.textwidth*min(ij/ncol,1))
        end
    
        skipline()
    end
    return
    
    function []=create_TeX_loader(options,figpath,caption,label_name,label_type,scale_factor)
    if options.TeX && any(strcmp('eps',cellstr(options.graph_format)))
        fidTeX = fopen([figpath '.tex'],'w');
        fprintf(fidTeX,'%% TeX eps-loader file generated by map_calibration.m (Dynare).\n');
        fprintf(fidTeX,['%% ' datestr(now,0) '\n\n']);
        fprintf(fidTeX,'\\begin{figure}[H]\n');
        fprintf(fidTeX,'\\centering \n');
        fprintf(fidTeX,'\\includegraphics[width=%2.2f\\textwidth]{%s}\n',scale_factor,strrep(figpath,'\','/'));
        fprintf(fidTeX,'\\caption{%s.}',caption);
        fprintf(fidTeX,'\\label{Fig:%s:%s}\n',label_name,label_type);
        fprintf(fidTeX,'\\end{figure}\n\n');
        fprintf(fidTeX,'%% End Of TeX file. \n');
        fclose(fidTeX);
    end