这是我第一次在这里发表文章,如果在格式上出错,我深表歉意。
我一直在从事必须使用ARCH / GARCH模型的项目,但是每当我尝试使用以下代码(老师给我们的代码)时,我都收到一条错误消息。 这是代码:
objf.garch <- function(vartheta,
eps,n,sig2init,petit=sqrt(.Machine$double.eps),r0=10){
omega <- vartheta[1]
alpha <- vartheta[2]
beta <- vartheta[3]
sig2<-rep(0,n)
sig2[1]<-sig2init
for(t in 2:n){
sig2[t]<-omega+alpha*eps[t-1]^2+beta*sig2[t-1]
}
qml <- mean(eps[(r0+1):n]^2/sig2[(r0+1):n]+log(sig2[(r0+1):n]))
qml }
#
VarAsymp<- function(omega,alpha,beta,eps,sig2init,petit,r0=10){
n <- length(eps)
dersigma2<-matrix(0,nrow=3,ncol=n)
sig2<-rep(0,n)
sig2[1]<-sig2init
for(t in 2:n){
vec<-c(1,eps[t-1]^2,sig2[t-1])
sig2[t]<-omega+beta*sig2[t-1]+alpha*eps[t-1]^2
dersigma2[1:3,t]<-vec/sig2[t]+beta*dersigma2[1:3,(t-1)]
}
eta <- eps[(r0+1):n]/sqrt(sig2)[(r0+1):n]
eta <- eta/sd(eta)
J<-dersigma2[1:3,(r0+1):n]%*%t(dersigma2[1:3,(r0+1):n])/(n-r0)
kappa4<-mean(eta^4)
{if(kappa(J)<1/petit) inv<-solve(J) else inv<-matrix(0,nrow=3,ncol=3)}
var<-(kappa4-1)*inv
list(var=var,residus=eta)
}
estimGARCH<-
function(omega,alpha,beta,eps,petit=sqrt(.Machine$double.eps),r0=10)
{
valinit<-c(omega,alpha,beta)
n <- length(eps)
sig2init<-var(eps[1:min(n,5)])
res <- nlminb(valinit,objf.garch,lower=c(petit,0,0),
upper=c(Inf,Inf,1), eps=eps,n=n,sig2init=sig2init)
omega <- res$par[1]
alpha<- res$par[2]
beta <- res$par[3]
var<-VarAsymp(omega,alpha,beta,eps,sig2init,petit=sqrt(.Machine$double.eps),r0=10)
list(coef=c(omega,alpha,beta),residus=var$residus,var=var$var)
}
运行定义这些功能的代码不会引发任何错误,但是当我尝试使用它们来进行估算时
### Estimation ###
par(mfrow=c(1,1))
omega.init<- 0.01
alpha.init<-0.01
beta.init<- 0.01
petit=sqrt(.Machine$double.eps)
fitgarch<-estimGARCH(omega.init,alpha.init,beta.init,eps,petit,r0=10)
fitgarch
par<-fitgarch$coef
res<-fitgarch$residus
然后我同时收到 par 和 res 的消息:
Error in fitgarch$coef : object of type 'closure' is not subsettable
Error in fitgarch$residus : object of type 'closure' is not subsettable
我试图更改函数的名称,以为它与R中已用于内置函数的名称有关,但没有用。 我们非常欢迎任何帮助或建议。 谢谢。