2014-09-04 16:39:59 +02:00
function map_calibration ( OutputDirectoryName, Model, DynareOptions, DynareResults, EstimatedParameters)
% Copyright (C) 2014 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/>.
fname_ = Model . fname ;
pnames = Model . param_names ( EstimatedParameters . param_vals ( : , 1 ) , : ) ;
pvalue_ks = DynareOptions . opt_gsa . pvalue_ks ;
indx_irf = [ ] ;
indx_moment = [ ] ;
skipline ( )
disp ( ' Sensitivity analysis for calibration criteria' )
2014-09-12 14:49:25 +02:00
if DynareOptions . opt_gsa . ppost ,
filetoload = dir ( [ Model . dname filesep ' metropolis' filesep fname_ ' _param_irf*.mat' ] ) ;
lpmat = [ ] ;
for j = 1 : length ( filetoload ) ,
load ( [ Model . dname filesep ' metropolis' filesep fname_ ' _param_irf' , int2str ( j ) , ' .mat' ] )
lpmat = [ lpmat ; stock ] ;
clear stock
end
type = ' post' ;
2014-09-04 16:39:59 +02:00
else
2014-09-12 14:49:25 +02:00
if DynareOptions . opt_gsa . pprior
filetoload = [ OutputDirectoryName ' /' fname_ ' _prior' ] ;
load ( filetoload , ' lpmat' , ' lpmat0' , ' istable' , ' iunstable' , ' iindeterm' , ' iwrong' , ' infox' )
lpmat = [ lpmat0 lpmat ] ;
type = ' prior' ;
else
filetoload = [ OutputDirectoryName ' /' fname_ ' _mc' ] ;
load ( filetoload , ' lpmat' , ' lpmat0' , ' istable' , ' iunstable' , ' iindeterm' , ' iwrong' , ' infox' )
lpmat = [ lpmat0 lpmat ] ;
type = ' mc' ;
end
2014-09-04 16:39:59 +02:00
end
[ Nsam , np ] = size ( lpmat ) ;
nbr_irf_restrictions = size ( DynareOptions . endogenous_prior_restrictions . irf , 1 ) ;
mat_irf = cell ( nbr_irf_restrictions , 1 ) ;
for ij = 1 : nbr_irf_restrictions ,
mat_irf { ij } = NaN ( Nsam , length ( DynareOptions . endogenous_prior_restrictions . irf { ij , 3 } ) ) ;
end
nbr_moment_restrictions = size ( DynareOptions . endogenous_prior_restrictions . moment , 1 ) ;
mat_moment = cell ( nbr_moment_restrictions , 1 ) ;
for ij = 1 : nbr_moment_restrictions ,
mat_moment { ij } = NaN ( Nsam , length ( DynareOptions . endogenous_prior_restrictions . moment { ij , 3 } ) ) ;
end
irestrictions = [ 1 : Nsam ] ;
for j = 1 : Nsam ,
2014-09-12 14:49:25 +02:00
Model = set_all_parameters ( lpmat ( j , : ) ' , EstimatedParameters , Model ) ;
2014-09-04 16:39:59 +02:00
[ Tt , Rr , SteadyState , info ] = dynare_resolve ( Model , DynareOptions , DynareResults , ' restrict' ) ;
if info ( 1 ) == 0 ,
[ info , info_irf , info_moment , data_irf , data_moment ] = endogenous_prior_restrictions ( Tt , Rr , Model , DynareOptions , DynareResults ) ;
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
end
irestrictions = irestrictions ( find ( irestrictions ) ) ;
2014-09-12 14:49:25 +02:00
xmat = lpmat ( irestrictions , : ) ;
2014-09-04 16:39:59 +02:00
skipline ( )
2014-09-12 14:49:25 +02:00
save ( [ OutputDirectoryName , filesep , fname_ , ' _' , type , ' _restrictions' ] , ' xmat' , ' mat_irf' , ' mat_moment' , ' irestrictions' , ' indx_irf' , ' indx_moment' ) ;
2014-09-04 16:39:59 +02:00
if ~ isempty ( indx_irf ) ,
indx_irf = indx_irf ( irestrictions , : ) ;
2014-09-12 14:49:25 +02:00
h1 = dyn_figure ( DynareOptions , ' name' , [ type ' evaluation of irf restrictions' ] ) ;
2014-09-04 16:39:59 +02:00
nrow = ceil ( sqrt ( nbr_irf_restrictions ) ) ;
ncol = nrow ;
if nrow * ( nrow - 1 ) > nbr_irf_restrictions ,
ncol = nrow - 1 ;
end
for ij = 1 : nbr_irf_restrictions ,
figure ( h1 ) ,
mat_irf { ij } = mat_irf { ij } ( irestrictions , : ) ;
subplot ( nrow , ncol , ij ) ,
for ik = 1 : size ( mat_irf { ij } , 2 ) ,
cumplot ( mat_irf { ij } ( : , ik ) ) ,
hold all ,
end
% hist(mat_irf{ij}),
a = axis ;
x1val = max ( DynareOptions . endogenous_prior_restrictions . irf { ij , 4 } ( 1 ) , a ( 1 ) ) ;
x2val = min ( DynareOptions . endogenous_prior_restrictions . irf { ij , 4 } ( 2 ) , a ( 2 ) ) ;
hp = patch ( [ x1val x2val x2val x1val ] , a ( [ 3 3 4 4 ] ) , ' k' ) ;
set ( hp , ' FaceAlpha' , [ 0.5 ] )
hold off ,
leg = num2str ( DynareOptions . endogenous_prior_restrictions . irf { ij , 3 } ( 1 ) ) ;
if size ( mat_irf { ij } , 2 ) > 1 ,
leg = [ leg , ' :' , num2str ( DynareOptions . endogenous_prior_restrictions . irf { ij , 3 } ( end ) ) ] ;
end
title ( [ DynareOptions . endogenous_prior_restrictions . irf { ij , 1 } , ' vs ' , DynareOptions . endogenous_prior_restrictions . irf { ij , 2 } , ' (' , leg , ' )' ] , ' interpreter' , ' none' ) ,
indx1 = find ( indx_irf ( : , ij ) == 0 ) ;
indx2 = find ( indx_irf ( : , ij ) ~= 0 ) ;
atitle = [ DynareOptions . endogenous_prior_restrictions . irf { ij , 1 } , ' vs ' , DynareOptions . endogenous_prior_restrictions . irf { ij , 2 } , ' (' , leg , ' )' ] ;
fprintf ( [ ' %4.1f%% of the prior support matches IRF ' , atitle , ' inside [%4.1f, %4.1f]\n' ] , length ( indx1 ) / length ( irestrictions ) * 100 , DynareOptions . endogenous_prior_restrictions . irf { ij , 4 } )
2014-09-12 14:49:25 +02:00
aname = [ type ' _irf_calib_' , int2str ( ij ) ] ;
atitle = [ type ' IRF Calib: Parameter(s) driving ' , DynareOptions . endogenous_prior_restrictions . irf { ij , 1 } , ' vs ' , DynareOptions . endogenous_prior_restrictions . irf { ij , 2 } , ' (' , leg , ' )' ] ;
2014-09-04 16:39:59 +02:00
[ proba , dproba ] = stab_map_1 ( xmat , indx1 , indx2 , aname , 0 ) ;
indplot = find ( proba < pvalue_ks ) ;
if ~ isempty ( indplot )
stab_map_1 ( xmat , indx1 , indx2 , aname , 1 , indplot , OutputDirectoryName , [ ] , atitle ) ;
end
end
2014-09-12 14:49:25 +02:00
dyn_saveas ( h1 , [ OutputDirectoryName , filesep , fname_ , ' _' , type , ' _irf_restrictions' ] , DynareOptions ) ;
2014-09-04 16:39:59 +02:00
skipline ( )
end
if ~ isempty ( indx_moment )
indx_moment = indx_moment ( irestrictions , : ) ;
2014-09-12 14:49:25 +02:00
h2 = dyn_figure ( DynareOptions , ' name' , [ type ' evaluation of moment restrictions' ] ) ;
2014-09-04 16:39:59 +02:00
nrow = ceil ( sqrt ( nbr_moment_restrictions ) ) ;
ncol = nrow ;
if nrow * ( nrow - 1 ) > nbr_moment_restrictions ,
ncol = nrow - 1 ;
end
for ij = 1 : nbr_moment_restrictions ,
figure ( h2 ) ,
mat_moment { ij } = mat_moment { ij } ( irestrictions , : ) ;
subplot ( nrow , ncol , ij ) ,
for ik = 1 : size ( mat_moment { ij } , 2 ) ,
cumplot ( mat_moment { ij } ( : , ik ) ) ,
hold all ,
end
% hist(mat_moment{ij}),
a = axis ;
x1val = max ( DynareOptions . endogenous_prior_restrictions . moment { ij , 4 } ( 1 ) , a ( 1 ) ) ;
x2val = min ( DynareOptions . endogenous_prior_restrictions . moment { ij , 4 } ( 2 ) , a ( 2 ) ) ;
hp = patch ( [ x1val x2val x2val x1val ] , a ( [ 3 3 4 4 ] ) , ' k' ) ;
set ( hp , ' FaceAlpha' , [ 0.5 ] )
hold off ,
leg = num2str ( DynareOptions . endogenous_prior_restrictions . moment { ij , 3 } ( 1 ) ) ;
if size ( mat_moment { ij } , 2 ) > 1 ,
leg = [ leg , ' :' , num2str ( DynareOptions . endogenous_prior_restrictions . moment { ij , 3 } ( end ) ) ] ;
end
title ( [ DynareOptions . endogenous_prior_restrictions . moment { ij , 1 } , ' vs ' , DynareOptions . endogenous_prior_restrictions . moment { ij , 2 } , ' (' , leg , ' )' ] , ' interpreter' , ' none' ) ,
indx1 = find ( indx_moment ( : , ij ) == 0 ) ;
indx2 = find ( indx_moment ( : , ij ) ~= 0 ) ;
atitle = [ DynareOptions . endogenous_prior_restrictions . moment { ij , 1 } , ' vs ' , DynareOptions . endogenous_prior_restrictions . moment { ij , 2 } , ' (' , leg , ' )' ] ;
fprintf ( [ ' %4.1f%% of the prior support matches MOMENT ' , atitle , ' inside [%4.1f, %4.1f]\n' ] , length ( indx1 ) / length ( irestrictions ) * 100 , DynareOptions . endogenous_prior_restrictions . moment { ij , 4 } )
2014-09-12 14:49:25 +02:00
aname = [ type ' _moment_calib_' , int2str ( ij ) ] ;
atitle = [ type ' MOMENT Calib: Parameter(s) driving ' , DynareOptions . endogenous_prior_restrictions . moment { ij , 1 } , ' vs ' , DynareOptions . endogenous_prior_restrictions . moment { ij , 2 } , ' (' , leg , ' )' ] ;
2014-09-04 16:39:59 +02:00
[ proba , dproba ] = stab_map_1 ( xmat , indx1 , indx2 , aname , 0 ) ;
indplot = find ( proba < pvalue_ks ) ;
if ~ isempty ( indplot )
stab_map_1 ( xmat , indx1 , indx2 , aname , 1 , indplot , OutputDirectoryName , [ ] , atitle ) ;
end
end
2014-09-12 14:49:25 +02:00
dyn_saveas ( h2 , [ OutputDirectoryName , filesep , fname_ , ' _' , type , ' _moment_restrictions' ] , DynareOptions ) ;
2014-09-04 16:39:59 +02:00
skipline ( )
end
return