Modele GARCH în R
Kris Boudt
Professor of finance and econometrics
garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)), variance.model = list(model = "sGARCH"), distribution.model = "norm") garchfit <- ugarchfit(data = sp500ret, spec = garchspec) garchforecast <- ugarchforecast(fitORspec = garchfit, n.ahead = 3) sigma(garchforecast)2017-12-29 T+1 0.005034754 T+2 0.005127582 T+3 0.005217770
head(sigma(garchfit), 3)
1989-01-04 0.01099465
1989-01-05 0.01129167
1989-01-06 0.01084294
tail(sigma(garchfit), 3)
2017-12-27 0.005051926
2017-12-28 0.004947569
2017-12-29 0.004862908
Bias de anticipare: Randamentele viitoare sunt utilizate pentru estimarea volatilității.

for: iterați peste momentele de predicție, utilizând ugarchfit() pentru estimarea modelului și ugarchforecast() pentru prognoza volatilitățiiugarchroll() din pachetul rugarchUtilizați toate randamentele disponibile la momentul predicției

Utilizați doar un număr fix dintre cele mai recente observații disponibile la momentul predicției

ugarchroll() constă în bucla peste momentele de predicție:Reduceți costul computațional estimând modelul la fiecare $K$ observații

garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
Argumente de specificat:
data : datele de randament utilizaten.start: dimensiunea eșantionului inițial de estimarerefit.window: cum se modifică eșantionul în timp: "moving" sau "expandingrefit.every: cât de des se re-estimează modelulPentru cele 4961 de randamente EUR/USD cu 4961 de observații, începând din 1999-01-05 și utilizând o fereastră mobilă de estimare de 2500 de observații:

Metoda coef() produce o listă cu coeficienții estimați pentru fiecare estimare
coef(garchroll)[[1]]
$index
"2008-12-08"
$coef
Estimate Std. Error t value Pr(>|t|)
mu -1.480000e-04 1.330915e-04 -1.11201737 0.2661307
ar1 -2.953484e-03 1.985344e-02 -0.14876432 0.8817396
omega 7.498928e-08 5.587618e-06 0.01342062 0.9892922
alpha1 2.805079e-02 6.401139e-02 0.43821564 0.6612300
beta1 9.709400e-01 6.080197e-02 15.96889122 0.0000000
shape 1.098068e+01 2.609293e+01 0.42082981 0.6738794
coef(garchroll)[[1]]$coef # 2008-12-08
Estimate Std. Error t value Pr(>|t|)
omega 7.498928e-08 5.587618e-06 0.01342062 0.9892922
alpha1 2.805079e-02 6.401139e-02 0.43821564 0.6612300
beta1 9.709400e-01 6.080197e-02 15.96889122 0.0000000
coef(garchroll)[[5]]$coef # 2016-11-28
Estimate Std. Error t value Pr(>|t|)
omega 8.982527e-08 2.639680e-05 0.003402885 9.972849e-01
alpha1 4.149787e-02 2.550381e-01 0.162712424 8.707449e-01
beta1 9.573885e-01 2.195782e-01 4.360125676 1.299878e-05
Pentru randamentele EUR/USD cu n.start = 2500, prima predicție vizează observația 2501, respectiv 2008-12-09:

preds <- as.data.frame(garchroll)
head(preds, 3)
Mu Sigma Skew Shape Shape(GIG) Realized
2008-12-09 -8.271288e-05 0.01196917 0 10.98068 0 0.0003864884
2008-12-10 -1.495786e-04 0.01179742 0 10.98068 0 -0.0066799754
2008-12-11 -1.287079e-04 0.01167929 0 10.98068 0 -0.0203099142
Notă:
preds$Mu: seria valorilor medii prezisepreds$Sigma: seria valorilor de volatilitate prezisegarchvol <- xts(preds$Sigma, order.by = as.Date(rownames(preds)))
plot(garchvol)

preds <- as.data.frame(garchroll)
head(preds)
Mu Sigma Skew Shape Shape(GIG) Realized
2008-12-09 -8.271288e-05 0.01196917 0 10.98068 0 0.0003864884
2008-12-10 -1.495786e-04 0.01179742 0 10.98068 0 -0.0066799754
2008-12-11 -1.287079e-04 0.01167929 0 10.98068 0 -0.0203099142
2008-12-12 -8.845214e-05 0.01199756 0 10.98068 0 -0.0041201588
2008-12-15 -1.362683e-04 0.01184438 0 10.98068 0 -0.0230532787
2008-12-16 -8.034966e-05 0.01228900 0 10.98068 0 -0.0105720492
Evaluați acuratețea preds$Mu și preds$Sigma prin comparație cu preds$Realized
# Prediction error for the mean
e <- preds$Realized - preds$Mu
mean(e ^ 2)
3.867998e-05
# Prediction error for the mean
e <- preds$Realized - preds$Mu
# Prediction error for the variance
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2)
6.974161e-09
GARCH standard cu distribuție t a lui Student
tgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "sGARCH"), distribution.model = "std")
garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
GJR GARCH cu distribuție t asimetrică a lui Student
gjrgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
gjrgarchroll <- ugarchroll(gjrgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
GARCH standard cu distribuție t a lui Student
preds <- as.data.frame(garchroll)
e <- preds$Realized - preds$Mu
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2) # yields 6.974161e-09
GJR GARCH cu distribuție t asimetrică a lui Student
gjrpreds <- as.data.frame(gjrgarchroll)
e <- gjrpreds$Realized - gjrpreds$Mu
d <- e ^ 2 - gjrpreds$Sigma ^ 2
mean(d ^ 2) # yields 6.965095e-09
Modele GARCH în R