6
$\begingroup$

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?

$\endgroup$
1
  • $\begingroup$ 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? $\endgroup$ Oct 11, 2016 at 21:29

1 Answer 1

4
$\begingroup$

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 :)

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.