Time Series Analysis and Examples

Example 10.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:

[ z_{1t} \    z_{2t}    ] =   [ 1.5 & -0.5 \    1.0 & 0.0    ]   [ z_{1t-1} \    z_{2t-1}    ] +   [ \eta_{1t} \    0    ]
where \eta_{1t} \sim n(0,1). The transition equation is nonstationary since the transition matrix {f} 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 10.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 10.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({y}) = -\frac{1}2[{y}^\char93  \log(\hat{\sigma}^2)    + \sum_{t=1}^t \log(|{d}_t|)]
where {y}^(\char93 ) is the dimension of the matrix ({y}^'_1,  ... , {y}^'_t)^'. The likelihood function for the diffuse Kalman filter under the diffuse initial covariance matrix (\sigma_\delta arrow \infty) is computed as \lambda({y}) - \frac{1}2\log(|{s}|), where the {s} matrix is the upper n_\delta x n_\delta matrix of {q}_t. Output 10.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 10.4.2: Diffuse Likelihood Function
 
Diffuse Kalman Filtering

  LOG_L
Log L -11.42547
 
  DFF_LOGL
Diffuse Log L -9.457596



Previous Page | Next Page | Top of Page