R'de GARCH Modelleri
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
İleriye bakış yanlılığı: Gelecekteki getiriler oynaklık tahmininde kullanılır.

for döngüsü yazın: Tahmin zamanlarında yineleyin; ugarchfit() ile modeli tahmin edin ve ugarchforecast() ile oynaklık tahmini yapın rugarch paketindeki yerleşik ugarchroll() fonksiyonuTahmin anında mevcut tüm getirileri kullanın

Tahmin anında mevcut olan en son getiri gözlemlerinden sabit bir sayı kullanın

ugarchroll() için hesaplama maliyeti, tahmin zamanları boyunca döngüdür:Modeli her $K$ gözlemde bir tahmin ederek hesaplama maliyetini azaltın

garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
Belirtilecek argümanlar:
data : kullanılacak getiri verisin.start: ilk tahmin örneğinin boyuturefit.window: örneğin zamanla nasıl değişeceği: "moving" veya "expandingrefit.every: modelin ne sıklıkta yeniden tahmin edileceği4961 gözleme sahip 4961 EUR/USD getirisi için, 1999-01-05’te başlayıp 2500 gözlemden oluşan hareketli bir tahmin penceresi kullanarak:

coef() yöntemi, her tahmin için tahmin edilen katsayıların bir listesini üretir
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
n.start = 2500 ile EUR/USD getirileri için ilk tahmin, 2501. gözlem içindir; yani 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: tahmin edilen ortalama serisipreds$Sigma: tahmin edilen oynaklık serisigarchvol <- 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
preds$Mu ve preds$Sigma doğruluğunu preds$Realized ile karşılaştırarak değerlendirin
# Ortalama için tahmin hatası
e <- preds$Realized - preds$Mu
mean(e ^ 2)
3.867998e-05
# Ortalama için tahmin hatası
e <- preds$Realized - preds$Mu
# Varyans için tahmin hatası
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2)
6.974161e-09
Student t dağılımlı standart GARCH
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)
Çarpık student t dağılımlı GJR GARCH
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)
Student t dağılımlı standart GARCH
preds <- as.data.frame(garchroll)
e <- preds$Realized - preds$Mu
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2) # 6.974161e-09 döndürür
Çarpık student t dağılımlı GJR GARCH
gjrpreds <- as.data.frame(gjrgarchroll)
e <- gjrpreds$Realized - gjrpreds$Mu
d <- e ^ 2 - gjrpreds$Sigma ^ 2
mean(d ^ 2) # 6.965095e-09 döndürür
R'de GARCH Modelleri