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

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?

• 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? Oct 11, 2016 at 21:29

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}];

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"];