Preparing FTSE 100 Data for ARMA–GARCH Forecasting
Summary
The document describes an attempt to forecast a differenced FTSE 100 series with an ARMA mean model and GARCH disturbances using the rugarch package. The author encounters missing volatility forecasts when requesting rolling forecasts and a plotting error with an alternative forecast call, then reports that a rolling estimation function produced forecasts alongside realized observations.
The response focuses on the input series rather than diagnosing the forecast or plotting errors. It notes that the reported summary statistics for the differenced index are unusual and recommends modeling log returns, calculated as the log ratio of consecutive prices and scaled by 100, to obtain a stationary series before fitting ARMA–GARCH. This is a brief recommendation, not a comparison of forecast performance or a full guide to package settings. The forecast output shown is limited, and the answer does not establish whether the revised series resolves the original missing values or plotting issue.
Key ideas
- The example fits an ARMA–GARCH model to a differenced FTSE 100 series.
- The response flags unusual summary statistics as a reason to review how the input series was constructed.
- It recommends using scaled log returns from consecutive prices to form a stationary series.
- The note does not explain the missing volatility forecasts or plotting error in detail.
- The displayed rolling forecast output does not establish predictive performance.
Tags
Full text
# ARMA+GARCH prediction with package rugarch (R)
# ARMA+GARCH prediction with package rugarch (R)
I am analyzing FTSE 100 series, from 2007-01-01 to 2010-12-31 (university exam homework). I have to use the data 'til 2010-11-30 as sample, and the remaining (23) observations as in-sample forecast (to check the predictive performances of my model). The model fitted is an ARMA(3,2) with GARCH(1,1) disturbances on the differenced sample (actually, the model is an ARIMA one):
```
model.spec.final = ugarchspec(variance.model=list(model="fGARCH", submodel="GARCH", garchOrder=c(2,1)), mean.model = list(armaOrder=c(3,2), include.mean=F,arfima = FALSE), distribution.model="std", fixed.pars=list(alpha1=0))
model.fit.final = ugarchfit(spec=model.spec.final, data=d_FTSE, out.sample=23, solver.control=list(trace=0))
```
The forecast problem:
`model.forecast = ugarchforecast(model.fit.final, n.ahead=23, n.roll=23, out.sample = 23)`
gives me this output:
```
> model.forecast
*------------------------------------*
* GARCH Model Forecast *
*------------------------------------*
Model: fGARCH
fGARCH Sub-Model: GARCH
Horizon: 23
Roll Steps: 23
Out of Sample: 23
0-roll forecast [T0=2010-11-30]:
Series Sigma
T+1 -8.4391 82.56
T+2 7.2799 79.80
T+3 2.7655 NA
T+4 -9.5286 NA
T+5 5.8482 NA
T+6 3.9431 NA
T+7 -9.1431 NA
T+8 4.3687 NA
T+9 4.8931 NA
T+10 -8.5682 NA
T+11 2.9420 NA
T+12 5.6136 NA
T+13 -7.8394 NA
T+14 1.5987 NA
T+15 6.1117 NA
T+16 -6.9922 NA
T+17 0.3636 NA
T+18 6.3994 NA
T+19 -6.0613 NA
T+20 -0.7440 NA
T+21 6.4927 NA
T+22 -5.0795 NA
T+23 -1.7100 NA
```
the result is the same if I remove the specification on the out of sample obs (since it is specified also in the model fitting) and if I modify the n.roll parameter. why all those NA? how can i solve the problem?
trying with this code:
```
spec=getspec(model.fit.final)
setfixed(spec) <- as.list(coef(model.fit.final))
model.forecast.2= ugarchforecast(spec, n.ahead=1, n.roll=23, data=d_FTSE[1:length(d_FTSE), ,drop=F],out.sample=23)
```
that comes from the answer to another question (Forecasting using rugarch package) it seems to work, but when I plot the results:
```
> plot(model.forecast.2,which="all")
Error in rect(fdates[i - 1], Zdn[i - 1], fdates[i], Zup[i], col = colors()[142], :
cannot mix zero-length and non-zero-length coordinates
```
It is very frustrating.
basic stats:
```
> stat.desc(d_FTSE)
FTSE.Adjusted
nbr.val 1044.0000000
nbr.null 33.0000000
nbr.na 0.0000000
min -391.0996100
max 431.2998050
range 822.3994150
sum -320.8999030
median 0.0000000
mean -0.3073754
SE.mean 2.4136309
CI.mean.0.95 4.7361256
var 6081.9409506
std.dev 77.9867998
coef.var -253.7184283
```
thank you in advance.
I've been able to succesfully use the function ugarchroll: does it a similar work as ugarchforecast? here is a part of the output:
```
> model.forecast3
*-------------------------------------*
* GARCH Roll *
*-------------------------------------*
No.Refits : 2
Refit Horizon : 22
No.Forecasts : 23
GARCH Model : fGARCH(2,1)
fGARCH SubModel : GARCH
Distribution : std
Forecast Density:
Mu Sigma Skew Shape Shape(GIG) Realized
2010-12-01 -8.4391 82.5557 0 10.8735 0 114.2002
2010-12-02 4.3050 79.8021 0 10.8735 0 125.1001
2010-12-03 0.6100 68.5355 0 10.8735 0 -22.3003
2010-12-06 -12.0731 59.4221 0 10.8735 0 25.0000
```
(...)
## Answer by Malick (score 1)
https://quant.stackexchange.com/a/22387
Your summarize statistics are really strange ( median = 0.0000 , max 431 ...).
Compute the returns as follow : $log(p_{t+1}/p_{t}) *100 $ and run the Arma-Garch on it.
Edit :
As explanation : you need to use a stationnary time serie : see @Neeraj commentShown 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.