我正在使用库rugarch,我尝试“手动”找到与库相同的输出,以检查我是否正确理解了所有内容。 我希望我的方差截距(omega)等于我的数据集的无条件方差。因此,我在ugarchspec函数中设置了variance.targeting = TRUE。
我可以检查我的无条件协方差几乎等于: 欧米加/(1-α1-β1) 但是,我无法使用GARCH方程“手动”找到相同的条件方差时间序列: sigma(t)²=欧米茄+ alpha1 * X(t-1)^ 2 + beta1 * sigma(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时,为什么这两个变量不相同?
答案 0 :(得分:0)
好吧,我犯了一个错误。 由于某种原因,rugarch改变了fit @ fit $ coef中参数的索引,并且Microsoft Visual Studio没有刷新变量的预览。