diff --git a/doc/dynare.texi b/doc/dynare.texi index 279a512371196ef99f3b733a825dccc077884ba4..f925be155444a636c9c79d3a91621d1e996ab5fb 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2158,7 +2158,7 @@ Specifies the correlation of two variables. In an estimation context, it is also possible to specify variances and covariances on endogenous variables: in that case, these values are interpreted as the calibration of the measurement errors on these -variables. +variables. This requires the @code{var_obs}-command to be specified before the @code{shocks}-block. Here is an example: @@ -3747,14 +3747,14 @@ alternatives: @item stderr @var{VARIABLE_NAME} Indicates that the standard error of the exogenous variable -@var{VARIABLE_NAME}, or of the observation error associated with +@var{VARIABLE_NAME}, or of the observation error/measurement errors associated with endogenous observed variable @var{VARIABLE_NAME}, is to be estimated @item corr @var{VARIABLE_NAME1}, @var{VARIABLE_NAME2} Indicates that the correlation between the exogenous variables @var{VARIABLE_NAME1} and @var{VARIABLE_NAME2}, or the correlation of -the observation errors associated with endogenous observed variables -@var{VARIABLE_NAME1} and @var{VARIABLE_NAME2}, is to be estimated +the observation errors/measurement errors associated with endogenous observed variables +@var{VARIABLE_NAME1} and @var{VARIABLE_NAME2}, is to be estimated. Note that correlations set by previous @code{shocks}-blocks or @code{estimation}-commands are kept at their value set prior to estimation if they are not estimated again subsequently. Thus, the treatment is the same as in the case of deep parameters set during model calibration and not estimated. @item @var{PARAMETER_NAME} The name of a model parameter to be estimated diff --git a/matlab/GetPosteriorParametersStatistics.m b/matlab/GetPosteriorParametersStatistics.m index ef706b584926f508f9197141010404d13acff3a1..cb6ba4219815513272b12e88627d8e895ee506e0 100644 --- a/matlab/GetPosteriorParametersStatistics.m +++ b/matlab/GetPosteriorParametersStatistics.m @@ -15,7 +15,7 @@ function oo_ = GetPosteriorParametersStatistics(estim_params_, M_, options_, bay % SPECIAL REQUIREMENTS % None. -% Copyright (C) 2006-2012 Dynare Team +% Copyright (C) 2006-2013 Dynare Team % % This file is part of Dynare. % @@ -163,7 +163,7 @@ end if nvn type = 'measurement_errors_std'; if TeX - fid = TeXBegin(OutputDirectoryName,M_.fname,3,'standard deviation of measurement errors') + fid = TeXBegin(OutputDirectoryName,M_.fname,3,'standard deviation of measurement errors'); end disp(' ') disp('standard deviation of measurement errors') @@ -174,17 +174,17 @@ if nvn Draws = GetAllPosteriorDraws(ip,FirstMhFile,FirstLine,TotalNumberOfMhFiles,NumberOfDraws); [post_mean, post_median, post_var, hpd_interval, post_deciles, density] = ... posterior_moments(Draws,1,options_.mh_conf_sig); - name = deblank(options_.varobs(estim_params_.var_endo(i,1),:)); + name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:)); oo_ = Filloo(oo_,name,type,post_mean,hpd_interval,post_median,post_var,post_deciles,density); else try - name = deblank(options_.varobs(estim_params_.var_endo(i,1),:)); + name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:)); [post_mean,hpd_interval,post_var] = Extractoo(oo_,name,type); catch Draws = GetAllPosteriorDraws(ip,FirstMhFile,FirstLine,TotalNumberOfMhFiles,NumberOfDraws); [post_mean, post_median, post_var, hpd_interval, post_deciles, density] = ... posterior_moments(Draws,1,options_.mh_conf_sig); - name = deblank(options_.varobs(estim_params_.var_endo(i,1),:)); + name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:)); oo_ = Filloo(oo_,name,type,post_mean,hpd_interval,post_median,post_var,post_deciles,density); end end diff --git a/matlab/PlotPosteriorDistributions.m b/matlab/PlotPosteriorDistributions.m index ba6510eea5017c5ccef193fe451ec4da0a81f5bb..5a622272b56bec12f656179e2a589067008112e7 100644 --- a/matlab/PlotPosteriorDistributions.m +++ b/matlab/PlotPosteriorDistributions.m @@ -16,7 +16,7 @@ function oo_ = PlotPosteriorDistributions(estim_params_, M_, options_, bayestopt % SPECIAL REQUIREMENTS % none -% Copyright (C) 2005-2012 Dynare Team +% Copyright (C) 2005-2013 Dynare Team % % This file is part of Dynare. % @@ -89,7 +89,7 @@ for i=1:npar eval(['pmod = oo_.posterior_mode.shocks_std.' name ';']) end elseif i <= nvx+nvn - name = deblank(options_.varobs(estim_params_.var_endo(i-nvx,1),:)); + name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i-nvx,1),:)); eval(['x1 = oo_.posterior_density.measurement_errors_std.' name '(:,1);']) eval(['f1 = oo_.posterior_density.measurement_errors_std.' name '(:,2);']) eval(['oo_.prior_density.mearsurement_errors_std.' name '(:,1) = x2;']) diff --git a/matlab/dyn_forecast.m b/matlab/dyn_forecast.m index 812ab1ca4461a79788308304406286c55d65416e..1804b9a67887f1fab7c607e98b8f60c2fb0fa315 100644 --- a/matlab/dyn_forecast.m +++ b/matlab/dyn_forecast.m @@ -87,8 +87,10 @@ switch task i_var_obs = [ i_var_obs; tmp]; trend_coeffs = [trend_coeffs; oo_.Smoother.TrendCoeffs(i)]; end - end - trend = trend_coeffs*(gend+(1-M_.maximum_lag:horizon)); + end + if ~isempty(trend_coeffs) + trend = trend_coeffs*(gend+(1-M_.maximum_lag:horizon)); + end end global bayestopt_ if isfield(bayestopt_,'mean_varobs') diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index f4a6dcadadc9d800fe3f50027425fe0baf9a20fd..aca6242824ef8a70f8efeb1de2de3f2e1a981239 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -77,6 +77,24 @@ if ~isequal(estim_params_.ncx,nnz(tril(M_.Sigma_e,-1))) end end +M_.H_is_diagonal = 1; +if estim_params_.ncn || ~isequal(nnz(M_.H),length(M_.H)) + M_.H_is_diagonal = 0; +end + +% Set the correlation matrix of measurement errors if necessary. +if ~isequal(estim_params_.ncn,nnz(tril(M_.H,-1))) + M_.Correlation_matrix_ME = diag(1./sqrt(diag(M_.H)))*M_.H*diag(1./sqrt(diag(M_.H))); + % Remove NaNs appearing because of variances calibrated to zero. + if any(isnan(M_.Correlation_matrix_ME)) + zero_variance_idx = find(~diag(M_.H)); + for i=1:length(zero_variance_idx) + M_.Correlation_matrix_ME(zero_variance_idx(i),:) = 0; + M_.Correlation_matrix_ME(:,zero_variance_idx(i)) = 0; + end + end +end + data = dataset_.data; rawdata = dataset_.rawdata; data_index = dataset_.missing.aindex; @@ -554,7 +572,7 @@ if any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation disp(tit1) ip = nvx+1; for i=1:nvn - name = deblank(options_.varobs(estim_params_.var_endo(i,1),:)); + name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:)); disp(sprintf('%-*s %7.3f %8.4f %7.4f %7.4f %4s %6.4f', ... header_width,name,bayestopt_.p1(ip), ... xparam1(ip),stdh(ip),tstath(ip), ... @@ -653,7 +671,7 @@ elseif ~any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation disp(tit1) ip = nvx+1; for i=1:nvn - name = deblank(options_.varobs(estim_params_.var_endo(i,1),:)); + name = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:)); disp(sprintf('%-*s %8.4f %7.4f %7.4f',header_width,name,xparam1(ip),stdh(ip),tstath(ip))) eval(['oo_.mle_mode.measurement_errors_std.' name ' = xparam1(ip);']); eval(['oo_.mle_std.measurement_errors_std.' name ' = stdh(ip);']); @@ -799,7 +817,7 @@ if any(bayestopt_.pshape > 0) && options_.TeX %% Bayesian estimation (posterior fprintf(fidTeX,'\\hline \\hline \\endlastfoot \n'); ip = nvx+1; for i=1:nvn - idx = strmatch(options_.varobs(estim_params_.var_endo(i,1),:),M_.endo_names); + idx = strmatch(options_.varobs(estim_params_.nvn_observable_correspondence(i,1),:),M_.endo_names); fprintf(fidTeX,'$%s$ & %4s & %7.3f & %6.4f & %8.4f & %7.4f \\\\ \n',... deblank(M_.endo_names_tex(idx,:)), ... deblank(pnames(bayestopt_.pshape(ip)+1,:)), ... @@ -1100,7 +1118,8 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha hh = dyn_figure(options_,'Name','Smoothed observation errors'); NAMES = []; if options_.TeX, TeXNAMES = []; end - for i=1:min(nstar,number_of_plots_to_draw-(nbplt-1)*nstar) + nstar0=min(nstar,number_of_plots_to_draw-(nbplt-1)*nstar); + for i=1:nstar0 k = (plt-1)*nstar+i; subplot(nr,nc,i); plot([1 gend],[0 0],'-r','linewidth',.5) @@ -1131,7 +1150,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha dyn_saveas(hh,[M_.fname '_SmoothedObservationErrors' int2str(plt)],options_); if options_.TeX fprintf(fidTeX,'\\begin{figure}[H]\n'); - for jj = 1:nstar + for jj = 1:nstar0 fprintf(fidTeX,'\\psfrag{%s}[1][][0.5][0]{%s}\n',deblank(NAMES(jj,:)),deblank(TeXNAMES(jj,:))); end fprintf(fidTeX,'\\centering \n'); @@ -1168,7 +1187,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha for i=1:nstar0, k = (plt-1)*nstar+i; subplot(nr,nc,i); - plot(1:gend,yf(k,:),'--r','linewidth',1) + plot(1:gend,yf(k,:),'-r','linewidth',1) hold on plot(1:gend,rawdata(:,k),'--k','linewidth',1) hold off diff --git a/matlab/get_posterior_parameters.m b/matlab/get_posterior_parameters.m index dc987f610e70c6282d87f0b9b300c018466842d1..8c4a9c8ebb713d5ca3c26ec5d17d54f467814beb 100644 --- a/matlab/get_posterior_parameters.m +++ b/matlab/get_posterior_parameters.m @@ -12,7 +12,7 @@ function xparam = get_posterior_parameters(type) % SPECIAL REQUIREMENTS % None. -% Copyright (C) 2006-2009 Dynare Team +% Copyright (C) 2006-2013 Dynare Team % % This file is part of Dynare. % @@ -49,7 +49,7 @@ for i=1:nvx end for i=1:nvn - k1 = estim_params_.var_endo(i,1); + k1 = estim_params_.nvn_observable_correspondence(i,1); name1 = deblank(options_.varobs(k1,:)); xparam(m) = eval(['oo_.posterior_' type '.measurement_errors_std.' name1]); m = m+1; @@ -67,8 +67,8 @@ for i=1:ncx end for i=1:ncn - k1 = estim_params_.corrn(i,1); - k2 = estim_params_.corrn(i,2); + k1 = estim_params_.corrn_observable_correspondence(i,1); + k2 = estim_params_.corrn_observable_correspondence(i,2); name1 = deblank(options_.varobs(k1,:)); name2 = deblank(options_.varobs(k2,:)); xparam(m) = eval(['oo_.posterior_' type '.measurement_errors_corr.' name1 '_' name2]); diff --git a/matlab/get_the_name.m b/matlab/get_the_name.m index 9455b7181e8a0e008f873732485e8857bb0ac233..bd6172a223e6d3e752d36cc5c26ed34e198bc731 100644 --- a/matlab/get_the_name.m +++ b/matlab/get_the_name.m @@ -40,7 +40,7 @@ function [nam,texnam] = get_the_name(k,TeX,M_,estim_params_,options_) %! @end deftypefn %@eod: -% Copyright (C) 2004-2011 Dynare Team +% Copyright (C) 2004-2013 Dynare Team % % This file is part of Dynare. % @@ -73,11 +73,11 @@ if k <= nvx texnam = ['$ SE_{' tname '} $']; end elseif k <= (nvx+nvn) - vname = deblank(options_.varobs(estim_params_.var_endo(k-estim_params_.nvx,1),:)); + vname = deblank(options_.varobs(estim_params_.nvn_observable_correspondence(k-estim_params_.nvx,1),:)); nam=['SE_EOBS_',vname]; if TeX tname = deblank(M_.endo_names_tex(estim_params_.var_endo(k-estim_params_.nvx,1),:)); - texnam = ['$ SE_{' tname '} $']; + texnam = ['$ EOBS SE_{' tname '} $']; end elseif k <= (nvx+nvn+ncx) jj = k - (nvx+nvn); @@ -97,7 +97,7 @@ elseif k <= (nvx+nvn+ncx+ncn) nam=['CC_EOBS_' vname]; if TeX tname = [deblank(M_.endo_names_tex(k1,:)) ',' deblank(M_.endo_names_tex(k2,:))]; - texnam =['$ CC_{' tname '} $']; + texnam =['$ EOBS CC_{' tname '} $']; end else jj = k - (nvx+nvn+ncx+ncn); diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 4d102393433a2357a8704f3ff70d11953a020263..e4de0da74e6ace566bb6b02dd04538305ad5f6ee 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -422,6 +422,7 @@ oo_.exo_det_simul = []; M_.params = []; M_.endo_histval = []; M_.Correlation_matrix = []; +M_.Correlation_matrix_ME = []; % homotopy options_.homotopy_mode = 0; diff --git a/matlab/prior_posterior_statistics.m b/matlab/prior_posterior_statistics.m index 3bb87776b93b927d76eb62612b082d0bb7aed854..8eb763508dc2e3ca23cce4f1ab0388f0688fefc2 100644 --- a/matlab/prior_posterior_statistics.m +++ b/matlab/prior_posterior_statistics.m @@ -19,7 +19,7 @@ function prior_posterior_statistics(type,dataset) % See the comments random_walk_metropolis_hastings.m funtion. -% Copyright (C) 2005-2012 Dynare Team +% Copyright (C) 2005-2013 Dynare Team % % This file is part of Dynare. % @@ -298,20 +298,20 @@ end if options_.filtered_vars pm3(endo_nbr,gend,ifil(1),B,'Updated Variables',... - '',varlist,'tit_tex',M_.endo_names,... + '',varlist,M_.endo_names_tex,M_.endo_names,... varlist,'UpdatedVariables',DirectoryName, ... '_update'); pm3(endo_nbr,gend+1,ifil(4),B,'One step ahead forecast',... - '',varlist,'tit_tex',M_.endo_names,... + '',varlist,M_.endo_names_tex,M_.endo_names,... varlist,'FilteredVariables',DirectoryName,'_filter_step_ahead'); end if options_.forecast pm3(endo_nbr,horizon+maxlag,ifil(6),B,'Forecasted variables (mean)',... - '',varlist,'tit_tex',M_.endo_names,... + '',varlist,M_.endo_names_tex,M_.endo_names,... varlist,'MeanForecast',DirectoryName,'_forc_mean'); pm3(endo_nbr,horizon+maxlag,ifil(6),B,'Forecasted variables (point)',... - '',varlist,'tit_tex',M_.endo_names,... + '',varlist,M_.endo_names_tex,M_.endo_names,... varlist,'PointForecast',DirectoryName,'_forc_point'); end diff --git a/matlab/prior_posterior_statistics_core.m b/matlab/prior_posterior_statistics_core.m index 8a501d6d13bf8fb9ab1b40203cfbb4cfa20d11b8..f7eaa6f28ee2eb1d1e8cb06ec32d8ec9e6f7e980 100644 --- a/matlab/prior_posterior_statistics_core.m +++ b/matlab/prior_posterior_statistics_core.m @@ -140,7 +140,7 @@ if run_smoother end end if nvn - stock_error = NaN(endo_nbr,gend,MAX_nerro); + stock_error = NaN(size(varobs,1),gend,MAX_nerro); end if naK stock_filter_step_ahead =NaN(length(options_.filter_step_ahead),endo_nbr,gend+max(options_.filter_step_ahead),MAX_naK); diff --git a/matlab/row_header_width.m b/matlab/row_header_width.m index 2e07d57f5d2fa0f3e6f6f86f67694b4927eeeab5..92ef63d1e5f68bc573433791e5b53ee2517e1f0e 100644 --- a/matlab/row_header_width.m +++ b/matlab/row_header_width.m @@ -13,7 +13,7 @@ function w=row_header_width(M_,estim_params_,bayestopt_) % SPECIAL REQUIREMENTS % None. -% Copyright (C) 2006-2009 Dynare Team +% Copyright (C) 2006-2013 Dynare Team % % This file is part of Dynare. % @@ -64,7 +64,7 @@ if ncx end end if ncn - for i=1:nvn + for i=1:ncn k1 = estim_params_.corrn(i,1); k2 = estim_params_.corrn(i,2); w = max(w,length(deblank(M_.endo_names(k1,:)))... diff --git a/matlab/set_all_parameters.m b/matlab/set_all_parameters.m index a34fbd9fea3548613293ff78e834f76581a5271d..14815a3d9459234952bdb6ddddac13e6c017fa9b 100644 --- a/matlab/set_all_parameters.m +++ b/matlab/set_all_parameters.m @@ -71,9 +71,8 @@ offset = nvx; % setting measument error variance if nvn - var_endo = estim_params.var_endo; for i=1:nvn - k = var_endo(i,1); + k = estim_params.nvn_observable_correspondence(i,1); H(k,k) = xparam1(i+offset)^2; end end @@ -83,7 +82,7 @@ offset = nvx+nvn; % setting shocks covariances if ~isempty(M.Correlation_matrix) - Sigma_e = diag(sqrt(diag(Sigma_e)))*M.Correlation_matrix*diag(sqrt(diag(Sigma_e))); + Sigma_e = diag(sqrt(diag(Sigma_e)))*M.Correlation_matrix*diag(sqrt(diag(Sigma_e))); % use of old correlation matrix is correct due to the diagonal structure and later only using the hence correctly updated diagonal entries of Sigma_e end if ncx corrx = estim_params.corrx; @@ -100,11 +99,16 @@ end % update offset offset = nvx+nvn+ncx; % setting measurement error covariances +if ~isempty(M.Correlation_matrix_ME) + H = diag(sqrt(diag(H)))*M.Correlation_matrix_ME*diag(sqrt(diag(H))); +end if ncn - corrn = estim_params.corrn; + corrn_observable_correspondence = estim_params.corrn_observable_correspondence; for i=1:ncn - k1 = corr(i,1); - k2 = corr(i,2); + k1 = corrn_observable_correspondence(i,1); + k2 = corrn_observable_correspondence(i,2); + M.Correlation_matrix_ME(k1,k2) = xparam1(i+offset); + M.Correlation_matrix_ME(k2,k1) = M.Correlation_matrix_ME(k1,k2); H(k1,k2) = xparam1(i+offset)*sqrt(H(k1,k1)*H(k2,k2)); H(k2,k1) = H(k1,k2); end @@ -122,6 +126,6 @@ end if nvx || ncx M.Sigma_e = Sigma_e; end -if nvn +if nvn || ncn M.H = H; end \ No newline at end of file diff --git a/matlab/set_prior.m b/matlab/set_prior.m index 841af744238440c3034aea1c7de78e9e6801506f..f82223ec853418e7aafe2e95d3616be6f50fe42d 100644 --- a/matlab/set_prior.m +++ b/matlab/set_prior.m @@ -18,7 +18,7 @@ function [xparam1, estim_params_, bayestopt_, lb, ub, M_]=set_prior(estim_params % SPECIAL REQUIREMENTS % None -% Copyright (C) 2003-2011 Dynare Team +% Copyright (C) 2003-2013 Dynare Team % % This file is part of Dynare. % @@ -41,11 +41,11 @@ ncx = size(estim_params_.corrx,1); ncn = size(estim_params_.corrn,1); np = size(estim_params_.param_vals,1); -estim_params_.nvx = nvx; -estim_params_.nvn = nvn; -estim_params_.ncx = ncx; -estim_params_.ncn = ncn; -estim_params_.np = np; +estim_params_.nvx = nvx; %exogenous shock variances +estim_params_.nvn = nvn; %endogenous variances, i.e. measurement error +estim_params_.ncx = ncx; %exogenous shock correlations +estim_params_.ncn = ncn; % correlation between endogenous variables, i.e. measurement error. +estim_params_.np = np; % other parameters of the model xparam1 = []; ub = []; @@ -74,6 +74,7 @@ if nvx bayestopt_.name = cellstr(M_.exo_names(estim_params_.var_exo(:,1),:)); end if nvn + estim_params_.nvn_observable_correspondence=NaN(nvn,1); % stores number of corresponding observable if isequal(M_.H,0) nvarobs = size(options_.varobs,1); M_.H = zeros(nvarobs,nvarobs); @@ -83,7 +84,7 @@ if nvn if isempty(obsi_) error(['The variable ' deblank(M_.endo_names(estim_params_.var_endo(i,1),:)) ' has to be declared as observable since you assume a measurement error on it.']) end - estim_params_.var_endo(i,1) = obsi_; + estim_params_.nvn_observable_correspondence(i,1)=obsi_; end xparam1 = [xparam1; estim_params_.var_endo(:,2)]; ub = [ub; estim_params_.var_endo(:,4)]; @@ -94,7 +95,7 @@ if nvn bayestopt_.p3 = [ bayestopt_.p3; estim_params_.var_endo(:,8)]; bayestopt_.p4 = [ bayestopt_.p4; estim_params_.var_endo(:,9)]; bayestopt_.jscale = [ bayestopt_.jscale; estim_params_.var_endo(:,10)]; - bayestopt_.name = [ bayestopt_.name; cellstr(options_.varobs(estim_params_.var_endo(:,1),:))]; + bayestopt_.name = [ bayestopt_.name; cellstr(options_.varobs(estim_params_.nvn_observable_correspondence,:))]; end if ncx xparam1 = [xparam1; estim_params_.corrx(:,3)]; @@ -111,6 +112,7 @@ if ncx repmat(', ',ncx,1) , deblank(M_.exo_names(estim_params_.corrx(:,2),:))])]; end if ncn + estim_params_.corrn_observable_correspondence=NaN(ncn,2); if isequal(M_.H,0) nvarobs = size(options_.varobs,1); M_.H = zeros(nvarobs,nvarobs); @@ -125,8 +127,15 @@ if ncn bayestopt_.p4 = [ bayestopt_.p4; estim_params_.corrn(:,10)]; bayestopt_.jscale = [ bayestopt_.jscale; estim_params_.corrn(:,11)]; bayestopt_.name = [bayestopt_.name; cellstr([repmat('corr ',ncn,1) ... - deblank(M_.exo_names(estim_params_.corrn(:,1),:)) ... - repmat(', ',ncn,1) , deblank(M_.exo_names(estim_params_.corrn(:,2),:))])]; + deblank(M_.endo_names(estim_params_.corrn(:,1),:)) ... + repmat(', ',ncn,1) , deblank(M_.endo_names(estim_params_.corrn(:,2),:))])]; + for i=1:ncn + k1 = estim_params_.corrn(i,1); + k2 = estim_params_.corrn(i,2); + obsi1 = strmatch(deblank(M_.endo_names(k1,:)),deblank(options_.varobs),'exact'); %find correspondence to varobs to construct H in set_all_paramters + obsi2 = strmatch(deblank(M_.endo_names(k2,:)),deblank(options_.varobs),'exact'); + estim_params_.corrn_observable_correspondence(i,:)=[obsi1,obsi2]; %save correspondence + end end if np xparam1 = [xparam1; estim_params_.param_vals(:,2)]; diff --git a/tests/measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod b/tests/measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod new file mode 100644 index 0000000000000000000000000000000000000000..70477f2a29aebbab18755333fcd17b9c908d5155 --- /dev/null +++ b/tests/measurement_errors/fs2000_corr_me_ml_mcmc/fs2000_corr_ME.mod @@ -0,0 +1,125 @@ +/* + * This file is based on the cash in advance model described + * Frank Schorfheide (2000): "Loss function-based evaluation of DSGE models", + * Journal of Applied Econometrics, 15(6), 645-670. + * + * The equations are taken from J. Nason and T. Cogley (1994): "Testing the + * implications of long-run neutrality for monetary business cycle models", + * Journal of Applied Econometrics, 9, S37-S70. + * Note that there is an initial minus sign missing in equation (A1), p. S63. + * + * This implementation was written by Michel Juillard. Please note that the + * following copyright notice only applies to this Dynare implementation of the + * model. + */ + +/* + * Copyright (C) 2004-2013 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/>. + */ + +var m P c e W R k d n l gy_obs gp_obs y dA; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del theta; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; +theta=0; + +model; +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; +-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0; +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P(-1))*m(-1)/dA; +end; + +initval; +k = 6; +m = mst; +P = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); +end; + +varobs gp_obs gy_obs; + +shocks; +var e_a; stderr 0.014; +var e_m; stderr 0.005; +corr gy_obs,gp_obs = 0.5; +end; + +steady; + + +estimated_params; +alp, 0.356; +gam, 0.0085; +del, 0.01; +stderr e_a, 0.035449; +stderr e_m, 0.008862; +corr e_m, e_a, 0; +stderr gp_obs, 1; +stderr gy_obs, 1; +corr gp_obs, gy_obs,0; +end; + +options_.TeX=1; +estimation(mode_compute=9,order=1,datafile=fsdat_simul,mode_check,smoother,filter_decomposition,forecast = 8,filtered_vars,filter_step_ahead=[1,3],irf=20) m P c e W R k d y gy_obs; + + + +estimated_params; +//alp, beta_pdf, 0.356, 0.02; +gam, normal_pdf, 0.0085, 0.003; +//del, beta_pdf, 0.01, 0.005; +stderr e_a, inv_gamma_pdf, 0.035449, inf; +stderr e_m, inv_gamma_pdf, 0.008862, inf; +corr e_m, e_a, normal_pdf, 0, 0.2; +stderr gp_obs, inv_gamma_pdf, 0.001, inf; +//stderr gy_obs, inv_gamma_pdf, 0.001, inf; +//corr gp_obs, gy_obs,normal_pdf, 0, 0.2; +end; + +estimation(mode_compute=0,mode_file=fs2000_corr_ME_mh_mode,order=1,datafile=fsdat_simul,mode_check,smoother,filter_decomposition,mh_replic=2000, mh_nblocks=2, mh_jscale=0.8,forecast = 8,bayesian_irf,filtered_vars,filter_step_ahead=[1,3],irf=20) m P c e W R k d y; +shock_decomposition y W R; +//identification(advanced=1,max_dim_cova_group=3,prior_mc=250);