Merge branch 'smoother2histval' of git.dynare.org:JohannesPfeifer/dynare

Ref. !1930
pac-components
Sébastien Villemot 2021-09-17 17:00:08 +02:00
commit 82d0b1caf4
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
2 changed files with 36 additions and 24 deletions

View File

@ -24,7 +24,7 @@ function smoother2histval(opts)
%
% The function also uses the value of option_.parameter_set
% Copyright (C) 2014-2018 Dynare Team
% Copyright (C) 2014-2021 Dynare Team
%
% This file is part of Dynare.
%
@ -49,7 +49,6 @@ if ~isfield(opts, 'infile')
end
smoothedvars = oo_.SmoothedVariables;
smoothedshocks = oo_.SmoothedShocks;
steady_state = oo_.steady_state;
else
S = load(opts.infile);
if ~isfield(S, 'oo_') || ~isfield(S.oo_, 'SmoothedVariables')
@ -57,7 +56,6 @@ else
end
smoothedvars = S.oo_.SmoothedVariables;
smoothedshocks = S.oo_.SmoothedShocks;
steady_state = S.oo_.steady_state;
end
% Hack to determine if oo_.SmoothedVariables was computed after a Metropolis
@ -79,9 +77,9 @@ end
if post_metropolis
tmp = fieldnames(smoothedvars.Mean);
if length(tmp)~=M_.endo_nbr
warning(['You are using smoother2histval although smoothed values have not'...
warning(['You are using smoother2histval although smoothed values have not '...
'been computed for all endogenous and auxiliary variables.'...
'The value of these variables will be set to 0.'])
'The value of these variables will be set to their steady state.'])
end
tmpexo = fieldnames(smoothedshocks.Mean);
else
@ -94,7 +92,6 @@ if isempty(options_.parameter_set)
if post_metropolis
smoothedvars = smoothedvars.Mean;
smoothedshocks = smoothedshocks.Mean;
steady_state = zeros(size(steady_state));
end
else
switch options_.parameter_set
@ -112,14 +109,12 @@ else
end
smoothedvars = smoothedvars.Mean;
smoothedshocks = smoothedshocks.Mean;
steady_state = zeros(size(steady_state));
case 'posterior_median'
if ~post_metropolis
error('Option parameter_set=posterior_median is not consistent with computed smoothed values.')
end
smoothedvars = smoothedvars.Median;
smoothedshocks = smoothedshocks.Median;
steady_state = zeros(size(steady_state));
otherwise
error([ 'Option parameter_set=' options_.parameter_set ' unsupported.' ])
end
@ -171,26 +166,42 @@ if ~isfield(opts, 'outfile')
M_.endo_histval = repmat(oo_.steady_state, 1, M_.maximum_lag);
else
% Output to a file
data = zeros(M_.maximum_endo_lag, length(invars));
for i=1:length(outvars)
j = strmatch(outvars{i}, M_.endo_names, 'exact');
if ~isempty(j)
data(:,i)=oo_.steady_state(j);
end
end
o = dseries();
end
% Handle all endogenous variables to be copied
data = zeros(M_.orig_maximum_endo_lag, length(invars));
k = M_.orig_maximum_endo_lag - M_.maximum_endo_lag + 1: M_.orig_maximum_lag;
for i = 1:length(invars)
if isempty(strmatch(invars{i}, M_.endo_names, 'exact'))
% Skip exogenous
continue
end
s = smoothedvars.(invars{i});
j = strmatch(invars{i}, M_.endo_names, 'exact');
v = s((period-M_.orig_maximum_endo_lag+1):period);% + steady_state(j);
if ~isfield(opts, 'outfile')
j = strmatch(outvars{i}, M_.endo_names, 'exact');
if isempty(j)
error(['smoother2histval: output variable ' outvars{i} ' does not exist.'])
if ~isempty(strmatch(invars{i}, M_.endo_names, 'exact'))
if oo_.Smoother.loglinear
s = exp(smoothedvars.(invars{i}));
else
M_.endo_histval(j, :) = v(k);
s = smoothedvars.(invars{i});
end
elseif ~isempty(strmatch(invars{i}, M_.exo_names, 'exact'))
s = smoothedshocks.(invars{i});
else
error('smoother2histval: unknown input variable')
end
v = s((period-M_.maximum_lag+1):period);
if ~isfield(opts, 'outfile')
j_endo = strmatch(outvars{i}, M_.endo_names, 'exact');
if ~isempty(j_endo)
M_.endo_histval(j_endo, :) = v;
end
j_exo = strmatch(outvars{i}, M_.exo_names, 'exact');
if ~isempty(j_exo)
M_.exo_histval(j_exo, :) = v;
end
if isempty(j_endo) && isempty(j_exo)
error(['smoother2histval: output variable ' outvars{i} ' does not exist.'])
end
else
data(:, i) = v';

View File

@ -82,10 +82,11 @@ varobs gp_obs gy_obs;
options_.solve_tolf = 1e-12;
estimation(order=1,datafile=fsdat_simul,nobs=192,mh_replic=1500,mh_nblocks=1,mh_jscale=0.8,smoother,consider_all_endogenous);
estimation(order=1,loglinear,datafile=fsdat_simul,nobs=192,mh_replic=2,mh_nblocks=1,mh_jscale=0.8,smoother,consider_all_endogenous_and_auxiliary);
steady;
smoother2histval(period = 5);
options_.loglinear=0;
stoch_simul(nomoments);
forecast;