ติดตั้ง GARCH (1,1) - รุ่นที่มี covariates ใน R


10

ฉันมีประสบการณ์เกี่ยวกับการสร้างแบบจำลองอนุกรมเวลาในรูปแบบของ ARIMA แบบง่าย ๆ เป็นต้น ตอนนี้ฉันมีข้อมูลบางส่วนที่แสดงการจัดกลุ่มความผันผวนและฉันอยากจะลองเริ่มต้นด้วยการปรับโมเดล GARCH (1,1) ให้พอดีกับข้อมูล

ฉันมีชุดข้อมูลและตัวแปรหลายอย่างที่ฉันคิดว่ามีอิทธิพลต่อมัน ดังนั้นในแง่การถดถอยพื้นฐานดูเหมือนว่า:

yt=α+β1xt1+β2xt2+ϵt.

แต่ฉันกำลังสูญเสียอย่างสมบูรณ์ในวิธีการนำสิ่งนี้ไปใช้ในแบบจำลอง GARCH (1,1)? ฉันดูที่rugarch- แพ็คเกจและfGarch- แพ็คเกจRแต่ฉันไม่สามารถทำอะไรที่มีความหมายนอกเหนือจากตัวอย่างที่พบได้บนอินเทอร์เน็ต

คำตอบ:


12

นี่คือตัวอย่างของการใช้งานโดยใช้rugarchแพคเกจและข้อมูลปลอมบางอย่าง ฟังก์ชั่นugarchfitอนุญาตให้มีการรวมของ regressors ภายนอกในสมการเฉลี่ย (หมายเหตุการใช้external.regressorsในfit.specในรหัสด้านล่าง)

yt=λ0+λ1xt,1+λ2xt,2+ϵt,ϵt=σtZt,σt2=ω+αϵt12+βσt12,
xt,1xt,2tZt

ค่าพารามิเตอร์ที่ใช้ในตัวอย่างมีดังนี้

## Model parameters
nb.period  <- 1000
omega      <- 0.00001
alpha      <- 0.12
beta       <- 0.87
lambda     <- c(0.001, 0.4, 0.2)

xt,1xt,2ytR

ป้อนคำอธิบายรูปภาพที่นี่

## Dependencies
library(rugarch)

## Generate some covariates
set.seed(234)
ext.reg.1 <- 0.01 * (sin(2*pi*(1:nb.period)/nb.period))/2 + rnorm(nb.period, 0, 0.0001)
ext.reg.2 <- 0.05 * (sin(6*pi*(1:nb.period)/nb.period))/2 + rnorm(nb.period, 0, 0.001)
ext.reg   <- cbind(ext.reg.1, ext.reg.2)

## Generate some GARCH innovations
sim.spec    <- ugarchspec(variance.model     = list(model = "sGARCH", garchOrder = c(1,1)), 
                          mean.model         = list(armaOrder = c(0,0), include.mean = FALSE),
                          distribution.model = "norm", 
                          fixed.pars         = list(omega = omega, alpha1 = alpha, beta1 = beta))
path.sgarch <- ugarchpath(sim.spec, n.sim = nb.period, n.start = 1)
epsilon     <- as.vector(fitted(path.sgarch))

## Create the time series
y <- lambda[1] + lambda[2] * ext.reg[, 1] + lambda[3] * ext.reg[, 2] + epsilon

## Data visualization
par(mfrow = c(3,1))
plot(ext.reg[, 1], type = "l", xlab = "Time", ylab = "Covariate 1")
plot(ext.reg[, 2], type = "l", xlab = "Time", ylab = "Covariate 2")
plot(y, type = "h", xlab = "Time")
par(mfrow = c(1,1))

ความฟิตนั้นทำได้ugarchfitดังนี้

## Fit
fit.spec <- ugarchspec(variance.model     = list(model = "sGARCH",
                                                 garchOrder = c(1, 1)), 
                       mean.model         = list(armaOrder = c(0, 0),
                                                 include.mean = TRUE,
                                                 external.regressors = ext.reg), 
                       distribution.model = "norm")
fit      <- ugarchfit(data = y, spec = fit.spec)

การประมาณพารามิเตอร์คือ

## Results review
fit.val     <- coef(fit)
fit.sd      <- diag(vcov(fit))
true.val    <- c(lambda, omega, alpha, beta)
fit.conf.lb <- fit.val + qnorm(0.025) * fit.sd
fit.conf.ub <- fit.val + qnorm(0.975) * fit.sd
> print(fit.val)
#     mu       mxreg1       mxreg2        omega       alpha1        beta1 
#1.724885e-03 3.942020e-01 7.342743e-02 1.451739e-05 1.022208e-01 8.769060e-01 
> print(fit.sd)
#[1] 4.635344e-07 3.255819e-02 1.504019e-03 1.195897e-10 8.312088e-04 3.375684e-04

และคุณค่าที่แท้จริงที่สอดคล้องกันคือ

> print(true.val)
#[1] 0.00100 0.40000 0.20000 0.00001 0.12000 0.87000

รูปต่อไปนี้แสดงการประมาณพารามิเตอร์ที่มีช่วงความมั่นใจ 95% และค่าจริง Rรหัสใช้ในการสร้างมันมีให้อยู่ด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

plot(c(lambda, omega, alpha, beta), pch = 1, col = "red",
     ylim = range(c(fit.conf.lb, fit.conf.ub, true.val)),
     xlab = "", ylab = "", axes = FALSE)
box(); axis(1, at = 1:length(fit.val), labels = names(fit.val)); axis(2)
points(coef(fit), col = "blue", pch = 4)
for (i in 1:length(fit.val)) {
    lines(c(i,i), c(fit.conf.lb[i], fit.conf.ub[i]))
}
legend( "topleft", legend = c("true value", "estimate", "confidence interval"),
        col = c("red", "blue", 1), pch = c(1, 4, NA), lty = c(NA, NA, 1), inset = 0.01)

คุณประมาณค่าพารามิเตอร์อย่างไร (lambda, omega, alpha, beta)
chs

1
@chs ได้รับการประมาณการพารามิเตอร์ด้วยugarchfitฟังก์ชั่น
QuantIbex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.