R中的错误:“ closure”类型的对象不可子集化

时间:2019-12-30 15:36:34

标签: r object closures

这是我第一次在这里发表文章,如果在格式上出错,我深表歉意。

我一直在从事必须使用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中已用于内置函数的名称有关,但没有用。 我们非常欢迎任何帮助或建议。 谢谢。

0 个答案:

没有答案