Các mô hình GARCH trong 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
Thiên lệch nhìn trước: Dùng lợi suất tương lai để ước lượng biến động.

for: lặp qua thời điểm dự báo, dùng ugarchfit() để ước lượng và ugarchforecast() để dự báo biến động ugarchroll() trong gói rugarchDùng toàn bộ lợi suất sẵn có tại thời điểm dự báo

Chỉ dùng số quan sát lợi suất gần nhất cố định tại thời điểm dự báo

ugarchroll() là vòng lặp qua các thời điểm dự báo:Giảm chi phí tính toán bằng cách ước lượng lại mỗi $K$ quan sát

garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
Tham số cần chỉ định:
data: dữ liệu lợi suấtn.start: kích thước mẫu ước lượng ban đầurefit.window: cách thay đổi mẫu theo thời gian: "moving" hoặc "expandingrefit.every: tần suất tái ước lượng mô hìnhVới 4961 lợi suất EUR/USD (4961 quan sát), bắt đầu từ 1999-01-05 và dùng cửa sổ ước lượng trượt 2500 quan sát:

Phương thức coef() tạo danh sách hệ số ước lượng cho mỗi lần ước lượng
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
Với EUR/USD và n.start = 2500, dự báo đầu tiên là quan sát 2501, tức 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
Lưu ý:
preds$Mu: chuỗi giá trị trung bình dự báopreds$Sigma: chuỗi biến động dự báogarchvol <- 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
Đánh giá độ chính xác preds$Mu và preds$Sigma bằng cách so với preds$Realized
# Sai số dự báo cho trung bình
e <- preds$Realized - preds$Mu
mean(e ^ 2)
3.867998e-05
# Sai số dự báo cho trung bình
e <- preds$Realized - preds$Mu
# Sai số dự báo cho phương sai
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2)
6.974161e-09
GARCH chuẩn với phân phối Student t
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 với phân phối Student t lệch
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 chuẩn với phân phối Student t
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 với phân phối Student t lệch
gjrpreds <- as.data.frame(gjrgarchroll)
e <- gjrpreds$Realized - gjrpreds$Mu
d <- e ^ 2 - gjrpreds$Sigma ^ 2
mean(d ^ 2) # yields 6.965095e-09
Các mô hình GARCH trong R