Why can't I make a TimeSeriesForecast with a GARCH model?

5

I am playing with TimeSeriesForecast and I find that it invariably forecasts 0 for GARCH models. It is possible that I am misunderstanding TimeSeriesForecast, or that I am misunderstanding GARCH models and I would appreciate any guidance.

Take as an example,

data = {5., 9., 8., 10., 6.1, 10.4, 9.1, 11.6, 7.5, 12.1, 10.4, 13.5, 
   9., 14.1, 11.9, 15.7, 10.8, 16.4, 13.7, 18.3, 12.9, 19., 15.8, 21.2,
   15.3, 22.1, 18.3, 24.6, 20, 20, 31, 31, 42, 42, 55, 55, 43, 22, 11,
    233, 432, 12, 23, 34, 23};

TimeSeriesModelFit and TimeSeriesForecast work for ARMA and other model types. For example,

In[]:= tsArima = TimeSeriesModelFit[data, "ARIMA"];
In[]:= TimeSeriesForecast[tsArima, 10]
Out[]= 33.2511 (* ok, works *)

In[]:= tsGarch = TimeSeriesModelFit[data, {"GARCH", {1, 1}}];
In[]:= TimeSeriesForecast[tsGarch , 10]
Out[]= 0 (* always *)

It doesn't matter what the source data is, GARCH always returns 0 and never produces an error. What am I missing here?

Michael Stern

Posted 2016-10-11T13:31:47.313

Reputation: 4 380

I note that there is an example in the GARCHProcess documentation that precisely does this, and where the author does not seem to be surprised at all. Perhaps something related to a property of this random process? – Sjoerd C. de Vries – 2016-10-11T21:29:15.803

Answers

4

TimeSeriesForecast returns the conditional expectation which for GARCH process is always zero. Therefore you always get 0. Now TimeSeriesForecast[tsGarch, 10] returns a forecasted value ONLY, hence you get 0. If you want to get the forecast WITH the errors, you need to call TimeSeriesForecast with a list of steps so it does return TemporalData that carries the error information:

In[8]:= data = {5., 9., 8., 10., 6.1, 10.4, 9.1, 11.6, 7.5, 12.1, 
   10.4, 13.5, 9., 14.1, 11.9, 15.7, 10.8, 16.4, 13.7, 18.3, 12.9, 
   19., 15.8, 21.2, 15.3, 22.1, 18.3, 24.6, 20, 20, 31, 31, 42, 42, 
   55, 55, 43, 22, 11, 233, 432, 12, 23, 34, 23};

In[21]:= tsGarch = TimeSeriesModelFit[data, {"GARCH", {1, 1}}];
forecast = TimeSeriesForecast[tsGarch, {1}];
forecast // Head

Out[23]= TemporalData

In[24]:= forecast["Path"]

Out[24]= {{45, 0}}

In[25]:= forecast["Properties"]

Out[25]= {"Components", "DateList", "DatePath", "DatePaths", "Dates", \
"FirstDates", "FirstTimes", "FirstValues", "LastDates", "LastTimes", \
"LastValues", "MeanSquaredErrors", "Part", "Path", "PathCount", \
"PathFunction", "PathFunctions", "PathLength", "PathLengths", \
"Paths", "PathTimes", "SliceData", "SliceDistribution", "TimeList", \
"Times", "ValueDimensions", "ValueList", "Values"}

In[26]:= errors = forecast["MeanSquaredErrors"];

In[27]:= errors // Head

Out[27]= TemporalData

In[28]:= errors["Path"]

Out[28]= {{45, 4590.48}}

And yes, this is all documented - see last example in Scope/BasicUses on GARCHProcess reference page :)

Gosia

Posted 2016-10-11T13:31:47.313

Reputation: 772