Multivariate Kalman filter became singular

Solved. Thanks!

That means that your model implies an exact linear combination between your observables. It may be related to

y_star - h*y_star(-1) = y_star(+1) - h*y_star - (1/sigma)*(1-h)*(r_star - pi_star(+1));
It seems every single variable here is observed.

Solved. Thanks!

The problem is that your model implies an exact linear relationship between the observables. If this exact relationship is not satisfied in the data (which is usually the case, because the model is stylized and misspecified), your model will assign likelihood/density zero to the data. That is, the model is flat out rejected by the data, because the data you have cannot be generated by the model. The data simply violates a key relationship implied by the model.

There are two ways to deal with this:

  1. Drop one of the observables
  2. Add measurement error to at least one observable

Please note that this is discussed in more detail in my Guide to Observation Equations.

1 Like

Solved. Thanks!

Have a look at the mode_check-plots. It seems your mode is right at the corner of the existence/uniqueness regions (the red dots). You need to understand why this happens.

Thanks - would that be more likely due to a misspecification of the model, or an improper treatment of the data?

Hard to tell. For now I would focus on the data. Looking at the data plots, there are at least two issues:

  1. obs_r_star is not mean 0 although the model equivalent is
  2. obs_y_h has a very extreme seasonal pattern

Dear Professor,
Thanks for your answer.
How drop an observable variable in Dynare?
Please, how can I have access to your Guide to Observation Equations?

Thanks a lot,

  1. Don’t put it into varobs.
  2. See Johannes Pfeifer - Dynare
1 Like

Dear Professor,

The Kalman filter problem is solved. Thanks a lot, Professor.

But the next problem arose.

RESULTS FROM POSTERIOR ESTIMATION
parameters
prior mean mode s.d. prior pstdev

alphaa 0.750 0.8066 NaN beta 0.1000
alphapid 0.500 0.0216 NaN beta 0.2000
alphab 0.800 0.1269 NaN beta 0.1000
alphaystar 0.930 0.9996 NaN beta 0.0500
alphagstar 0.800 0.0093 NaN beta 0.1500
theta 0.500 0.3155 NaN beta 0.2000
vartheta 2.500 2.1515 NaN gamm 0.5000
psi 1.000 0.9056 NaN norm 0.7500
phi_r 0.500 0.5235 NaN beta 0.2000
phi_pi 1.500 1.5602 NaN gamm 0.0500
phi_y 0.100 0.0945 NaN gamm 0.0800
gamma_g 0.500 0.4660 NaN beta 0.1500
gamma_tau 0.200 0.2104 NaN beta 0.1000
g_y 0.500 0.5504 NaN norm 0.0500
tau_y 0.300 0.2535 NaN norm 0.0500
g_b -0.050 -0.0386 NaN norm 0.0400
tau_b 0.050 0.0434 NaN norm 0.0300
eta 0.900 0.9374 NaN beta 0.0300

standard deviation of shocks
prior mean mode s.d. prior pstdev

eps_r 0.020 0.0201 NaN invg Inf
eps_g 0.003 0.0098 NaN invg Inf
eps_tau 0.050 0.0367 NaN invg Inf
eps_a 0.025 0.0249 NaN invg Inf
eps_pid 0.012 0.0118 NaN invg Inf
eps_b 0.010 0.0024 NaN invg Inf
eps_ystar 0.050 0.5324 NaN invg Inf
eps_gstar 0.002 0.0005 NaN invg Inf

Log data density [Laplace approximation] is NaN.

Error using chol
Matrix must be positive definite.

Error in posterior_sampler_initialization (line 84)
d = chol(vv);

Error in posterior_sampler (line 60)
posterior_sampler_initialization(TargetFun, xparam1, vv,
mh_bounds,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,oo_);

Error in dynare_estimation_1 (line 448)
posterior_sampler(objective_function,posterior_sampler_options.proposal_distribution,xparam1,posterior_sampler_options,bounds,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,oo_);

Error in dynare_estimation (line 105)
dynare_estimation_1(var_list,dname);

Error in thes (line 364)
oo_recursive_=dynare_estimation(var_list_);

Error in dynare (line 235)
evalin(‘base’,fname) ;

mytesdata.mat (376.5 KB)

thes.mod (5.9 KB)

Please professor, how can I solve this problem?

Best regard,

identification will tell you:

    SE_eps_b is not identified!
    alphapid is not identified!
    alphab is not identified!

Hi Dear Professor,
I corrected and tried again but the same problem persists.

Error using chol
Matrix must be positive definite.

Error in posterior_sampler_initialization (line 84)
d = chol(vv);

Error in posterior_sampler (line 60)
posterior_sampler_initialization(TargetFun, xparam1, vv,
mh_bounds,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,oo_);

Error in dynare_estimation_1 (line 448)
posterior_sampler(objective_function,posterior_sampler_options.proposal_distribution,xparam1,posterior_sampler_options,bounds,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,oo_);

Error in dynare_estimation (line 105)
dynare_estimation_1(var_list,dname);

Error in thes (line 334)
oo_recursive_=dynare_estimation(var_list_);

Error in dynare (line 235)
evalin(‘base’,fname) ;

mytesdata.mat (376.6 KB)

thes.mod (5.9 KB)

Thanks for your help, Professor!

I still get the same identification problem.

Dear teacher,
I solved the problem, with the help of your comment and recommendation on this problem here on the forum. I used mode_compute = 6 and mode_check. I wanted to thank you for your help.
Thank a lot!
Professor, how can I record my results? Mainly the graphs and the tables.

Best regard,

What do you mean? The graphs are stored on the harddisk and all results displayed in tables should be in oo_ in the _results.mat

1 Like