I want to forecast a differenced time series of an Index using the combined ARMA-GARCH model (because I want to forecast the mean and not the variance). My model is a ARMA(2,2)-GARCH(1,1) model. So the equations for the first forecast are:
Y(t+1)=Y(t)+Alpha(1)*(Y(t)-Y(t-1))+Alpha(2)*(Y(t-1)-Y(t-2)) - Beta(1)*e(t) - Beta(2)*e(t-1) + e(t+1)
with
e(t+1) = Sigma(t+1)*Z(t+1) , Z(t+1)=N(0,1)
and
Sigma^2 (t+1) = Omega + a(1)*u^2(t) + b(1)*Sigma^2(t)
I tried it with the "rugarch" package and the ugarchforecast
method:
GARCHspec <- ugarchspec( variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),mean.model = list(armaOrder = c(2, 2), include.mean = TRUE))
GARCHfit <- ugarchfit(GARCHspec, diffclosingkursu)
ugarchforecast(GARCHfit,n.ahead=250)
The forecast seems to be quite strange
*------------------------------------*
* GARCH Model Forecast *
*------------------------------------*
Model: sGARCH
Horizon: 30
Roll Steps: 0
Out of Sample: 0
0-roll forecast [T0=1976-11-23 01:00:00]:
Series Sigma
T+1 10.28 0.7802
T+2 10.30 0.8580
T+3 10.32 0.9264
T+4 10.34 0.9876
T+5 10.36 1.0429
T+6 10.38 1.0933
T+7 10.40 1.1395
T+8 10.43 1.1822
T+9 10.45 1.2217
T+10 10.47 1.2585
T+11 10.49 1.2927
T+12 10.51 1.3247
T+13 10.54 1.3547
T+14 10.56 1.3829
T+15 10.58 1.4093
T+16 10.60 1.4343
T+17 10.63 1.4578
T+18 10.65 1.4800
T+19 10.67 1.5010
T+20 10.69 1.5208
T+21 10.71 1.5396
T+22 10.74 1.5574
T+23 10.76 1.5743
T+24 10.78 1.5903
T+25 10.80 1.6056
T+26 10.82 1.6200
T+27 10.85 1.6338
T+28 10.87 1.6469
T+29 10.89 1.6593
T+30 10.91 1.6743
Also, how can it be, that every forecast for the same time series is the same but e(t+1)
should be a random variable?
EDIT:
ugarchspec( variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),mean.model = list(armaOrder = c(2, 2), include.mean = TRUE))
*---------------------------------*
* GARCH Model Spec *
*---------------------------------*
Conditional Variance Dynamics
------------------------------------
GARCH Model : sGARCH(1,1)
Variance Targeting : FALSE
Conditional Mean Dynamics
------------------------------------
Mean Model : ARFIMA(2,0,2)
Include Mean : TRUE
GARCH-in-Mean : FALSE
Conditional Distribution
------------------------------------
Distribution : norm
Includes Skew : FALSE
Includes Shape : FALSE
Includes Lambda : FALSE
ugarchfit(GARCHspec, closingkursu)
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model : ARFIMA(2,0,2)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 24.000332 0.774681 30.98091 0.00000
ar1 1.795379 0.000456 3935.65863 0.00000
ar2 -0.795715 0.000360 -2209.69523 0.00000
ma1 -0.891371 0.026093 -34.16102 0.00000
ma2 0.008179 0.024713 0.33094 0.74069
omega 0.152244 0.020684 7.36031 0.00000
alpha1 0.229838 0.023339 9.84798 0.00000
beta1 0.729204 0.023038 31.65283 0.00000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 24.000332 0.644910 37.21499 0.000000
ar1 1.795379 0.000731 2456.77236 0.000000
ar2 -0.795715 0.000471 -1687.85596 0.000000
ma1 -0.891371 0.035477 -25.12542 0.000000
ma2 0.008179 0.030585 0.26741 0.789156
omega 0.152244 0.040365 3.77172 0.000162
alpha1 0.229838 0.043371 5.29932 0.000000
beta1 0.729204 0.041929 17.39135 0.000000
LogLikelihood : -4427.411
Information Criteria
------------------------------------
Akaike 3.5230
Bayes 3.5415
Shibata 3.5229
Hannan-Quinn 3.5297
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.1058 0.7449
Lag[2*(p+q)+(p+q)-1][11] 1.6123 1.0000
Lag[4*(p+q)+(p+q)-1][19] 5.5053 0.9859
d.o.f=4
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.01876 0.8911
Lag[2*(p+q)+(p+q)-1][5] 4.39776 0.2084
Lag[4*(p+q)+(p+q)-1][9] 6.38265 0.2566
d.o.f=2
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[3] 1.227 0.500 2.000 0.2681
ARCH Lag[5] 2.548 1.440 1.667 0.3623
ARCH Lag[7] 3.489 2.315 1.543 0.4262
Nyblom stability test
------------------------------------
Joint Statistic: 2.1259
Individual Statistics:
mu 0.01831
ar1 0.34437
ar2 0.33567
ma1 0.06716
ma2 0.02932
omega 0.44909
alpha1 0.79120
beta1 1.02912
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.89 2.11 2.59
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 3.3842 0.0007247 ***
Negative Sign Bias 0.5320 0.5947678
Positive Sign Bias 0.3897 0.6967648
Joint Effect 19.5500 0.0002104 ***
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 259.6 3.576e-44
2 30 286.2 4.244e-44
3 40 322.5 2.575e-46
4 50 348.2 1.040e-46
Elapsed time : 0.30832
Best Answer
What exactly do you mean? What is the question here?
The best point forecast for the error term
e(t+1)
under square loss is its estimated conditional mean, which is zero. You do not expecte(t+1)
to actually be zero, but zero is your best guess. That is why the point forecast fore(t+1)
is zero every time.Your question title says "forecasting", so I answered it as such. Now if you want to model the time series for some other purpose, you can still use the same model as an approximation of the true data generating mechanism. If you want to simulate some paths from your estimated model, you can do that with the functions
ugarchsim
and/orugarchpath
. They will generate some random errors according to the estimated properties of those errors from the historical data.