我将时间序列建模为GARCH(1,1)-process:
和z_t是t分布的。
在R中,我通过以下方式在fGarch
-package中执行此操作
model <- garchFit(formula = ~garch(1,1), cond.dist = "std", data=r)
这是正确的吗?
现在,我想了解一下这个函数的输出,以检查我的公式。
显然,model@fit$coefs
给了我系数,model@fitted
给了我拟合的r_t。
但是怎样才能得到合适的sigma_t和z_t呢?
发布于 2021-03-09 19:05:37
我认为最好的方法是在泛型不可用时定义提取器函数,在泛型已经存在时定义方法。
前两个函数从拟合的对象中提取感兴趣的值。
get_sigma_t <- function(x, ...){
x@sigma.t
}
get_z_t <- function(x, ...){
x@fit$series$z
}
这里为类"fGARCH"
的对象定义了一个logLik
方法。
logLik.fGARCH <- function(x, ...){
x@fit$value
}
现在使用函数,包括方法。数据来自help("garchFit")
中的第一个示例。
N <- 200
r <- as.vector(garchSim(garchSpec(rseed = 1985), n = N)[,1])
model <- garchFit(~ garch(1, 1), data = r, trace = FALSE)
get_sigma_t(model) # output not shown
get_z_t(model) # output not shown
logLik(model)
#LogLikelihood
# -861.9494
还要注意,coef
和fitted
方法是存在的,不需要model@fitted
或model@fit$coefs
,就像问题中所写的那样。
fitted(model) # much simpler
coef(model)
# mu omega alpha1 beta1
#3.541769e-05 1.081941e-06 8.885493e-02 8.120038e-01
发布于 2021-03-09 18:14:20
它是一个list
结构。可以通过以下命令找到结构:
str(model)
从结构上看,使用$
或@
更容易提取
model@fit$series$z
model@sigma.t
https://stackoverflow.com/questions/66552323
复制相似问题