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