*! version 1.1 27 Sep 1999 [STB-51: sts14] program define granger, rclass version 6.0 syntax varlist(ts) [if] [in] [, Lags(int -1) ] marksample touse _ts tvar, sort markout `touse' `tvar' local samp "if `touse'==1" local lower = `lags' local upper = _N - (2*`lower') - 1 if `lags' <= 0 | `lags' > 10 { noi di in red "Must select lag length between 1 and 10" exit 198 } else { qui reg `1' L(1/`lower').`1' L(1/`lower').`2' tempname rss1 scalar `rss1' = e(rss) qui reg `1' L(1/`lags').`1' tempname rss0 s1 fprobs1 scalar `rss0' = e(rss) scalar `s1' = [(`rss0'-`rss1')/3] / [`rss1' / ( _N - (2*`lower') - 1)] scalar `fprobs1' = fprob(`lower',`upper',`s1') display in gr "Granger Causality test (asymptotic)" in ye " `1' " in gr " ---> " in ye " `2' " display in bl " H0: " in ye " `1' " in bl " does not Granger-cause " in ye " `2' " display in gr "F( `lower', `upper') = " in ye `s1' display in gr "Prob > F = " %5.4g in ye `fprobs1' tempname s2 s2pval x210 x205 x201 x2001 scalar `s2' = [ _N * (`rss0'-`rss1')] / `rss1' display in gr "Granger Causality test" display in bl " H0: " in ye " `1' " in bl " does not Granger-cause " in ye " `2' " display in gr "chi2(" in ye "`lower'" in gr ") = " in ye `s2' scalar `s2pval' = chiprob(`lower', `s2') display in gr "Prob > chi2 = " %5.4f in ye `s2pval' } end