Thanks George,
S.

2009/5/27 G. Perendia <george@perendia.orangehome.co.uk>
A (rather simplified) example enclosed
 
Best regards
 
George Perendia
----- Original Message -----
Sent: Wednesday, May 27, 2009 11:56 AM
Subject: Re: [DynareDev] Kalman Filter

George, Can you share your example. In my experience (with medium scaled models) it takes much more iterations to get to the steady state kalman filter...

I didn't look at the cc codes, but one possible source of discrepancy between matlab and cc may be the steady state KF criterion. I test for the stationarity of KF considering the changes in the biggest elements of the Kalman Gain matrix, not the changes in the determinant of the forecast errors covariance matrix...

Best,
Stéphane.


2009/5/27 G. Perendia <george@perendia.orangehome.co.uk>
 
1. In my experience, the filter cov. determinants dF becomes stationary after several steps (5-10), e.g. 7 
and number of periods the filter is stationary is 
reste=smpl-7
whilst, if start =41 (presample=40) than reste is then larger than
smpl -start+1=smpl-40.
 
2.  it is not problematic to add all the determinants at once in the last period of the stationary filter
as long as we subtract from the total sum
 
start-1-(smpl-reste) = 41 -1 -(smpl-smpl+7)=33
 determinants, or, add only
min(reste,(smpl-start+1))
Best regards
 
George
----- Original Message -----
Sent: Wednesday, May 27, 2009 11:04 AM
Subject: Re: [DynareDev] Kalman Filter

Hi all,

I agree, the matlab code is very unclear (even if I had fun writting it this way ;-) and prone to errors if one uses the vector lik (Marco is using it). I would rather prefer to add the constants outside of the loop with a (sub)vector operation, this should be more efficient. I will do it today or tomorrow.

Best,
Stéphane.

2009/5/27 Michel Juillard <michel.juillard@ens.fr>
On closer inspection, I don't think that the expression pointed by George in kalman_filter.m is wrong:

1. reste = smpl-t or the number of periods during which the filter is stationary. This shouldn't be larger than T-start+1

2. it is problematic (see below) but not wrong to add all the determinants at once in the last period of the stationary filter

3. I don't think this explains the difference with the C++ version of the filter and we still have to look for it.

4. it remains that the current code is very unclear and that if LIK is correct the vector lik doesn't have the correct constants on each elements.

5. I would like to simplify the code and add the correct constant to each element of the lik vector. It would be a little bit less efficient in Matlab than the current code, but I doubt it would be noticeable.
Stephane, what do you think?


Best

Michel

G. Perendia wrote:
Dear Michel

I think I found an error in Dynare Matlab kalman_filter. suite of utilities
which affects the likelihood LIK  results with start>1 (i.e. presampling>0):

the calculation speed-up construct which relies on converged covariance
matrix

lik(t) = lik(t) + reste*log(dF);

adds reste * log(dF) to the last-1 (i.e. the smpl) member of lik
(the last, the lik(smpl+1) one contains smpl*pp*log(2*pi))
but reste is usually larger than T-start+1 so that

LIK = .5*(sum(lik(start:end))-(start-1)*lik(smpl+1)/smpl)

has much more log(dF)s added than required since they are all concentrated
in the last-1 (the T) member

For example, if I change the above construct to
lik(t) = lik(t) + min(reste,(smpl-start+1))*log(dF);

the reported likelihood for presample=40 from Matlab KF is
1640935.5855267849
which is nearly the same as that from C++ KF below:
1640935.5854489324

Shall I make changes to kalman/likelihood/ KFs and upload the .m files?
This problem affects also the older versions of DiffuseLikelihood**.m  too.

Best regards

George
artilogica@btconnect.com

----- Original Message ----- From: "Michel Juillard" <michel.juillard@ens.fr>
To: "G. Perendia" <george@perendia.orangehome.co.uk>
Sent: Tuesday, May 26, 2009 10:32 AM
Subject: Re: Kalman Filter+PS


 
Hi George,


   
Re 1) below:
I modified C++ KF so that it reports log-likelihood for given
start/preampling in same/similar manner as the Matlab KFs do and I am
getting approximately close results, e.g.

ll=  -1640935.5854489324 for C++ and
 (-) 1640482.4179242959 for Matlab KF (for start=41, i.e.
     
presample=40).
 
whilst they appear same for presample=0 (e.g.2.5906e+006), i.e.
-2590556.989730841 vs
 2590556.989778722

Are those results acceptably close or should I investigate further where
     
the
 
above difference may come form?


     
This indicates a problem . The difference should be the same with and
without presample. It may come from the computation of the likelihood
constant. This is done in a very obscure manner in Dynare Matlab.
   



 


_______________________________________________
Dev mailing list
Dev@dynare.org
http://www.dynare.org/cgi-bin/mailman/listinfo/dev



--
Stéphane Adjemian
CEPREMAP & Université du Maine

Tel: (33)1-43-13-62-39


_______________________________________________
Dev mailing list
Dev@dynare.org
http://www.dynare.org/cgi-bin/mailman/listinfo/dev

_______________________________________________
Dev mailing list
Dev@dynare.org
http://www.dynare.org/cgi-bin/mailman/listinfo/dev




--
Stéphane Adjemian
CEPREMAP & Université du Maine

Tel: (33)1-43-13-62-39


_______________________________________________
Dev mailing list
Dev@dynare.org
http://www.dynare.org/cgi-bin/mailman/listinfo/dev

_______________________________________________
Dev mailing list
Dev@dynare.org
http://www.dynare.org/cgi-bin/mailman/listinfo/dev




--
Stéphane Adjemian
CEPREMAP & Université du Maine

Tel: (33)1-43-13-62-39