Skip to content
All library documents

Interpreting GARCH Return and Volatility Forecasts

Article Quant Q&A · Author: math

Summary

The discussion explains how to read multi-step forecasts from an AR/GARCH model fitted to stock returns. The forecasted mean is determined by the conditional mean equation: in a model with only a constant mean, each horizon has the same point forecast. A model with autoregressive terms can produce different mean forecasts as those terms decay or evolve across forecast steps.

The forecast output also reports conditional standard deviations from the variance model; squaring them gives conditional variance forecasts. These quantities describe different aspects of future returns: the mean is a point estimate, while volatility measures conditional dispersion. The example includes fitted coefficients and residual diagnostics for two specifications, but it does not establish that either model is reliably predictive. It also highlights that software output and model assumptions matter when interpreting forecasts; the accepted response’s long-run variance suggestion should not be confused with the separate conditional standard deviation column.

Key ideas

  • A constant-only conditional mean produces the same point forecast at every future horizon.
  • The forecasted mean and conditional volatility describe distinct properties of returns.
  • The reported conditional standard deviation can be squared to obtain conditional variance.
  • Autoregressive terms in an AR/GARCH model can make mean forecasts vary across horizons.
  • Residual checks and fitted coefficients provide diagnostics, not proof of forecasting performance.

Tags

Full text
# GARCH model and prediction


# GARCH model and prediction












I have a question about the prediction of volatility and returns of a time series. Basically it is a question about `predict` in the `fGarch`package.

The following code is from the book Analysis of financial time series and it is an example of AR/GARCH models for the log returns of the SP500

```
library(fGarch)
sp5=read.table("http://faculty.chicagobooth.edu/ruey.tsay/teaching/fts/sp500.dat")#Load data
plot(sp5,type="l")
m1=garchFit(formula=~arma(3,0)+garch(1,1),data=sp5,trace=F)
summary(m1)
m2=garchFit(formula=~garch(1,1),data=sp5,trace=F,cond.dist="std")
summary(m2)
stresi=residuals(m2,standardize=T)
plot(stresi,type="l")
Box.test(stresi,10,type="Ljung")
predict(m2,5)
```

First we assume an ARMA/GARCH model. However, we see that all the coefficient from the AR model are not significant. Hence we model a pure GARCH time series. My question is about the very last command. Running this command gives the following output:

```
    > predict(m2,5)
  meanForecast  meanError standardDeviation
1  0.008455044 0.05330089        0.05330089
2  0.008455044 0.05327886        0.05327886
3  0.008455044 0.05325781        0.05325781
4  0.008455044 0.05323769        0.05323769
5  0.008455044 0.05321847        0.05321847
```

What is here the meanForecast and why is it always the same number? Is there a way to get the n-th volatility forecast as well as the n-th return forecast, e.g. the predicted volatility for the next day as well as the return. In the case of the model `m2` the volatility forecast will be the return forecast, since we assume a pure GARCH model. But how can we extract both in the `m1`case?

Edit: as asked by user12348 here are my outputs of `summary(m1)` and `summary(m2)`.

```
> summary(m1)

Title:
 GARCH Modelling 

Call:
 garchFit(formula = ~arma(3, 0) + garch(1, 1), data = sp5, trace = F) 

Mean and Variance Equation:
 data ~ arma(3, 0) + garch(1, 1)
<environment: 0x6ac79b0>
 [data = sp5]

Conditional Distribution:
 norm 

Coefficient(s):
         mu          ar1          ar2          ar3        omega  
 7.7077e-03   3.1968e-02  -3.0261e-02  -1.0649e-02   7.9746e-05  
     alpha1        beta1  
 1.2425e-01   8.5302e-01  

Std. Errors:
 based on Hessian 

Error Analysis:
         Estimate  Std. Error  t value Pr(>|t|)    
mu      7.708e-03   1.607e-03    4.798 1.61e-06 ***
ar1     3.197e-02   3.837e-02    0.833  0.40473    
ar2    -3.026e-02   3.841e-02   -0.788  0.43076    
ar3    -1.065e-02   3.756e-02   -0.284  0.77677    
omega   7.975e-05   2.810e-05    2.838  0.00454 ** 
alpha1  1.242e-01   2.247e-02    5.529 3.22e-08 ***
beta1   8.530e-01   2.183e-02   39.075  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log Likelihood:
 1272.179    normalized:  1.606287 

Description:
 Wed Apr 23 18:07:32 2014 by user:  

Standardised Residuals Tests:
                                Statistic p-Value     
 Jarque-Bera Test   R    Chi^2  73.04843  1.110223e-16
 Shapiro-Wilk Test  R    W      0.9857968 5.961505e-07
 Ljung-Box Test     R    Q(10)  11.56744  0.3150483   
 Ljung-Box Test     R    Q(15)  17.78746  0.2740041   
 Ljung-Box Test     R    Q(20)  24.11916  0.2372259   
 Ljung-Box Test     R^2  Q(10)  10.31614  0.4132084   
 Ljung-Box Test     R^2  Q(15)  14.22819  0.5082978   
 Ljung-Box Test     R^2  Q(20)  16.79404  0.6663039   
 LM Arch Test       R    TR^2   13.34305  0.3446074   

Information Criterion Statistics:
      AIC       BIC       SIC      HQIC 
-3.194897 -3.153581 -3.195051 -3.179018 

>
```

and for `summary(m2)`:

```
> summary(m2)

Title:
 GARCH Modelling 

Call:
 garchFit(formula = ~garch(1, 1), data = sp5, cond.dist = "std", 
    trace = F) 

Mean and Variance Equation:
 data ~ garch(1, 1)
<environment: 0x6b70f70>
 [data = sp5]

Conditional Distribution:
 std 

Coefficient(s):
        mu       omega      alpha1       beta1       shape  
0.00845504  0.00012485  0.11302582  0.84220210  7.00318063  

Std. Errors:
 based on Hessian 

Error Analysis:
        Estimate  Std. Error  t value Pr(>|t|)    
mu     8.455e-03   1.515e-03    5.581 2.39e-08 ***
omega  1.248e-04   4.519e-05    2.763  0.00573 ** 
alpha1 1.130e-01   2.693e-02    4.198 2.70e-05 ***
beta1  8.422e-01   3.186e-02   26.432  < 2e-16 ***
shape  7.003e+00   1.680e+00    4.169 3.06e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log Likelihood:
 1283.417    normalized:  1.620476 

Description:
 Wed Apr 23 18:09:17 2014 by user:  

Standardised Residuals Tests:
                                Statistic p-Value    
 Jarque-Bera Test   R    Chi^2  99.61249  0          
 Shapiro-Wilk Test  R    W      0.9836345 9.72802e-08
 Ljung-Box Test     R    Q(10)  11.37961  0.3287173  
 Ljung-Box Test     R    Q(15)  18.2163   0.2514649  
 Ljung-Box Test     R    Q(20)  24.91842  0.2045699  
 Ljung-Box Test     R^2  Q(10)  10.52266  0.3958941  
 Ljung-Box Test     R^2  Q(15)  16.14586  0.3724248  
 Ljung-Box Test     R^2  Q(20)  18.93325  0.5261686  
 LM Arch Test       R    TR^2   14.88667  0.247693   

Information Criterion Statistics:
      AIC       BIC       SIC      HQIC 
-3.228325 -3.198814 -3.228404 -3.216983 

>
```

## Answer by user12348 (score 5, accepted)

https://quant.stackexchange.com/a/11040

The mean could be the long run variance which is

```
sig2 = fit.Constant/(1-fit.GARCH{1}-fit.ARCH{1});
```

I hope this explains.

If not, note I ran this model through Matlab, I get different values. you can paste your m1 and m2 values and some other intermediate results so I can see why Matlab differs.

EDIT: The question refers to forecasting the returns. Using AR-GARCH model, $$r_t= μ+\epsilon_t$$ $$ z_t=\epsilon_t/σ_t $$ $z_t$ is white noise or i.i.d, and can take any distribution. $$σ_t^2=w+\alpha \epsilon_{t-1}^2+\beta σ_{t-1}^2$$ The predict function in R is forecasting $r_{t+k}$ where k is the periods into the future. It is also possible to forecast future variance, $σ_{t+k}^2$,as shown, using GARCH formula above.

## Answer by Richard Hardy (score 1)

https://quant.stackexchange.com/a/30287

> What is here the meanForecast and why is it always the same number?

It is the point forecast due to the conditional mean model. Since it is just a constant in your model `m2`, the forecast is also constant.

> Is there a way to get the n-th volatility forecast as well as the n-th return forecast, e.g. the predicted volatility for the next day as well as the return.

The documentation of the `predict` function is not very explicit, but the first column `meanForecast` gives the point forecast and I guess the third column `standardDeviation` gives the conditional standard deviation forecasts due to the GARCH model. Square them to get the conditional variance forecasts.

> In the case of the model `m2` the volatility forecast will be the return forecast, since we assume a pure GARCH model.

Volatility forecast will be the return forecast? In what sense? A return is a random variable, volatility is its property. If by return forecast you mean a point forecast, again this is not the same as volatility forecast.

> But how can we extract both in the `m1` case?

`predict` gives you the conditional mean and conditional standard deviation forecasts in the first and the last columns. Square the latter to get the conditional variance forecasts.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.