From 894b3d69f4662a1132c0f7fb50083bf982745536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Thu, 27 Sep 2012 14:47:21 +0200 Subject: [PATCH] Added an option to decide if dsge_likelihood should call univariate filters when the covariance matrix of the prediction error is singular (default is yes). --- matlab/dsge_likelihood.m | 17 +++++++++++++---- matlab/global_initialization.m | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m index 647c17ecb..fc06ff0dd 100644 --- a/matlab/dsge_likelihood.m +++ b/matlab/dsge_likelihood.m @@ -614,7 +614,7 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter kalman_tol, DynareOptions.riccati_tol, ... DynareOptions.presample, ... T,Q,R,H,Z,mm,pp,rr,Zflag,diffuse_periods); - end; + end end if analytic_derivation, LIK1=LIK; @@ -623,10 +623,19 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter lik=lik1{1}; end if isinf(LIK) - if kalman_algo == 1 - kalman_algo = 2; + if DynareOptions.use_univariate_filters_if_singularity_is_detected + if kalman_algo == 1 + kalman_algo = 2; + else + kalman_algo = 4; + end else - kalman_algo = 4; + if isinf(LIK) + info = 66; + fval = objective_function_penalty_base+1; + exit_flag = 0; + return + end end else if DynareOptions.lik_init==3 diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 93857f225..03f164eeb 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -330,6 +330,7 @@ options_.filtered_vars = 0; options_.first_obs = 1; options_.kalman_algo = 0; options_.kalman_tol = 1e-10; +options_.use_univariate_filters_if_singularity_is_detected = 1; options_.riccati_tol = 1e-6; options_.lik_algo = 1; options_.lik_init = 1;