Example 13.1 VAR Estimation and Variance Decomposition

In this example, a VAR model is estimated and forecast. The VAR(3) model is estimated by using investment, durable consumption, and consumption expenditures. The data are found in the appendix to Lütkepohl (1993). The stationary VAR(3) process is specified as

\[  \textbf{y}_ t = \bA _0 + \bA _1\textbf{y}_{t-1} + \bA _2\textbf{y}_{t-2} + \bA _3\textbf{y}_{t-3} + \epsilon _ t  \]

The matrix ARCOEF contains the AR coefficients ($\bA _1$,$\bA _2$, and $\bA _3$), and the matrix EV contains error covariance estimates. An intercept vector $\bA _0$ is included in the first row of the matrix ARCOEF if OPT[1]=1 is specified. Here is the code:

   data one;
      input invest income consum @@;
   datalines;
   180 451  415  179 465  421   185 485  434   192 493  448
   211 509  459  202 520  458   207 521  479   214 540  487
   231 548  497  229 558  510   234 574  516   237 583  525
   206 591  529  250 599  538   259 610  546   263 627  555
   264 642  574  280 653  574   282 660  586   292 694  602
   286 709  617  302 734  639   304 751  653   307 763  668
   317 766  679  314 779  686   306 808  697   304 785  688
   292 794  704  275 799  699   273 799  709   301 812  715
   280 837  724  289 853  746   303 876  758   322 897  779
   315 922  798  339 949  816   364 979  837   371 988  858
   375 1025 881  432 1063 905   453 1104 934   460 1131 968
   475 1137 983  496 1178 1013  494 1211 1034  498 1256 1064
   526 1290 1101 519 1314 1102  516 1346 1145  531 1385 1173
   573 1416 1216 551 1436 1229  538 1462 1242  532 1493 1267
   558 1516 1295 524 1557 1317  525 1613 1355  519 1642 1371
   526 1690 1402 510 1759 1452  519 1756 1485  538 1780 1516
   549 1807 1549 570 1831 1567  559 1873 1588  584 1897 1631
   611 1910 1650 597 1943 1685  603 1976 1722  619 2018 1752
   635 2040 1774 658 2070 1807  675 2121 1831  700 2132 1842
   692 2199 1890 759 2253 1958  782 2276 1948  816 2318 1994
   844 2369 2061 830 2423 2056  853 2457 2102  852 2470 2121
   833 2521 2145 860 2545 2164  870 2580 2206  830 2620 2225
   801 2639 2235 824 2618 2237  831 2628 2250  830 2651 2271
   ;
   proc iml;
   use one;
   read all into y var{invest income consum};
   mdel  = 1;
   maice = 0;
   misw  = 0;
   call tsmulmar(arcoef,ev,nar,aic) data=y maxlag=3
        opt=(mdel || maice || misw) print=1;
   arcoef = j(9,3,0);
   do i=1 to 9;
      do j=1 to 3;
         arcoef[i,j] = arcoef_l[i+1,j];
      end;
   end; 
   print arcoef;
   misw = 1;  /*-- instantaneous modeling --*/
   call tsmulmar(arcoef,ev,nar,aic) data=y maxlag=3
           opt=(mdel || maice || misw) print=1;
   print ev;

To obtain the unit triangular matrix $\bL ^{-1}$ and diagonal matrix $\bD _ t$, you need to estimate the instantaneous response model. When you specify the OPT[3]=1 option, the first row of the output matrix EV contains error variances of the instantaneous response model, while the unit triangular matrix is in the second through the fifth rows. See Output 13.1.1. Here is the code:

Output 13.1.1: Error Variance and Unit Triangular Matrix

VAR Estimation and Variance Decomposition

ev
295.21042 190.94664 59.361516
1 0 0
-0.02239 1 0
-0.256341 -0.500803 1


In Output 13.1.2 and Output 13.1.3, you can see the relationship between the instantaneous response model and the VAR model. The VAR coefficients are computed as $\bA _ i = \bL \bA _ i^*(i=0,1,2,3)$, where $\bA _ i^*$ is a coefficient matrix of the instantaneous model. For example, you can verify this result by using the first lag coefficient matrix $(\bA _1)$.

\[  \left[\begin{array}{ccr} 0.886 &  0.340 &  -0.014 \\ 0.168 &  1.050 &  0.107 \\ 0.089 &  0.459 &  0.447 \end{array}\right] = \left[\begin{array}{rcc} 1.000 &  0 &  0 \\ -0.022 &  1.000 &  0 \\ -0.256 &  -0.501 &  1.000 \end{array}\right]^{-1} \left[\begin{array}{rrr} 0.886 &  0.340 &  -0.014 \\ 0.149 &  1.043 &  0.107 \\ -0.222 &  -0.154 &  0.397 \end{array}\right]  \]
   proc iml;
   mdel  = 1;
   maice = 0;
   misw  = 0;
   call tsmulmar(arcoef,ev,nar,aic) data=y maxlag=3
        opt=(mdel || maice || misw);
   call tspred(forecast,impulse0,mse,y,arcoef,nar,0,ev)
        npred=10 start=nrow(y) constant=mdel;

Output 13.1.2: VAR Estimates

arcoef
0.8855926 0.3401741 -0.014398
0.1684523 1.0502619 0.107064
0.0891034 0.4591573 0.4473672
-0.059195 -0.298777 0.1629818
0.1128625 -0.044039 -0.088186
0.1684932 -0.025847 -0.025671
0.0637227 -0.196504 0.0695746
-0.226559 0.0532467 -0.099808
-0.303697 -0.139022 0.2576405


Output 13.1.3: Instantaneous Response Model Estimates

arcoef
0.885593 0.340174 -0.014398
0.148624 1.042645 0.107386
-0.222272 -0.154018 0.39744
-0.059195 -0.298777 0.162982
0.114188 -0.037349 -0.091835
0.127145 0.072796 -0.023287
0.063723 -0.196504 0.069575
-0.227986 0.057646 -0.101366
-0.20657 -0.115316 0.28979


When the VAR estimates are available, you can forecast the future values by using the TSPRED call. As a default, the one-step predictions are produced until the START= point is reached. The NPRED=$h$ option specifies how far you want to predict. The prediction error covariance matrix MSE contains $h$ mean square error matrices. The output matrix IMPULSE contains the estimate of the coefficients $(\Psi _ i)$ of the infinite MA process. The following IML code estimates the VAR(3) model and performs 10-step-ahead prediction.

   mdel  = 1;
   maice = 0;
   misw  = 0;
   call tsmulmar(arcoef,ev,nar,aic) data=y maxlag=3
        opt=(mdel || maice || misw);
   call tspred(forecast,impulse,mse,y,arcoef,nar,0,ev)
        npred=10 start=nrow(y) constant=mdel;
   print impulse;

The lagged effects of a unit increase in the error disturbances are included in the matrix IMPULSE. For example:

\[  \frac{\partial \textbf{y}_{t+2}}{\partial \epsilon ^{\prime }_ t} = \left[\begin{array}{ccc} 0.781100 &  0.353140 &  0.180211 \\ 0.448501 &  1.165474 &  0.069731 \\ 0.364611 &  0.692111 &  0.222342 \end{array}\right]  \]

Output 13.1.4 displays the first 15 rows of the matrix IMPULSE.

Output 13.1.4: Moving-Average Coefficients: MA(0)$-$MA(4)

impulse
1 0 0
0 1 0
0 0 1
0.8855926 0.3401741 -0.014398
0.1684523 1.0502619 0.107064
0.0891034 0.4591573 0.4473672
0.7810999 0.3531397 0.1802109
0.4485013 1.1654737 0.0697311
0.3646106 0.6921108 0.2223425
0.8145483 0.243637 0.2914643
0.4997732 1.3625363 -0.018202
0.2775237 0.7555914 0.3885065
0.7960884 0.2593068 0.260239
0.5275069 1.4134792 0.0335483
0.267452 0.8659426 0.3190203


In addition, you can compute the lagged response on the one-unit increase in the orthogonalized disturbances $\epsilon _ t^*$.

\[  \frac{\partial \textbf{y}_{t+m}}{\partial \epsilon _{jt}^*} = \frac{\partial \mr {E}(\textbf{y}_{t+m}|y_{jt},y_{j-1,t},\ldots ,\bX _ t)}{\partial y_{jt}} = \Psi _ m \bL _ j  \]

When the error matrix EV is obtained from the instantaneous response model, you need to convert the matrix IMPULSE. The first 15 rows of the matrix ORTH_IMP are shown in Output 13.1.5. Note that the matrix constructed from the last three rows of EV become the matrix $\bL ^{-1}$. Here is the code:

   call tsmulmar(arcoef,ev,nar,aic) data=y maxlag=3
        opt={1 0 1};
   lmtx = inv(ev[2:nrow(ev),]);
   orth_imp = impulse * lmtx;
   print orth_imp;

Output 13.1.5: Transformed Moving-Average Coefficients

orth_imp
1 0 0
0.0223902 1 0
0.267554 0.5008031 1
0.889357 0.3329638 -0.014398
0.2206132 1.1038799 0.107064
0.219079 0.6832001 0.4473672
0.8372229 0.4433899 0.1802109
0.4932533 1.2003953 0.0697311
0.4395957 0.8034606 0.2223425
0.8979858 0.3896033 0.2914643
0.5254106 1.3534206 -0.018202
0.398388 0.9501566 0.3885065
0.8715223 0.3896353 0.260239
0.5681309 1.4302804 0.0335483
0.3721958 1.025709 0.3190203


You can verify the result for the case of

\[  \frac{\partial \textbf{y}_{t+2}}{\partial \epsilon _{2t}^*} = \frac{\partial \mr {E}(\textbf{y}_{t+2}|y_{2t},y_{1t},\ldots ,\bX _ t)}{\partial y_{2t}} = \Psi _2 \bL _2  \]

using the simple computation

\[  \left[\begin{array}{c} 0.443390 \\ 1.200395 \\ 0.803461 \end{array}\right] = \left[\begin{array}{ccc} 0.781100 &  0.353140 &  0.180211 \\ 0.448501 &  1.165474 &  0.069731 \\ 0.364611 &  0.692111 &  0.222342 \end{array}\right] \left[\begin{array}{c} 0.000000 \\ 1.000000 \\ 0.500803 \end{array}\right]  \]

The contribution of the $i$th orthogonalized innovation to the mean square error matrix of the 10-step forecast is computed by using the formula

\[  d_{ii}[\bL _ i \bL ^{\prime }_ i + \Psi _1 \bL _ i \bL ^{\prime }_ i \Psi ^{\prime }_1 + \cdots + \Psi _9 \bL _ i \bL ^{\prime }_ i \Psi ^{\prime }_9]  \]

In Output 13.1.6, diagonal elements of each decomposed MSE matrix are displayed as the matrix CONTRIB as well as those of the MSE matrix (VAR). Here is the code:

   mse1  = j(3,3,0);
   mse2  = j(3,3,0);
   mse3  = j(3,3,0);
   do i = 1 to 5;
      psi = impulse[(i-1)*3+1:3*i,];
      mse1 = mse1 + psi*lmtx[,1]*lmtx[,1]`*psi`;
      mse2 = mse2 + psi*lmtx[,2]*lmtx[,2]`*psi`;
      mse3 = mse3 + psi*lmtx[,3]*lmtx[,3]`*psi`;
   end;
   mse1 = ev[1,1]#mse1;
   mse2 = ev[1,2]#mse2;
   mse3 = ev[1,3]#mse3;
   contrib = vecdiag(mse1) || vecdiag(mse2) || vecdiag(mse3);
   var  = vecdiag(mse[28:30,]);
   print contrib var;

Output 13.1.6: Orthogonal Innovation Contribution

contrib   var
1197.9131 116.68096 11.003194 2163.7104
263.12088 1439.1551 1.0555626 4573.9809
180.09836 633.55931 89.177905 2466.506


The investment innovation contribution to its own variable is 1879.3774, and the income innovation contribution to the consumption expenditure is 1916.1676. It is easy to understand the contribution of innovations in the $i$th variable to MSE when you compute the innovation account. In Output 13.1.7, innovations in the first variable (investment) explain 20.45% of the error variance of the second variable (income), while the innovations in the second variable explain 79.5% of its own error variance. It is straightforward to construct the general multistep forecast error variance decomposition. Here is the code:

   account = contrib * 100 / (var@j(1,3,1));
   print account;

Output 13.1.7: Innovation Account

account
55.363835 5.3926331 0.5085336
5.7525574 31.463951 0.0230775
7.3017604 25.68651 3.615556