Example 13.4 Diffuse Kalman Filtering

The nonstationary SSM is simulated to analyze the diffuse Kalman filter call KALDFF. The transition equation is generated by using the following formula:

\[  \left[ \begin{array}{c} z_{1t} \\ z_{2t} \end{array} \right] = \left[ \begin{array}{cc} 1.5 &  -0.5 \\ 1.0 &  0.0 \end{array} \right] \left[ \begin{array}{c} z_{1t-1} \\ z_{2t-1} \end{array} \right] + \left[ \begin{array}{c} \eta _{1t} \\ 0 \end{array} \right]  \]

where $\eta _{1t} \sim N(0,1)$. The transition equation is nonstationary since the transition matrix $\bF $ has one unit root. Here is the code:

   proc iml;
   z_1 = 0; z_2 = 0;
   do i = 1 to 30;
      z = 1.5*z_1 - .5*z_2 + rannor(1234567);
      z_2 = z_1;
      z_1 = z;
      x =  z + .8*rannor(1234578);
      if ( i > 10 ) then y = y // x;
   end;

The KALDFF and KALCVF calls produce one-step prediction, and the result shows that two predictions coincide after the fifth observation (Output 13.4.1). Here is the code:

   t = nrow(y);
   h = { 1 0 };
   f = { 1.5 -.5, 1 0 };
   rt = .64;
   vt = diag({1 0});
   ny = nrow(h);
   nz = ncol(h);
   nb = nz;
   nd = nz;
   a  = j(nz,1,0);
   b  = j(ny,1,0);
   int = j(ny+nz,nb,0);
   coef = f // h;
   var = ( vt || j(nz,ny,0) ) //
         ( j(ny,nz,0) || rt );
   intd = j(nz+nb,1,0);
   coefd = i(nz) // j(nb,nd,0);
   at = j(t*nz,nd+1,0);
   mt = j(t*nz,nz,0);
   qt = j(t*(nd+1),nd+1,0);
   n0 = -1;
   call kaldff(kaldff_p,dvpred,initial,s2,y,0,int,
               coef,var,intd,coefd,n0,at,mt,qt);
   call kalcvf(kalcvf_p,vpred,filt,vfilt,y,0,a,f,b,h,var);
   print kalcvf_p kaldff_p;

Output 13.4.1: Diffuse Kalman Filtering

Diffuse Kalman Filtering

kalcvf_p   kaldff_p  
0 0 0 0
1.441911 0.961274 1.1214871 0.9612746
-0.882128 -0.267663 -0.882138 -0.267667
-0.723156 -0.527704 -0.723158 -0.527706
1.2964969 0.871659 1.2964968 0.8716585
-0.035692 0.1379633 -0.035692 0.1379633
-2.698135 -1.967344 -2.698135 -1.967344
-5.010039 -4.158022 -5.010039 -4.158022
-9.048134 -7.719107 -9.048134 -7.719107
-8.993153 -8.508513 -8.993153 -8.508513
-11.16619 -10.44119 -11.16619 -10.44119
-10.42932 -10.34166 -10.42932 -10.34166
-8.331091 -8.822777 -8.331091 -8.822777
-9.578258 -9.450848 -9.578258 -9.450848
-6.526855 -7.241927 -6.526855 -7.241927
-5.218651 -5.813854 -5.218651 -5.813854
-5.01855 -5.291777 -5.01855 -5.291777
-6.5699 -6.284522 -6.5699 -6.284522
-4.613301 -4.995434 -4.613301 -4.995434
-5.057926 -5.09007 -5.057926 -5.09007


The likelihood function for the diffuse Kalman filter under the finite initial covariance matrix $\Sigma _\delta $ is written

\[  \lambda (\textbf{y}) = -\frac{1}{2}[\textbf{y}^\#  \log (\hat{\sigma }^2) + \sum _{t=1}^ T \log (|\bD _ t|)]  \]

where $\textbf{y}^(\# )$ is the dimension of the matrix $(\textbf{y}^{\prime }_1, \cdots , \textbf{y}^{\prime }_ T)^{\prime }$. The likelihood function for the diffuse Kalman filter under the diffuse initial covariance matrix $(\Sigma _\delta \rightarrow \infty )$ is computed as $\lambda (\textbf{y}) - \frac{1}{2}\log (|\bS |)$, where the $\bS $ matrix is the upper $N_\delta \times N_\delta $ matrix of $\bQ _ t$. Output 13.4.2 displays the log likelihood and the diffuse log likelihood. Here is the code:

   d = 0;
   do i = 1 to t;
      dt = h*mt[(i-1)*nz+1:i*nz,]*h` + rt;
      d = d + log(det(dt));
   end;
   s = qt[(t-1)*(nd+1)+1:t*(nd+1)-1,1:nd];
   log_l = -(t*log(s2) + d)/2;
   dff_logl = log_l - log(det(s))/2;
   print log_l dff_logl;

Output 13.4.2: Diffuse Likelihood Function

  log_l
Log L -11.42547

  dff_logl
Diffuse Log L -9.457596