Bir GARCH (1,1) - R'de ortak değişkenler içeren model takın


10

Zaman serisi modelleme ile ilgili basit ARIMA modelleri ve benzeri deneyimlerim var. Şimdi volatilite kümelenmesi sergileyen bazı verilerim var ve verilere bir GARCH (1,1) modeli yerleştirmeye başlamak istiyorum.

Bir veri serim var ve onu etkilediğini düşündüğüm birkaç değişken var. Yani temel regresyon terimleriyle, şuna benzer:

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

Ama bunu bir GARCH (1,1) - modeline nasıl uygulayacağım konusunda tam bir kayıptayım? Ben baktım rugarch-package ve fGarchiçinde -package Rama bir internette bulabilirsiniz örnekler dışında anlamlı bir şey yapmak mümkün olmamıştır.

Yanıtlar:


12

İşte rugarchpaketi kullanarak ve bazı sahte verilerle uygulama örneği . Fonksiyon ugarchfitortalama denkleminde dış regresörlerin dahil (kullanımına dikkat olanak external.regressorsde fit.specaşağıdaki kodu).

yt=λ0+λ1xt,1+λ2xt,2+εt,εt=σtZt,σt2=ω+αεt-12+βσt-12,
xt,1xt,2tZt

Örnekte kullanılan parametre değerleri aşağıdaki gibidir.

## 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

resim açıklamasını buraya girin

## 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))

Bir uyum ugarchfitaşağıdaki gibi yapılır.

## 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)

Parametre tahminleri

## 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

Ve karşılık gelen gerçek değerler

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

Aşağıdaki şekilde% 95 güven aralıkları ve gerçek değerler içeren bir parametre tahminleri gösterilmektedir. RBu sağlanır üretmek için kullanılan kod altındadır.

resim açıklamasını buraya girin

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)

parametreleri nasıl tahmin ettiniz (lambda, omega, alfa, beta) ??
chs

1
@chs Parametre tahminleri ugarchfitfonksiyonla elde edildi .
QuantIbex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.