diff --git a/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m b/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m index 1c04413615b23a5df75876b1f1a35ee25bc2736e..4a2604d5b97ef49b2f12cec95a058dbff88c85eb 100644 --- a/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m +++ b/matlab/dsge_simulated_theoretical_conditional_variance_decomposition.m @@ -109,10 +109,10 @@ for file = 1:NumberOfDrawsFiles for linee = 1:NumberOfDraws linea = linea+1; if isdrsaved - set_parameters(pdraws{linee,1});% Needed to update the covariance matrix of the state innovations. + M_=set_parameters_locally(M_,pdraws{linee,1});% Needed to update the covariance matrix of the state innovations. dr = pdraws{linee,2}; else - set_parameters(pdraws{linee,1}); + M_=set_parameters_locally(M_,pdraws{linee,1}); [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_); end if first_call diff --git a/matlab/dsge_simulated_theoretical_correlation.m b/matlab/dsge_simulated_theoretical_correlation.m index ae141905b3a06b45705d0a83788d37db8304d216..dca1031661427100f3674d93bb485ce9fd67728a 100644 --- a/matlab/dsge_simulated_theoretical_correlation.m +++ b/matlab/dsge_simulated_theoretical_correlation.m @@ -106,7 +106,7 @@ for file = 1:NumberOfDrawsFiles if isdrsaved dr = pdraws{linee,2}; else - set_parameters(pdraws{linee,1}); + M_=set_parameters_locally(M_,pdraws{linee,1}); [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_); end tmp = th_autocovariances(dr,ivar,M_,options_,nodecomposition); diff --git a/matlab/dsge_simulated_theoretical_covariance.m b/matlab/dsge_simulated_theoretical_covariance.m index 304028ba595f598e4331d5a89f7a3fec5d2bb9dc..19f56297fa220d814a163181d21d651c5e983dcc 100644 --- a/matlab/dsge_simulated_theoretical_covariance.m +++ b/matlab/dsge_simulated_theoretical_covariance.m @@ -105,7 +105,7 @@ for file = 1:NumberOfDrawsFiles if isdrsaved dr = pdraws{linee,2}; else - set_parameters(pdraws{linee,1}); + M_=set_parameters_locally(M_,pdraws{linee,1}); [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_); end tmp = th_autocovariances(dr,ivar,M_,options_,nodecomposition); diff --git a/matlab/dsge_simulated_theoretical_variance_decomposition.m b/matlab/dsge_simulated_theoretical_variance_decomposition.m index 9eb9851741966edc28c80d5a5ed7e35ecd9967ec..3441b152e14d309e9d7e83b15f7ec0691eff2d04 100644 --- a/matlab/dsge_simulated_theoretical_variance_decomposition.m +++ b/matlab/dsge_simulated_theoretical_variance_decomposition.m @@ -113,7 +113,7 @@ for file = 1:NumberOfDrawsFiles if isdrsaved dr = pdraws{linee,2}; else - set_parameters(pdraws{linee,1}); + M_=set_parameters_locally(M_,pdraws{linee,1}); [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_); end if file==1 && linee==1 diff --git a/matlab/set_parameters_locally.m b/matlab/set_parameters_locally.m new file mode 100644 index 0000000000000000000000000000000000000000..173e502573e68eb08bd28de406a0dbbe24f0e2bf --- /dev/null +++ b/matlab/set_parameters_locally.m @@ -0,0 +1,85 @@ +function M_=set_parameters_locally(M_,xparam1) + +% function M_out=set_parameters(M_,xparam1) +% Sets parameters value (except measurement errors) +% This is called for computations such as IRF and forecast +% when measurement errors aren't taken into account; in contrast to +% set_parameters.m, the global M_-structure is not altered +% +% INPUTS +% xparam1: vector of parameters to be estimated (initial values) +% M_: Dynare model-structure +% +% OUTPUTS +% M_: Dynare model-structure +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2017 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/>. + +global estim_params_ + +nvx = estim_params_.nvx; +ncx = estim_params_.ncx; +nvn = estim_params_.nvn; +ncn = estim_params_.ncn; +np = estim_params_.np; +Sigma_e = M_.Sigma_e; +Correlation_matrix = M_.Correlation_matrix; +offset = 0; + +% setting shocks variance on the diagonal of Covariance matrix; used later +% for updating covariances +if nvx + var_exo = estim_params_.var_exo; + for i=1:nvx + k = var_exo(i,1); + Sigma_e(k,k) = xparam1(i)^2; + end +end +% and update offset +offset = offset + nvx + nvn; + +% correlations amonx shocks (ncx) +if ncx + corrx = estim_params_.corrx; + for i=1:ncx + k1 = corrx(i,1); + k2 = corrx(i,2); + Correlation_matrix(k1,k2) = xparam1(i+offset); + Correlation_matrix(k2,k1) = Correlation_matrix(k1,k2); + end +end +%build covariance matrix from correlation matrix and variances already on +%diagonal +Sigma_e = diag(sqrt(diag(Sigma_e)))*Correlation_matrix*diag(sqrt(diag(Sigma_e))); +if isfield(estim_params_,'calibrated_covariances') + Sigma_e(estim_params_.calibrated_covariances.position)=estim_params_.calibrated_covariances.cov_value; +end + +% and update offset +offset = offset + ncx + ncn; + +% structural parameters +if np + M_.params(estim_params_.param_vals(:,1)) = xparam1(offset+1:end); +end + +M_.Sigma_e = Sigma_e; +M_.Correlation_matrix=Correlation_matrix; \ No newline at end of file