From 178bf4165c60d435a9ee0fd5480845bb8484811c Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Thu, 16 Jun 2016 16:22:28 +0200 Subject: [PATCH] Make sure Zflag for augmented state space is correctly set when measurement error is correlated --- matlab/dsge_likelihood.m | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m index 6d1bbe69d..09952053a 100644 --- a/matlab/dsge_likelihood.m +++ b/matlab/dsge_likelihood.m @@ -425,7 +425,16 @@ switch DynareOptions.lik_init else %Augment state vector (follows Section 6.4.3 of DK (2012)) expanded_state_vector_for_univariate_filter=1; - Z = [Z, eye(pp)]; + if Zflag + Z1=Z; + else + Z1=zeros(pp,size(T,2)); + for jz=1:length(Z) + Z1(jz,Z(jz))=1; + end + end + Z = [Z1, eye(pp)]; + Zflag=1; T = blkdiag(T,zeros(pp)); Q = blkdiag(Q,H); R = blkdiag(R,eye(pp)); @@ -433,6 +442,7 @@ switch DynareOptions.lik_init Pinf = blkdiag(Pinf,zeros(pp)); H1 = zeros(pp,1); mmm = mm+pp; + end end @@ -728,13 +738,19 @@ if (kalman_algo==2) || (kalman_algo==4) end else if ~expanded_state_vector_for_univariate_filter - Z = [Z, eye(pp)]; + Z1=zeros(pp,size(T,2)); + for jz=1:length(Z) + Z1(jz,Z(jz))=1; + end + Z = [Z1, eye(pp)]; + Zflag=1; T = blkdiag(T,zeros(pp)); Q = blkdiag(Q,H); R = blkdiag(R,eye(pp)); Pstar = blkdiag(Pstar,H); Pinf = blkdiag(Pinf,zeros(pp)); H1 = zeros(pp,1); + Zflag=1; end mmm = mm+pp; if singularity_has_been_detected