From d80f1fbd22bc66ff989c203060959d91bae429b9 Mon Sep 17 00:00:00 2001 From: Michel Juillard <michel.juillard@mjui.fr> Date: Tue, 19 Jun 2012 16:35:44 +0200 Subject: [PATCH] fixing bug for estimation of models with measurement errors and missing observations (cherry picked from commit 2fa433f18e1381bf46c9267ecb98ae30c0b3ec31) --- .../kalman/likelihood/missing_observations_kalman_filter.m | 4 ++++ .../likelihood/missing_observations_kalman_filter_d.m | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/matlab/kalman/likelihood/missing_observations_kalman_filter.m b/matlab/kalman/likelihood/missing_observations_kalman_filter.m index ebc36aa6f6..e0a3c21b8a 100644 --- a/matlab/kalman/likelihood/missing_observations_kalman_filter.m +++ b/matlab/kalman/likelihood/missing_observations_kalman_filter.m @@ -67,6 +67,10 @@ if isempty(diffuse_periods) diffuse_periods = 0; end +if isequal(H,0) + H = zeros(pp,pp); +end + % Get sample size. smpl = last-start+1; diff --git a/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m b/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m index 47c43602d8..556db9ff1a 100644 --- a/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m +++ b/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m @@ -67,6 +67,10 @@ dlik = zeros(smpl,1); % Initialization of the vector gathering the densitie dLIK = Inf; % Default value of the log likelihood. oldK = Inf; +if isequal(H,0) + H = zeros(pp,pp); +end + while rank(Pinf,kalman_tol) && (t<=last) s = t-start+1; d_index = data_index{t}; @@ -107,7 +111,7 @@ while rank(Pinf,kalman_tol) && (t<=last) dlik(s) = log(det(Finf)); iFinf = inv(Finf); Kinf = Pinf*ZZ'*iFinf; - Fstar = ZZ*Pstar*ZZ' + H; + Fstar = ZZ*Pstar*ZZ' + H(d_index,d_index); Kstar = (Pstar*ZZ'-Kinf*Fstar)*iFinf; Pstar = T*(Pstar-Pstar*ZZ'*Kinf'-Pinf*ZZ'*Kstar')*T'+QQ; Pinf = T*(Pinf-Pinf*ZZ'*Kinf')*T'; -- GitLab