From d6fe54dc1892bd6d2f96ef4d04d0084480932d09 Mon Sep 17 00:00:00 2001 From: stepan Date: Fri, 26 Jun 2009 10:21:30 +0000 Subject: [PATCH] + Bug fixes related to the computation of prior (and posterior) moments. + Cosmetic changes. git-svn-id: https://www.dynare.org/svn/dynare/trunk@2791 ac1d8469-bf42-47a9-8791-bf33cf982152 --- matlab/conditional_variance_decomposition.m | 2 + ...ional_variance_decomposition_mc_analysis.m | 2 +- ...tical_conditional_variance_decomposition.m | 49 ++++++++++--------- .../dsge_simulated_theoretical_correlation.m | 1 + .../dsge_simulated_theoretical_covariance.m | 1 + ...lated_theoretical_variance_decomposition.m | 1 + matlab/prior_sampler.m | 44 ++++++++--------- 7 files changed, 53 insertions(+), 47 deletions(-) diff --git a/matlab/conditional_variance_decomposition.m b/matlab/conditional_variance_decomposition.m index 047200a38..0a0de4845 100644 --- a/matlab/conditional_variance_decomposition.m +++ b/matlab/conditional_variance_decomposition.m @@ -35,6 +35,7 @@ function PackedConditionalVarianceDecomposition = conditional_variance_decomposi ConditionalVariance = zeros(StateSpaceModel.number_of_state_equations,StateSpaceModel.number_of_state_equations); ConditionalVariance = repmat(ConditionalVariance,[1 1 length(Steps) StateSpaceModel.number_of_state_innovations]); BB = StateSpaceModel.impulse_matrix*transpose(StateSpaceModel.impulse_matrix); + for h = 1:length(Steps) for t = 0:Steps(h) for i=1:StateSpaceModel.number_of_state_innovations @@ -44,6 +45,7 @@ function PackedConditionalVarianceDecomposition = conditional_variance_decomposi end end end + ConditionalVariance = ConditionalVariance(SubsetOfVariables,SubsetOfVariables,:,:); NumberOfVariables = length(SubsetOfVariables); PackedConditionalVarianceDecomposition = zeros(NumberOfVariables*(NumberOfVariables+1)/2,length(Steps),StateSpaceModel.number_of_state_innovations); diff --git a/matlab/conditional_variance_decomposition_mc_analysis.m b/matlab/conditional_variance_decomposition_mc_analysis.m index ee0a749be..c0701c692 100644 --- a/matlab/conditional_variance_decomposition_mc_analysis.m +++ b/matlab/conditional_variance_decomposition_mc_analysis.m @@ -45,7 +45,7 @@ function oo_ = conditional_variance_decomposition_mc_analysis(NumberOfSimulation if isfield(temporary_structure,'dsge') eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge;']) if isfield(temporary_structure,'ConditionalVarianceDecomposition') - eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge.VarianceDecomposition.mean;']) + eval(['temporary_structure = oo_.' TYPE 'TheoreticalMoments.dsge.ConditionalVarianceDecomposition.mean;']) if isfield(temporary_structure,name) if sum(Steps-temporary_structure.(name)(1,:)) == 0 % Nothing (new) to do here... diff --git a/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m b/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m index 25f8a7e99..2b993e21b 100644 --- a/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m +++ b/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m @@ -40,6 +40,7 @@ if strcmpi(type,'posterior') posterior = 1; elseif strcmpi(type,'prior') DrawsFiles = dir([M_.dname '/prior/draws/' type '_draws*' ]); + CheckPath('prior/moments'); posterior = 0; else disp('dsge_simulated_theoretical_conditional_variance_decomposition:: Unknown type!') @@ -53,7 +54,7 @@ if ~posterior end options_.varlist = options_.prior_analysis_endo_var_list; end -[ivar,vartan, options_] = set_stationary_variables_list(options_, M_); +[ivar,vartan ] = set_stationary_variables_list(options_, M_); if ~posterior if exist('temp','var') options_.varlist = temp; @@ -65,9 +66,6 @@ nvar = length(ivar); nar = options_.ar; options_.ar = 0; - -NumberOfDrawsFiles = length(DrawsFiles); - NumberOfDrawsFiles = rows(DrawsFiles); NumberOfSavedElementsPerSimulation = nvar*(nvar+1)/2*M_.exo_nbr*length(Steps); MaXNumberOfConditionalDecompLines = ceil(options_.MaxNumberOfBytes/NumberOfSavedElementsPerSimulation/8); @@ -81,21 +79,13 @@ else NumberOfConditionalDecompFiles = ceil(SampleSize/MaXNumberOfConditionalDecompLines); end -NumberOfConditionalDecompLines = rows(Conditional_decomposition_array); -ConditionalDecompFileNumber = 1; +NumberOfConditionalDecompLines = size(Conditional_decomposition_array,4); +ConditionalDecompFileNumber = 0; StateSpaceModel.number_of_state_equations = M_.endo_nbr; StateSpaceModel.number_of_state_innovations = M_.exo_nbr; -endo_nbr = M_.endo_nbr; -nstatic = oo_.dr.nstatic; -npred = oo_.dr.npred; -iv = (1:endo_nbr)'; -ic = [ nstatic+(1:npred) endo_nbr+(1:size(oo_.dr.ghx,2)-npred) ]'; -aux = oo_.dr.transition_auxiliary_variables; -k = find(aux(:,2) > npred); -aux(:,2) = aux(:,2) + nstatic; -aux(k,2) = aux(k,2) + oo_.dr.nfwrd; +first_call = 1; linea = 0; for file = 1:NumberOfDrawsFiles @@ -115,11 +105,28 @@ for file = 1:NumberOfDrawsFiles set_parameters(pdraws{linee,1}); [dr,info] = resol(oo_.steady_state,0); end + if first_call + endo_nbr = M_.endo_nbr; + nstatic = dr.nstatic; + npred = dr.npred; + iv = (1:endo_nbr)'; + ic = [ nstatic+(1:npred) endo_nbr+(1:size(dr.ghx,2)-npred) ]'; + aux = dr.transition_auxiliary_variables; + k = find(aux(:,2) > npred); + aux(:,2) = aux(:,2) + nstatic; + aux(k,2) = aux(k,2) + dr.nfwrd; + StateSpaceModel.number_of_state_equations = M_.endo_nbr+rows(aux); + StateSpaceModel.number_of_state_innovations = M_.exo_nbr; + first_call = 0; + clear('endo_nbr','nstatic','npred','k'); + end [StateSpaceModel.transition_matrix,StateSpaceModel.impulse_matrix] = kalman_transition_matrix(dr,iv,ic,aux,M_.exo_nbr); StateSpaceModel.state_innovations_covariance_matrix = M_.Sigma_e; clear('dr'); - Conditional_decomposition_array(:,:,:,linea) = conditional_variance_decomposition(StateSpaceModel, Steps, ivar); + Conditional_decomposition_array(:,:,:,linea) = conditional_variance_decomposition(StateSpaceModel, Steps, ivar); if linea == NumberOfConditionalDecompLines + ConditionalDecompFileNumber = ConditionalDecompFileNumber + 1; + linea = 0; if posterior save([M_.dname '/metropolis/' M_.fname '_PosteriorConditionalVarianceDecomposition' int2str(ConditionalDecompFileNumber) '.mat' ], ... 'Conditional_decomposition_array'); @@ -127,14 +134,10 @@ for file = 1:NumberOfDrawsFiles save([M_.dname '/prior/moments/' M_.fname '_PriorConditionalVarianceDecomposition' int2str(ConditionalDecompFileNumber) '.mat' ], ... 'Conditional_decomposition_array'); end - ConditionalDecompFileNumber = ConditionalDecompFileNumber + 1; - linea = 0; - test = ConditionalDecompFileNumber-NumberOfConditionalDecompFiles; - if ~test% Prepare the last round... - Conditional_decomposition_array = zeros(nvar*(nvar+1)/2,length(Steps),M_.exo_nbr,NumberOfLinesInTheLastConditionalDecompFile); + if (ConditionalDecompFileNumber==NumberOfConditionalDecompFiles-1)% Prepare last round. + Conditional_decomposition_array = zeros(nvar*(nvar+1)/2, length(Steps),M_.exo_nbr,NumberOfLinesInTheLastConditionalDecompFile) ; NumberOfConditionalDecompLines = NumberOfLinesInTheLastConditionalDecompFile; - ConditionalDecompFileNumber = ConditionalDecompFileNumber - 1; - elseif test<0; + elseif ConditionalDecompFileNumber