diff --git a/matlab/correlation_mc_analysis.m b/matlab/correlation_mc_analysis.m new file mode 100644 index 000000000..578304b93 --- /dev/null +++ b/matlab/correlation_mc_analysis.m @@ -0,0 +1,152 @@ +function oo_ = correlation_mc_analysis(SampleSize,type,dname,fname,vartan,nvar,var1,var2,nar,mh_conf_sig,oo_,M_,options_) +% This function analyses the (posterior or prior) distribution of the +% endogenous variables correlation function. + +% Copyright (C) 2008-2009 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 . + + if strcmpi(type,'posterior') + TYPE = 'Posterior'; + PATH = [dname '/metropolis/'] + else + TYPE = 'Prior'; + PATH = [dname '/prior/moments/'] + end + + indx1 = check_name(vartan,var1); + if isempty(indx1) + disp([ type '_analysis:: ' var1 ' is not a stationary endogenous variable!']) + return + end + if ~isempty(var2) + indx2 = check_name(vartan,var2); + if isempty(indx2) + disp([ type '_analysis:: ' var2 ' is not a stationary endogenous variable!']) + return + end + else + indx2 = indx1; + var2 = var1; + end +` + if isfield(oo_,[TYPE 'TheoreticalMoments']) + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments;']) + if isfield(temporary_structure,'dsge') + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge;']) + if isfield(temporary_structure,'correlation') + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge.mean;']) + if isfield(temporary_structure,var1) + eval(['temporary_structure_1 = oo_.' TYPE 'TheoreticalMoments.dsge.mean.' var1 ';']) + if isfield(temporary_structure_1,var2) + eval(['temporary_structure_2 = temporary_structure_1.' var2 ';']) + l1 = length(temporary_structure_2); + if l1. - - indx1 = check_name(vartan,var1); - if isempty(indx1) - disp(['posterior_analysis:: ' var1 ' is not a stationary endogenous variable!']) - return - end - if ~isempty(var2) - indx2 = check_name(vartan,var2); - if isempty(indx2) - disp(['posterior_analysis:: ' var2 ' is not a stationary endogenous variable!']) - return - end - else - indx2 = indx1; - var2 = var1; - end - if isfield(oo_,'PosteriorTheoreticalMoments') - if isfield(oo_.PosteriorTheoreticalMoments,'dsge') - if isfield(oo_.PosteriorTheoreticalMoments.dsge,'correlation') - if isfield(oo_.PosteriorTheoreticalMoments.dsge.correlation.mean,var1) - eval(['s1 = oo_.PosteriorTheoreticalMoments.dsge.correlation.mean' '.' var1 ';']) - if isfield(s1,var2) - eval(['s2 = s1' '.' var2 ';']) - l1 = length(s2); - if l1. + + if strcmpi(type,'posterior') + TYPE = 'Posterior'; + PATH = [dname '/metropolis/'] + posterior = 1; + else + TYPE = 'Prior'; + PATH = [dname '/prior/moments/'] + posterior = 0; + end + + indx1 = check_name(vartan,var1); + if isempty(indx1) + disp([ type '_analysis:: ' var1 ' is not a stationary endogenous variable!']) + return + end + if ~isempty(var2) + indx2 = check_name(vartan,var2); + if isempty(indx2) + disp([ prior '_analysis:: ' var2 ' is not a stationary endogenous variable!']) + return + end + else + indx2 = indx1; + var2 = var1; + end + + if isfield(oo_,[ TYPE 'TheoreticalMoments']) + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments;']) + if isfield(temporary_structure,'dsge') + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge;']) + if isfield(temporary_structure,'covariance') + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge.covariance.mean;']) + if isfield(temporary_structure,var1) + eval(['temporary_structure_1 = oo_.' TYPE 'TheoreticalMoments.dsge.covariance.mean.' var1 ';']) + if isfield(temporary_structure_1,var2) + % Nothing to do (the covariance matrix is symmetric!). + return + end + else + if isfield(temporary_structure,var2) + eval(['temporary_structure_2 = oo_.' TYPE 'TheoreticalMoments.dsge.covariance.mean.' var2 ';']) + if isfield(temporary_structure_2,var1) + % Nothing to do (the covariance matrix is symmetric!). + return + end + end + end + end + end + end + + ListOfFiles = dir([ PATH fname '_' TYPE '2ndOrderMoments*.mat']); + i1 = 1; tmp = zeros(NumberOfSimulations,1); + for file = 1:length(ListOfFiles) + load([ PATH ListOfFiles(file).name ]); + i2 = i1 + rows(Covariance_matrix) - 1; + tmp(i1:i2) = Covariance_matrix(:,symmetric_matrix_index(indx1,indx2,nvar)); + i1 = i2+1; + end + name = [var1 '.' var2]; + if ~isconst(tmp) + [p_mean, p_median, p_var, hpd_interval, p_deciles, density] = ... + posterior_moments(tmp,1,mh_conf_sig); + eval(['oo_.' TYPE 'TheoreticalMoments.dsge.covariance.mean.' name ' = p_mean;']); + eval(['oo_.' TYPE 'TheoreticalMoments.dsge.covariance.median.' name ' = p_median;']); + eval(['oo_.' TYPE 'TheoreticalMoments.dsge.covariance.variance.' name ' = p_var;']); + eval(['oo_.' TYPE 'TheoreticalMoments.dsge.covariance.hpdinf.' name ' = hpd_interval(1);']); + eval(['oo_.' TYPE 'TheoreticalMoments.dsge.covariance.hpdsup.' name ' = hpd_interval(2);']); + eval(['oo_.' TYPE 'TheoreticalMoments.dsge.covariance.deciles.' name ' = p_deciles;']); + eval(['oo_.' TYPE 'Theoreticalmoments.dsge.covariance.density.' name ' = density;']); + else + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.mean.' name ' = NaN;']); + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.median.' name ' = NaN;']); + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.variance.' name ' = NaN;']); + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.hpdinf.' name ' = NaN;']); + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.hpdsup.' name ' = NaN;']); + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.deciles.' name ' = NaN;']); + eval(['oo_.' NAME 'TheoreticalMoments.dsge.covariance.density.' name ' = NaN;']); + end \ No newline at end of file diff --git a/matlab/covariance_posterior_analysis.m b/matlab/covariance_posterior_analysis.m deleted file mode 100644 index b879c5731..000000000 --- a/matlab/covariance_posterior_analysis.m +++ /dev/null @@ -1,84 +0,0 @@ -function oo_ = covariance_posterior_analysis(NumberOfSimulations,dname,fname,vartan,nvar,var1,var2,mh_conf_sig,oo_) - -% Copyright (C) 2008 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 . - - indx1 = check_name(vartan,var1); - if isempty(indx1) - disp(['posterior_analysis:: ' var1 ' is not a stationary endogenous variable!']) - return - end - if ~isempty(var2) - indx2 = check_name(vartan,var2); - if isempty(indx2) - disp(['posterior_analysis:: ' var2 ' is not a stationary endogenous variable!']) - return - end - else - indx2 = indx1; - var2 = var1; - end - if isfield(oo_,'PosteriorTheoreticalMoments') - if isfield(oo_.PosteriorTheoreticalMoments,'dsge') - if isfield(oo_.PosteriorTheoreticalMoments.dsge,'covariance') - if isfield(oo_.PosteriorTheoreticalMoments.dsge.covariance.mean,var1) - eval(['s1 = oo_.PosteriorTheoreticalMoments.dsge.covariance.mean' '.' var1 ';']) - if isfield(s1,var2) - % Nothing to do. - return - end - else - if isfield(oo_.PosteriorTheoreticalMoments.dsge.covariance.mean,var2) - eval(['s2 = oo_.PosteriorTheoreticalMoments.dsge.covariance.mean' '.' var2 ';']) - if isfield(s1,var1) - % Nothing to do (the covariance matrix is symmetric!). - return - end - end - end - end - end - end - tmp = dir([ dname '/metropolis/' fname '_Posterior2ndOrderMoments*.mat']); - NumberOfFiles = length(tmp); - i1 = 1; tmp = zeros(NumberOfSimulations,1); - for file = 1:NumberOfFiles - load([ dname '/metropolis/' fname '_Posterior2ndOrderMoments' int2str(file) '.mat']); - i2 = i1 + rows(Covariance_matrix) - 1; - tmp(i1:i2) = Covariance_matrix(:,symmetric_matrix_index(indx1,indx2,nvar)); - i1 = i2+1; - end - name = [var1 '.' var2]; - if ~isconst(tmp) - [post_mean, post_median, post_var, hpd_interval, post_deciles, density] = ... - posterior_moments(tmp,1,mh_conf_sig); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.mean.' name ' = post_mean;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.median.' name ' = post_median;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.variance.' name ' = post_var;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.hpdinf.' name ' = hpd_interval(1);']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.hpdsup.' name ' = hpd_interval(2);']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.deciles.' name ' = post_deciles;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.density.' name ' = density;']); - else - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.mean.' name ' = NaN;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.median.' name ' = NaN;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.variance.' name ' = NaN;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.hpdinf.' name ' = NaN;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.hpdsup.' name ' = NaN;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.deciles.' name ' = NaN;']); - eval(['oo_.PosteriorTheoreticalMoments.dsge.covariance.density.' name ' = NaN;']); - end \ No newline at end of file diff --git a/matlab/get_prior_info.m b/matlab/get_prior_info.m index 2008cab03..070efd2c2 100644 --- a/matlab/get_prior_info.m +++ b/matlab/get_prior_info.m @@ -115,7 +115,7 @@ function get_prior_info(info) look_for_admissible_initial_condition = 1; scale = 1.0; iter = 0; - while look_for_admissible_initial_condition + While look_for_admissible_initial_condition xinit = xparam1+scale*randn(size(xparam1)); if all(xinit>bayestopt_.p3) && all(xinit