# GARCH forecast of series (in R) seems too high

I am wondering why the mean of my model is so high leading to a high forecast of the time series data. I included a linear regression in the external regressors as there is a clear downward trend.

I think I may have specified the linear regression incorrectly in the external regressor. Should I use instead seq(112,1,by=-1) as there is a negative correlation? This gives me a mean in my model of 3 which seems more reasonable based on previous values.

Model specification using rugarch:

set.seed(1)
garchspec_ged = ugarchspec(variance.model=list(model="sGARCH", garchOrder=c(1,1)),
mean.model=list(armaOrder=c(0,0), external.regressors = matrix(seq(1,112,1)),
distribution.model="ged")
garchfit_ged <- ugarchfit(data = yts, spec = garchspec_ged)


summary output:

*---------------------------------*
*          GARCH Model Fit        *
*---------------------------------*

Conditional Variance Dynamics
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model  : ARFIMA(0,0,0)
Distribution    : ged

Optimal Parameters
------------------------------------
Estimate  Std. Error  t value Pr(>|t|)
mu      17.58611    1.149166 15.30337 0.000000
mxreg1  -0.12230    0.014254 -8.57981 0.000000
omega    0.67124    0.760973  0.88208 0.377736
alpha1   0.08434    0.053123  1.58763 0.112369
beta1    0.87592    0.067514 12.97392 0.000000
shape    2.19405    0.493805  4.44316 0.000009

Robust Standard Errors:
Estimate  Std. Error  t value Pr(>|t|)
mu      17.58611    1.713427  10.2637 0.000000
mxreg1  -0.12230    0.020444  -5.9822 0.000000
omega    0.67124    0.548106   1.2246 0.220709
alpha1   0.08434    0.047150   1.7888 0.073651
beta1    0.87592    0.052031  16.8344 0.000000
shape    2.19405    0.529629   4.1426 0.000034

LogLikelihood : -337.3251

Information Criteria
------------------------------------

Akaike       6.1308
Bayes        6.2764
Shibata      6.1254
Hannan-Quinn 6.1899

Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1]                     0.4786  0.4890
Lag[2*(p+q)+(p+q)-1][2]    0.5086  0.6896
Lag[4*(p+q)+(p+q)-1][5]    0.7354  0.9160
d.o.f=0
H0 : No serial correlation

Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1]                    0.01878  0.8910
Lag[2*(p+q)+(p+q)-1][5]   0.85125  0.8923
Lag[4*(p+q)+(p+q)-1][9]   3.64610  0.6493
d.o.f=2

Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[3]   0.08649 0.500 2.000  0.7687
ARCH Lag[5]   1.61721 1.440 1.667  0.5620
ARCH Lag[7]   3.16708 2.315 1.543  0.4826

Nyblom stability test
------------------------------------
Joint Statistic:  1.2853
Individual Statistics:
mu     0.06942
mxreg1 0.09061
omega  0.04553
alpha1 0.19344
beta1  0.12067
shape  0.11941

Asymptotic Critical Values (10% 5% 1%)
Joint Statistic:         1.49 1.68 2.12
Individual Statistic:    0.35 0.47 0.75

Sign Bias Test
------------------------------------

Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1    20     27.64      0.09055
2    30     44.43      0.03341
3    40     50.86      0.09675
4    50     53.18      0.31646


Forecast of series:

garchfit_ged.fcst = ugarchforecast(garchfit_ged, n.ahead=12)
plot(garchfit_ged.fcst, which = 1)


Forecast with model including seq(112,1,by=-1) in the regressor instead:

Given your model, your forecast is reasonable whichever of the two ways you specify the external regressor (I think the two ways are equivalent; note that the true value of $$\mu$$ is defined relative to how you specify the external regressor). You just extrapolate the negative trend, having adjusted for the mean. The mean is high relative to the few preceding observations, so it looks like the forecast is high.
The question is, do you think the model for the conditional mean (that says the next observation will follow the negative trend, adjusted for the overall mean) is fine? If yes, then your forecast is also fine as it follows from the model. If no, consider some other model for the conditional mean, e.g. that the next observation follows the trend, adjusted for the current observation rather than the mean: mean.model=list(armaOrder=c(1,0), external.regressors = matrix(seq(1,112,1)). (In many cases, the simple model that you have may be hard to beat. But only you know the specifics of the phenomenon you are modelling, so maybe there is a better model.)
• @user553480, I was too hasty with interpreting the mean model. See my updated answer. The fact that your external regressor changes from $x$ to $-x$ should not change the forecast. I wonder what else is going on... Jun 15, 2020 at 14:02
• @user553480, $\mu$ has to be understood relative to the mean of the external regressor. It does not have to make much sense on its own. What has to make sense as the level of the series is $\mu+mxreg1\times t$ where $t$ is the trend. $3.8+0.122298\times (122-t+1)$ has to make sense as the level for time period $t$. Jun 15, 2020 at 15:01