41 lines
887 B
Matlab
41 lines
887 B
Matlab
function [phiIn, mu0In, sigma0In, QIn] = iit_lds(P, S_bar, V, RR, Tr, sigma_sq)
|
|
|
|
K = size(V,1)/3;
|
|
[T, J] = size(P);
|
|
T = T/2;
|
|
|
|
y = zeros(2*J, T);
|
|
P_hat_t = zeros(2*J, 1);
|
|
M_t = zeros(2*J, K);
|
|
|
|
for t=1:T,
|
|
Pt = [P(t,:) P(t+T,:)]';
|
|
|
|
Rt = [RR(t,:); RR(t+T,:)];
|
|
|
|
P_hat_t(1:J,1) = (Rt(1,:)*S_bar)';
|
|
P_hat_t(J+1:end,1) = (Rt(2,:)*S_bar)';
|
|
|
|
|
|
for kk = 1:K,
|
|
M_t(1:J, kk) = (Rt(1,:)*V(1+(kk-1)*3:kk*3, :))';
|
|
M_t(J+1:end, kk) = (Rt(2,:)*V(1+(kk-1)*3:kk*3, :))';
|
|
end
|
|
M{t} = M_t;
|
|
|
|
y(:, t) = Pt - P_hat_t;
|
|
end
|
|
|
|
A = eye(2*J)./sigma_sq;
|
|
for t=1:T,
|
|
temp1 = A*M{t};
|
|
temp2 = A - temp1*inv(eye(K)+M{t}'*temp1)*temp1';
|
|
temp1b(t,:) = y(:,t)'*temp2*M{t};
|
|
end
|
|
mu0In = mean(temp1b)';
|
|
Q = cov(temp1b);
|
|
QIn = Q;
|
|
t1 = temp1b(1:T-1,:);
|
|
t2 = temp1b(2:T,:);
|
|
phiIn = inv(t1'*t1+Q)*t1'*t2;
|
|
sigma0In = QIn;
|