2023-09-16 10:05:46 +02:00
function oo_ = posterior_analysis ( type,arg1,arg2,arg3,options_,M_,oo_,estim_params_)
2017-10-10 10:05:59 +02:00
2022-04-13 13:15:19 +02:00
% Copyright © 2008-2021 Dynare Team
2008-08-01 14:40:33 +02:00
%
% 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
2021-06-09 17:33:48 +02:00
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
2009-12-16 18:17:34 +01:00
info = check_posterior_analysis_data ( type , M_ ) ;
2013-12-18 16:39:41 +01:00
SampleSize = options_ . sub_draws ;
2009-12-16 18:17:34 +01:00
switch info
case 0
disp ( ' check_posterior_analysis_data:: Can' ' t find any mcmc file!' )
error ( ' Check the options of the estimation command...' )
case { 1 , 2 }
MaxMegaBytes = options_ . MaximumNumberOfMegaBytes ;
drsize = size_of_the_reduced_form_model ( oo_ . dr ) ;
if drsize * SampleSize > MaxMegaBytes
drsize = 0 ;
2008-07-01 13:03:23 +02:00
end
2023-09-16 10:05:46 +02:00
selec_posterior_draws ( M_ , options_ , oo_ . dr , oo_ . steady_state , oo_ . exo_steady_state , oo_ . exo_det_steady_state , estim_params_ , SampleSize , drsize ) ; %save draws to disk
2009-12-16 18:17:34 +01:00
oo_ = job ( type , SampleSize , arg1 , arg2 , arg3 , options_ , M_ , oo_ ) ;
case { 4 , 5 }
oo_ = job ( type , SampleSize , arg1 , arg2 , arg3 , options_ , M_ , oo_ ) ;
case 6
2012-06-06 12:27:46 +02:00
[ ivar , vartan ] = get_variables_list ( options_ , M_ ) ;
2009-12-16 18:17:34 +01:00
nvar = length ( ivar ) ;
oo_ = job ( type , SampleSize , arg1 , arg2 , arg3 , options_ , M_ , oo_ , nvar , vartan ) ;
otherwise
error ( [ ' posterior_analysis:: Check_posterior_analysis_data gave a meaningless output!' ] )
end
2008-07-01 13:03:23 +02:00
function oo_ = job ( type,SampleSize,arg1,arg2,arg3,options_,M_,oo_,nvar,vartan)
2009-12-16 18:17:34 +01:00
narg1 = 8 ;
narg2 = 10 ;
if ~ ( nargin == narg1 || nargin == narg2 )
error ( ' posterior_analysis:: Call to function job is buggy!' )
end
switch type
case ' variance'
if nargin == narg1
[ nvar , vartan , NumberOfFiles ] = ...
2021-07-22 17:03:27 +02:00
dsge_simulated_theoretical_covariance ( SampleSize , arg3 , M_ , options_ , oo_ , ' posterior' ) ;
2008-07-01 13:03:23 +02:00
end
2009-12-16 18:17:34 +01:00
oo_ = covariance_mc_analysis ( SampleSize , ' posterior' , M_ . dname , M_ . fname , ...
2017-05-16 15:10:20 +02:00
vartan , nvar , arg1 , arg2 , options_ . mh_conf_sig , oo_ , options_ ) ;
2009-12-16 18:17:34 +01:00
case ' decomposition'
if nargin == narg1
[ nvar , vartan , NumberOfFiles ] = ...
dsge_simulated_theoretical_variance_decomposition ( SampleSize , M_ , options_ , oo_ , ' posterior' ) ;
end
oo_ = variance_decomposition_mc_analysis ( SampleSize , ' posterior' , M_ . dname , M_ . fname , ...
2017-05-16 15:10:20 +02:00
M_ . exo_names , arg2 , vartan , arg1 , options_ . mh_conf_sig , oo_ , options_ ) ;
2020-06-26 18:24:33 +02:00
if ~ all ( diag ( M_ . H ) == 0 )
2017-09-09 08:42:08 +02:00
if strmatch ( arg1 , options_ . varobs , ' exact' )
2023-10-08 18:18:43 +02:00
if isoctave && octave_ver_less_than ( ' 8.4' ) %Octave bug #60347
observable_name_requested_vars = intersect_stable ( vartan , options_ . varobs ) ;
else
observable_name_requested_vars = intersect ( vartan , options_ . varobs , ' stable' ) ;
end
2017-09-09 08:42:08 +02:00
oo_ = variance_decomposition_ME_mc_analysis ( SampleSize , ' posterior' , M_ . dname , M_ . fname , ...
2020-06-26 18:24:33 +02:00
[ M_ . exo_names ; ' ME' ] , arg2 , observable_name_requested_vars , arg1 , options_ . mh_conf_sig , oo_ , options_ ) ;
2017-09-09 08:42:08 +02:00
end
2019-12-20 16:28:06 +01:00
end
2009-12-16 18:17:34 +01:00
case ' correlation'
if nargin == narg1
[ nvar , vartan , NumberOfFiles ] = ...
dsge_simulated_theoretical_correlation ( SampleSize , arg3 , M_ , options_ , oo_ , ' posterior' ) ;
end
oo_ = correlation_mc_analysis ( SampleSize , ' posterior' , M_ . dname , M_ . fname , ...
vartan , nvar , arg1 , arg2 , arg3 , options_ . mh_conf_sig , oo_ , M_ , options_ ) ;
case ' conditional decomposition'
if nargin == narg1
[ nvar , vartan , NumberOfFiles ] = ...
dsge_simulated_theoretical_conditional_variance_decomposition ( SampleSize , arg3 , M_ , options_ , oo_ , ' posterior' ) ;
end
oo_ = conditional_variance_decomposition_mc_analysis ( SampleSize , ' posterior' , M_ . dname , M_ . fname , ...
2017-05-16 15:10:20 +02:00
arg3 , M_ . exo_names , arg2 , vartan , arg1 , options_ . mh_conf_sig , oo_ , options_ ) ;
2020-06-26 18:24:33 +02:00
if ~ all ( diag ( M_ . H ) == 0 )
2017-10-10 10:05:59 +02:00
if strmatch ( arg1 , options_ . varobs , ' exact' )
2017-09-09 08:42:08 +02:00
oo_ = conditional_variance_decomposition_ME_mc_analysis ( SampleSize , ' posterior' , M_ . dname , M_ . fname , ...
2020-06-26 18:24:33 +02:00
arg3 , [ M_ . exo_names ; ' ME' ] , arg2 , vartan , arg1 , options_ . mh_conf_sig , oo_ , options_ ) ;
2017-09-09 08:42:08 +02:00
end
2019-12-20 16:28:06 +01:00
end
2009-12-16 18:17:34 +01:00
otherwise
disp ( ' Not yet implemented' )
2019-03-26 18:33:15 +01:00
end