Merge branch 'smoother' into 'master'
Various fixes to smoother output See merge request Dynare/dynare!2057mr#2067
commit
f7ea4313b5
|
@ -588,7 +588,7 @@ end
|
||||||
|
|
||||||
if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.pshape> 0) && options_.load_mh_file)) ...
|
if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.pshape> 0) && options_.load_mh_file)) ...
|
||||||
|| ~options_.smoother ) && ~options_.partial_information % to be fixed
|
|| ~options_.smoother ) && ~options_.partial_information % to be fixed
|
||||||
%% ML estimation, or posterior mode without Metropolis-Hastings or Metropolis without Bayesian smoothes variables
|
%% ML estimation, or posterior mode without Metropolis-Hastings or Metropolis without Bayesian smoothed variables
|
||||||
if options_.occbin.smoother.status && options_.occbin.smoother.inversion_filter
|
if options_.occbin.smoother.status && options_.occbin.smoother.inversion_filter
|
||||||
[~, ~, ~, ~, ~, ~, ~, ~, ~, ~, oo_, atT, innov] = occbin.IVF_posterior(xparam1,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,prior_bounds(bayestopt_,options_.prior_trunc),oo_);
|
[~, ~, ~, ~, ~, ~, ~, ~, ~, ~, oo_, atT, innov] = occbin.IVF_posterior(xparam1,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,prior_bounds(bayestopt_,options_.prior_trunc),oo_);
|
||||||
updated_variables = atT*nan;
|
updated_variables = atT*nan;
|
||||||
|
|
|
@ -699,4 +699,19 @@ if options_.occbin.likelihood.status && options_.occbin.likelihood.inversion_fil
|
||||||
error('IVF-filter: an observable is mapped to a zero variance shock.')
|
error('IVF-filter: an observable is mapped to a zero variance shock.')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if options_.occbin.smoother.status && options_.occbin.smoother.inversion_filter
|
||||||
|
if ~isempty(options_.nk)
|
||||||
|
fprintf('dynare_estimation_init: the inversion filter does not support filter_step_ahead. Disabling the option.\n')
|
||||||
|
options_.nk=[];
|
||||||
|
end
|
||||||
|
if options_.filter_covariance
|
||||||
|
fprintf('dynare_estimation_init: the inversion filter does not support filter_covariance. Disabling the option.\n')
|
||||||
|
options_.filter_covariance=false;
|
||||||
|
end
|
||||||
|
if options_.smoothed_state_uncertainty
|
||||||
|
fprintf('dynare_estimation_init: the inversion filter does not support smoothed_state_uncertainty. Disabling the option.\n')
|
||||||
|
options_.smoothed_state_uncertainty=false;
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -341,6 +341,9 @@ while notsteady && t<smpl
|
||||||
varargout{2} = [];
|
varargout{2} = [];
|
||||||
varargout{3} = [];
|
varargout{3} = [];
|
||||||
varargout{4} = [];
|
varargout{4} = [];
|
||||||
|
varargout{5} = [];
|
||||||
|
varargout{6} = [];
|
||||||
|
varargout{7} = [];
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -363,6 +366,7 @@ while notsteady && t<smpl
|
||||||
P(:,:,t) = Px(:,:,1);
|
P(:,:,t) = Px(:,:,1);
|
||||||
P1(:,:,t) = P1x(:,:,2);
|
P1(:,:,t) = P1x(:,:,2);
|
||||||
P(:,:,t+1) = Px(:,:,2);
|
P(:,:,t+1) = Px(:,:,2);
|
||||||
|
aK(1,:,t+1) = a1(:,t+1);
|
||||||
for jnk=1:nk
|
for jnk=1:nk
|
||||||
PK(jnk,:,:,t+jnk) = Px(:,:,1+jnk);
|
PK(jnk,:,:,t+jnk) = Px(:,:,1+jnk);
|
||||||
aK(jnk,:,t+jnk) = ax(:,1+jnk);
|
aK(jnk,:,t+jnk) = ax(:,1+jnk);
|
||||||
|
@ -455,14 +459,16 @@ while notsteady && t<smpl
|
||||||
end
|
end
|
||||||
PK(jnk,:,:,t+jnk) = Pf;
|
PK(jnk,:,:,t+jnk) = Pf;
|
||||||
end
|
end
|
||||||
if isoccbin && (t>=first_period_occbin_update || isinf(first_period_occbin_update))
|
if jnk>1
|
||||||
if smoother_redux
|
if isoccbin && (t>=first_period_occbin_update || isinf(first_period_occbin_update))
|
||||||
aK(jnk,:,t+jnk) = out.piecewise(jnk,oo_.dr.order_var(oo_.dr.restrict_var_list)) - out.ys(oo_.dr.order_var(oo_.dr.restrict_var_list))';
|
if smoother_redux
|
||||||
|
aK(jnk,:,t+jnk) = out.piecewise(jnk,oo_.dr.order_var(oo_.dr.restrict_var_list)) - out.ys(oo_.dr.order_var(oo_.dr.restrict_var_list))';
|
||||||
|
else
|
||||||
|
aK(jnk,oo_.dr.inv_order_var,t+jnk) = out.piecewise(jnk,:) - out.ys';
|
||||||
|
end
|
||||||
else
|
else
|
||||||
aK(jnk,oo_.dr.inv_order_var,t+jnk) = out.piecewise(jnk,:) - out.ys';
|
aK(jnk,:,t+jnk) = T*dynare_squeeze(aK(jnk-1,:,t+jnk-1));
|
||||||
end
|
end
|
||||||
elseif jnk>1
|
|
||||||
aK(jnk,:,t+jnk) = T*dynare_squeeze(aK(jnk-1,:,t+jnk-1));
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -72,6 +72,18 @@ function [oo_, yf]=store_smoother_results(M_,oo_,options_,bayestopt_,dataset_,da
|
||||||
% You should have received a copy of the GNU General Public License
|
% You should have received a copy of the GNU General Public License
|
||||||
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
|
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
if nargin<15
|
||||||
|
PK=[];
|
||||||
|
end
|
||||||
|
if nargin<16
|
||||||
|
decomp=[];
|
||||||
|
end
|
||||||
|
gend=dataset_.nobs;
|
||||||
|
if nargin<17
|
||||||
|
Trend=zeros(options_.number_of_observed_variables,gend);
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
%make sure there are no stale results
|
%make sure there are no stale results
|
||||||
field_names={'Smoother','SmoothedVariables','UpdatedVariables','FilteredVariables','FilteredVariablesKStepAhead','FilteredVariablesShockDecomposition','FilteredVariablesKStepAheadVariances','SmoothedShocks','SmoothedMeasurementErrors'};
|
field_names={'Smoother','SmoothedVariables','UpdatedVariables','FilteredVariables','FilteredVariablesKStepAhead','FilteredVariablesShockDecomposition','FilteredVariablesKStepAheadVariances','SmoothedShocks','SmoothedMeasurementErrors'};
|
||||||
for field_iter=1:length(field_names)
|
for field_iter=1:length(field_names)
|
||||||
|
@ -86,10 +98,6 @@ else
|
||||||
oo_.Smoother.occbin = false;
|
oo_.Smoother.occbin = false;
|
||||||
end
|
end
|
||||||
|
|
||||||
gend=dataset_.nobs;
|
|
||||||
if nargin<16
|
|
||||||
Trend=zeros(options_.number_of_observed_variables,gend);
|
|
||||||
end
|
|
||||||
|
|
||||||
if options_.loglinear
|
if options_.loglinear
|
||||||
oo_.Smoother.loglinear = true;
|
oo_.Smoother.loglinear = true;
|
||||||
|
|
|
@ -317,7 +317,7 @@ varobs yg inom pi;
|
||||||
datafile=dataobsfile2, mode_file=NKM_mh_mode_saved,
|
datafile=dataobsfile2, mode_file=NKM_mh_mode_saved,
|
||||||
mode_compute=0, nobs=120, first_obs=1,
|
mode_compute=0, nobs=120, first_obs=1,
|
||||||
mh_replic=0, plot_priors=0, smoother,
|
mh_replic=0, plot_priors=0, smoother,
|
||||||
nodisplay,consider_all_endogenous,heteroskedastic_filter);
|
nodisplay,consider_all_endogenous,heteroskedastic_filter,filter_step_ahead=[1],smoothed_state_uncertainty);
|
||||||
|
|
||||||
oo0=oo_;
|
oo0=oo_;
|
||||||
// use inversion filter (note that IF provides smoother together with likelihood)
|
// use inversion filter (note that IF provides smoother together with likelihood)
|
||||||
|
@ -327,7 +327,7 @@ varobs yg inom pi;
|
||||||
datafile=dataobsfile2, mode_file=NKM_mh_mode_saved,
|
datafile=dataobsfile2, mode_file=NKM_mh_mode_saved,
|
||||||
mode_compute=0, nobs=120, first_obs=1,
|
mode_compute=0, nobs=120, first_obs=1,
|
||||||
mh_replic=0, plot_priors=0, smoother,
|
mh_replic=0, plot_priors=0, smoother,
|
||||||
nodisplay, consider_all_endogenous,heteroskedastic_filter);
|
nodisplay, consider_all_endogenous,heteroskedastic_filter,filter_step_ahead=[1],smoothed_state_uncertainty);
|
||||||
|
|
||||||
// show initial condition effect of IF
|
// show initial condition effect of IF
|
||||||
figure,
|
figure,
|
||||||
|
|
Loading…
Reference in New Issue