问题描述
我将时间序列建模为 GARCH(1,1) 过程:
z_t 是 t 分布的。
在 R 中,我在 fGarch
-package via
model <- garchFit(formula = ~garch(1,1),cond.dist = "std",data=r)
这是正确的吗?
现在,我想了解这个输出来检查我的公式。
显然,model@fit$coefs
给我系数,model@fitted
给我拟合的 r_t。
但是我如何获得拟合的 sigma_t 和 z_t?
解决方法
它是一个 list
结构。可以用
str(model)
从结构上看,用$
或@
更容易提取
model@fit$series$z
[email protected]
,
我认为最好的方法是在泛型不可用时定义提取器函数,在泛型已经存在时定义方法。
前两个函数从拟合的对象中提取感兴趣的值。
get_sigma_t <- function(x,...){
[email protected]
}
get_z_t <- function(x,...){
x@fit$series$z
}
这里定义了 logLik
类对象的 "fGARCH"
方法。
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