MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re:implementation of Granger causality tests in Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg64077] Re:[mg63992] implementation of Granger causality tests in Mathematica
  • From: Darren Glosemeyer <darreng at wolfram.com>
  • Date: Tue, 31 Jan 2006 01:14:24 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Johann,
The following shows an example of the Granger test.  First, take two series 
ydata and xdata.

In[1]:= ydata = Table[Random[], {50}];

In[2]:= xdata = Table[Random[], {50}];

In[3]:= lag[data_, i_] := Drop[data, -i]


The test is performed for a given lag.  We will use 3 for this example.


In[4]:= maxlag = 3;


Fitting will be done using Regress, so we will take the original data and 
create a new data set with entries of the form {ylag1, ylag2, ylag3, xlag1, 
xlag2, xlag3, y}.

In[5]:= laggeddata =
           Transpose[
            Map[Take[#, -Length[ydata] + maxlag] &,
             Join[Table[lag[ydata, i], {i, maxlag}],
              Table[lag[xdata, i], {i, maxlag}], {ydata}]]];


Now, the two models to fit are the model with all three x and y lags, and 
the model without the x lags.


In[6]:= << Statistics`

In[7]:= rssu = Total[(resids1 =
              FitResiduals /.
               Regress[laggeddata, {y1, y2, y3, x1, x2, x3}, {y1, y2, y3, 
x1, x2, x3},
                RegressionReport -> FitResiduals])^2]

Out[7]= 3.43417

In[8]:= rssg = Total[(resids2 =
              FitResiduals /.
               Regress[laggeddata, {y1, y2, y3}, {y1, y2, y3, x1, x2, x3},
                RegressionReport -> FitResiduals])^2]

Out[8]= 3.58539


The test statistic only requires the residual sums of squares for each of 
these models, so that is all that I have saved from the fitting.  Other 
diagnostics can be saved as well if desired.  Here is the test statistic in 
this example.

In[9]:= grangerstat = ((rssg - rssu)/
             maxlag)/(rssu/(Length[laggeddata] - 2*maxlag - 1))

Out[9]= 0.587118


The p-value is obtained from FRatioDistribution[maxlag, Length[laggeddata] 
- 2*maxlag - 1].

In[10]:= 1 - CDF[FRatioDistribution[maxlag, Length[laggeddata] - 2*maxlag - 
1],
            grangerstat]

Out[10]= 0.626993



Darren Glosemeyer
Wolfram Research


  • Prev by Date: Re: Annoying Maximize behaviour
  • Next by Date: Re: Moving average / smoothing data
  • Previous by thread: implementation of Granger causality tests in Mathematica
  • Next by thread: Deleting Selective DownValues