function [LIK, lik] = missing_observations_diffuse_kalman_filter(T,R,Q,H,Pinf,Pstar,Y,start,Z,kalman_tol,riccati_tol,... data_index,number_of_observations,no_more_missing_observations) % Computes the diffuse likelihood of a state space model. % % INPUTS % T [double] mm*mm transition matrix % R [double] mm*rr matrix % Q [double] rr*rr covariance matrix of the structural innovations. % H [double] pp*pp covariance matrix of the measurement errors (if H is equal to zero (scalar) there is no measurement error). % Pinf [double] mm*mm matrix used to initialize the covariance matrix of the state vector. % Pstar [double] mm*mm matrix used to initialize the covariance matrix of the state vector. % Y [double] pp*smpl matrix of (detrended) data, where pp is the number of observed variables. % start [integer] scalar, likelihood evaluation starts at 'start'. % Z [double] pp*mm matrix, selection matrix or pp linear independant combinations of the state vector. % kalman_tol [double] scalar, tolerance parameter (rcond). % riccati_tol [double] scalar, tolerance parameter (riccati iteration). % data_index [cell] 1*smpl cell of column vectors of indices. % number_of_observations [integer] scalar. % no_more_missing_observations [integer] scalar. % % OUTPUTS % LIK: likelihood % lik: density vector in each period % % REFERENCES % See "Filtering and Smoothing of State Vector for Diffuse State Space % Models", S.J. Koopman and J. Durbin (2003, in Journal of Time Series % Analysis, vol. 24(1), pp. 85-98). % Copyright (C) 2004-2008 Dynare Team % % This file is part of Dynare. % % Dynare is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % Dynare is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . [pp,smpl] = size(Y); mm = size(T,2); a = zeros(mm,1); dF = 1; QQ = R*Q*transpose(R); t = 0; oldK = 0; lik = zeros(smpl,1); LIK = Inf; notsteady = 1; while rank(Pinf,kalman_tol) && (t Errors in the measurement equation. Fstar = ZZ*Pstar*ZZ' + H(d_index,d_index); else% => % case 1. No errors in the measurement (H=0) and more than one variable is observed in this state space model. % case 2. Errors in the measurement equation, but only one variable is observed in this state-space model. Fstar = ZZ*Pstar*ZZ' + H; end if rcond(Fstar) < kalman_tol if ~all(abs(Fstar(:)) Errors in the measurement equation. F = ZZ*Pstar*ZZ' + H(d_index,d_index); else% => % case 1. No errors in the measurement (H=0) and more than one variable is observed in this state space model. % case 2. Errors in the measurement equation, but only one variable is observed in this state-space model. F = ZZ*Pstar*ZZ' + H; end dF = det(F); if rcond(F) < kalman_tol if ~all(abs(F(:))no_more_missing_observations notsteady = max(max(abs(K-oldK)))>riccati_tol; oldK = K; end end end if F_singular == 1 error(['The variance of the forecast error remains singular until the end of the sample']) end if t < smpl t0 = t; while t