statacausality

Optimal lag selection in Granger Causality tests


I use [TS] varsoc to obtain the optimum lag length for the Granger causality test in Stata. This command reports the optimal number of lags based on different criteria such as Akaike's information criterion (AIC). Is there any way to store the optimal lag number (obtained based on AIC) in a variable and use it in the next command to estimate causality? Something like this:

Lag= varsoc X Y
tvgc X Y, p(Lag) d(Lag) trend window(30) prefix(_) graph

Solution

  • Here I adapt the first example in the help for varsoc. You can sort the matrix of statistics so that minimum AIC is in the first row, and read off the lag concerned.

    . webuse lutkepohl2, clear 
    (Quarterly SA West German macro data, Bil DM, from Lutkepohl 1993 Table E.1)
    
    . varsoc dln_inv dln_inc dln_consump
    
    Lag-order selection criteria
    
       Sample: 1961q2 thru 1982q4                               Number of obs = 87
      +---------------------------------------------------------------------------+
      | Lag |    LL      LR      df    p     FPE       AIC      HQIC      SBIC    |
      |-----+---------------------------------------------------------------------|
      |   0 |  696.398                     2.4e-11  -15.9402  -15.9059  -15.8552* |
      |   1 |  711.682  30.568    9  0.000 2.1e-11  -16.0846  -15.9477* -15.7445  |
      |   2 |  724.696  26.028    9  0.002 1.9e-11* -16.1769* -15.9372  -15.5817  |
      |   3 |  729.124  8.8557    9  0.451 2.1e-11  -16.0718  -15.7294  -15.2215  |
      |   4 |  738.353  18.458*   9  0.030 2.1e-11  -16.0771   -15.632  -14.9717  |
      +---------------------------------------------------------------------------+
       * optimal lag
       Endogenous: dln_inv dln_inc dln_consump
        Exogenous: _cons
    
    . 
    . mata 
    ------------------------------------------------- mata (type end to exit) ---------------
    : stats = st_matrix("r(stats)")
    
    : _sort(stats, 7)
    
    : st_numscalar("opt_lag_AIC", stats[1,1])
    
    : end 
    -----------------------------------------------------------------------------------------
    
    . 
    . di opt_lag_AIC 
    2
    
    

    To plug into a later command automatically, use expressions like

    `=opt_lag_AIC' 
    

    as arguments to options.