Rủi ro mô hình là rủi ro dùng sai mô hình

Các mô hình GARCH trong R

Kris Boudt

Professor of finance and econometrics

Nguồn rủi ro mô hình và giải pháp

Nguồn gốc:

  • lựa chọn mô hình
  • giá trị khởi tạo trong tối ưu hóa
  • ngoại lệ trong chuỗi lợi nhuận

Giải pháp: Tiếp cận vững (robust)

  • trung bình hóa mô hình: lấy trung bình dự báo từ nhiều mô hình
  • thử nhiều giá trị khởi tạo và chọn giá trị cho khả năng hợp lý (likelihood) cao nhất
  • làm sạch dữ liệu
Các mô hình GARCH trong R

Trung bình hóa mô hình

variance.models <- c("sGARCH", "gjrGARCH")
distribution.models <- c("norm", "std", "sstd")
c <- 1
for (var.model in variance.models) {
    for (dist.model in distribution.models) {
        garchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
         variance.model = list(model = var.model), distribution.model = dist.model)
        garchfit <- ugarchfit(data = msftret, spec = garchspec)
        if (c==1) { msigma <- sigma(garchfit)
        } else { msigma <- merge(msigma, sigma(garchfit))} 
        c <- c + 1 }
}
Các mô hình GARCH trong R

Các mô hình GARCH trong R

Dự báo biến động trung bình

avesigma <- xts(rowMeans(msigma), order.by = time(msigma))

Định nghĩa beta

Các mô hình GARCH trong R

Độ vững với giá trị khởi tạo

coef(garchfit)
          mu        omega       alpha1        beta1         skew        shape 
5.669200e-04 6.281258e-07 7.462984e-02 9.223701e-01 9.436331e-01 6.318621e+00 
  • Các ước lượng này đến từ tối ưu hóa hàm hợp lý phức tạp
  • Tối ưu hóa số và lặp: cải thiện từng bước, nhạy với giá trị khởi tạo
  • rugarch có cách mặc định để lấy giá trị khởi tạo hợp lý
  • Có thể tự đặt giá trị khởi tạo bằng phương thức setstart() trên đặc tả GARCH ugarchspec()
Các mô hình GARCH trong R

Ước lượng với giá trị khởi tạo mặc định

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "sstd")

garchfit <- ugarchfit(data = sp500ret, spec = garchspec)
coef(garchfit)
          mu        omega       alpha1        beta1         skew        shape 
5.669200e-04 6.281258e-07 7.462984e-02 9.223701e-01 9.436331e-01 6.318621e+00 
likelihood(garchfit)
24280.33
Các mô hình GARCH trong R

Ước lượng với giá trị khởi tạo tùy chỉnh

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
  variance.model = list(model = "sGARCH"), distribution.model = "sstd")
setstart(garchspec) <- list(alpha1 = 0.05, beta1 = 0.9, shape = 8)
garchfit <- ugarchfit(data = sp500ret, spec = garchspec)
coef(garchfit)
          mu        omega       alpha1        beta1         skew        shape 
5.638002e-04 6.303949e-07 7.466503e-02 9.224117e-01 9.438978e-01 6.309185e+00
likelihood(garchfit) # trả về 24280.33
Các mô hình GARCH trong R

Làm sạch dữ liệu

  • Tránh ngoại lệ làm sai lệch dự báo biến động
  • Cách làm: winsorization. Giảm biên độ lợi nhuận về mức chấp nhận được bằng Return.clean() trong gói PerformanceAnalytics với method = "boudt":
# Làm sạch chuỗi lợi nhuận
library(PerformanceAnalytics)
clmsftret <- Return.clean(msftret, method = "boudt")
# Vẽ chồng lên nhau
plotret <- plot(msftret, col = "red")
plotret <- addSeries(clmsftret, col = "blue", on = 1)
Các mô hình GARCH trong R

Định nghĩa beta

Các mô hình GARCH trong R

Ảnh hưởng của làm sạch đến dự báo biến động

Dự báo biến động bằng lợi nhuận Microsoft thô và đã làm sạch

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
     variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
garchfit <- ugarchfit(data = msftret, spec = garchspec)
clgarchfit <- ugarchfit(data = clmsftret, spec = garchspec)

So sánh trên đồ thị chuỗi thời gian

plotvol <- plot(abs(msftret), col = "gray")
plotvol <- addSeries(sigma(garchfit), col = "red", on = 1)
plotvol <- addSeries(sigma(clgarchfit), col = "blue", on = 1)
plotvol
Các mô hình GARCH trong R

Định nghĩa beta

Các mô hình GARCH trong R

Hãy vững vàng: đúng xấp xỉ vẫn hơn sai chính xác

Các mô hình GARCH trong R

Preparing Video For Download...