Skip to content
Snippets Groups Projects
Commit 031569fa authored by Stéphane Adjemian's avatar Stéphane Adjemian
Browse files

Allow higher order approximations in nonlinear filters.

parent 78c36dd0
No related branches found
No related tags found
No related merge requests found
...@@ -171,19 +171,10 @@ Y = transpose(DynareDataset.data); ...@@ -171,19 +171,10 @@ Y = transpose(DynareDataset.data);
mf0 = BayesInfo.mf0; mf0 = BayesInfo.mf0;
mf1 = BayesInfo.mf1; mf1 = BayesInfo.mf1;
restrict_variables_idx = dr.restrict_var_list; restrict_variables_idx = dr.restrict_var_list;
observed_variables_idx = restrict_variables_idx(mf1); state_variables_idx = restrict_variables_idx(mf0);
state_variables_idx = restrict_variables_idx(mf0);
sample_size = size(Y,2);
number_of_state_variables = length(mf0); number_of_state_variables = length(mf0);
number_of_observed_variables = length(mf1);
number_of_structural_innovations = length(Q);
ReducedForm.ghx = dr.ghx(restrict_variables_idx,:);
ReducedForm.ghu = dr.ghu(restrict_variables_idx,:);
ReducedForm.ghxx = dr.ghxx(restrict_variables_idx,:);
ReducedForm.ghuu = dr.ghuu(restrict_variables_idx,:);
ReducedForm.ghxu = dr.ghxu(restrict_variables_idx,:);
ReducedForm.steadystate = dr.ys(dr.order_var(restrict_variables_idx)); ReducedForm.steadystate = dr.ys(dr.order_var(restrict_variables_idx));
ReducedForm.constant = ReducedForm.steadystate + .5*dr.ghs2(restrict_variables_idx); ReducedForm.constant = ReducedForm.steadystate + .5*dr.ghs2(restrict_variables_idx);
ReducedForm.state_variables_steady_state = dr.ys(dr.order_var(state_variables_idx)); ReducedForm.state_variables_steady_state = dr.ys(dr.order_var(state_variables_idx));
...@@ -192,11 +183,24 @@ ReducedForm.H = H; ...@@ -192,11 +183,24 @@ ReducedForm.H = H;
ReducedForm.mf0 = mf0; ReducedForm.mf0 = mf0;
ReducedForm.mf1 = mf1; ReducedForm.mf1 = mf1;
if DynareOptions.k_order_solver
ReducedForm.use_k_order_solver = true;
ReducedForm.dr = dr;
else
ReducedForm.use_k_order_solver = false;
ReducedForm.ghx = dr.ghx(restrict_variables_idx,:);
ReducedForm.ghu = dr.ghu(restrict_variables_idx,:);
ReducedForm.ghxx = dr.ghxx(restrict_variables_idx,:);
ReducedForm.ghuu = dr.ghuu(restrict_variables_idx,:);
ReducedForm.ghxu = dr.ghxu(restrict_variables_idx,:);
end
% Set initial condition. % Set initial condition.
switch DynareOptions.particle.initialization switch DynareOptions.particle.initialization
case 1% Initial state vector covariance is the ergodic variance associated to the first order Taylor-approximation of the model. case 1% Initial state vector covariance is the ergodic variance associated to the first order Taylor-approximation of the model.
StateVectorMean = ReducedForm.constant(mf0); StateVectorMean = ReducedForm.constant(mf0);
StateVectorVariance = lyapunov_symm(ReducedForm.ghx(mf0,:),ReducedForm.ghu(mf0,:)*ReducedForm.Q*ReducedForm.ghu(mf0,:)',DynareOptions.lyapunov_fixed_point_tol,DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold,[],DynareOptions.debug); StateVectorVariance = lyapunov_symm(dr.ghx(mf0,:), dr.ghu(mf0,:)*Q*dr.ghu(mf0,:)', DynareOptions.lyapunov_fixed_point_tol, ...
DynareOptions.qz_criterium, DynareOptions.lyapunov_complex_threshold, [], DynareOptions.debug);
case 2% Initial state vector covariance is a monte-carlo based estimate of the ergodic variance (consistent with a k-order Taylor-approximation of the model). case 2% Initial state vector covariance is a monte-carlo based estimate of the ergodic variance (consistent with a k-order Taylor-approximation of the model).
StateVectorMean = ReducedForm.constant(mf0); StateVectorMean = ReducedForm.constant(mf0);
old_DynareOptionsperiods = DynareOptions.periods; old_DynareOptionsperiods = DynareOptions.periods;
...@@ -221,7 +225,7 @@ ReducedForm.StateVectorVariance = StateVectorVariance; ...@@ -221,7 +225,7 @@ ReducedForm.StateVectorVariance = StateVectorVariance;
%------------------------------------------------------------------------------ %------------------------------------------------------------------------------
DynareOptions.warning_for_steadystate = 0; DynareOptions.warning_for_steadystate = 0;
[s1,s2] = get_dynare_random_generator_state(); [s1,s2] = get_dynare_random_generator_state();
LIK = feval(DynareOptions.particle.algorithm,ReducedForm,Y,start,DynareOptions.particle,DynareOptions.threads); LIK = feval(DynareOptions.particle.algorithm, ReducedForm, Y, start, DynareOptions.particle, DynareOptions.threads, DynareOptions, Model);
set_dynare_random_generator_state(s1,s2); set_dynare_random_generator_state(s1,s2);
if imag(LIK) if imag(LIK)
likelihood = Inf; likelihood = Inf;
......
Subproject commit 66867386ef5c70e8db69293af8a0e051488196f1 Subproject commit 13d79cb4382ade3b74a4509fdd8ddad3d273ffaf
Subproject commit d441ff059a57d3020b055a31ab45ac72668f782b Subproject commit 8baec1e0ec5e06df5e14a96467fe520f5eb6f374
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment