Я использую библиотеку rugarch и пытаюсь найти "вручную" те же выходы, что и библиотека, чтобы убедиться, что я все правильно понимаю. Я хотел бы, чтобы мой перехват дисперсии (омега) был равен безусловной дисперсии моего набора данных. Поэтому я устанавливаю variance.targeting = TRUE в функции ugarchspec.
Я мог бы проверить, что моя безусловная ковариация почти равна: omega/(1-alpha1-beta1). Однако я не могу найти «вручную» тот же временной ряд условной дисперсии с помощью уравнения GARCH: sigma(t)² = omega + альфа1 * X (t-1) ^ 2 + бета1 * сигма (t-1)²
Вот воспроизводимый пример, иллюстрирующий мою проблему:
data(sp500ret)
sp500ret <- scale(sp500ret, scale = FALSE, center = TRUE) # de-mean
model <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), variance.targeting = TRUE),
mean.model = list(armaOrder = c(0, 0), include.mean = FALSE), distribution.model = "norm")
fit <- ugarchfit(model, sp500ret)
omega <- fit@fit$coef[3]
alpha <- fit@fit$coef[2]
beta <- fit@fit$coef[1]
var(sp500ret)
# 0.0001426482
omega / (1 - alpha - beta)
# 0.0001426587
var_rugarch <- fit@fit$var
var_manual <- c()
var_manual[1] <- var_rugarch[1]
for (t in 2:5523) {
var_manual[t] <- omega + alpha * sp500ret[t-1]^2 + beta * var_manual[t-1]
}
which(var_rugarch == var_manual)
# [1] 1
Однако, когда variance.targeting = FALSE, последняя строка указывает, что var_rugarch = var_manual. Почему эти две переменные не совпадают, если variance.targeting = TRUE?