R

时间:2016-05-21 08:52:25

标签: r

    Calc<-function(th,t){
th[1]->mean
th[2]->beta.0
  th[3]->beta.1
  th[4]->beta.2
  th[5]->sigma.0
  th[6]->lambda
  returns<-returnzzzz$ReturnontheSP500Index
  r<-0.000137
  n<-length(returns)
  z<-rnorm(n,0,1)#sigma is variance
  sigma.sqs<-vector(length=n)
  sigma.sqs[1]<-sigma.0**2

  for(i in c(1:(n))){
    returns[i+1]<-( r+lambda*sqrt(beta.0+beta.1*sigma.sqs[i]+beta.2*sigma.sqs[i]*z**2)
    -0.5*(beta.0+beta.1*sigma.sqs[i]+beta.2*sigma.sqs[i]*z**2)+sqrt(beta.0+beta.1*sigma.sqs[i]+beta.2*sigma.sqs[i]*z**2)*z
  )

}
return(list(et=returns, ht=sigma.sqs))
}


GarchLogL<-function(th,t)
{

  res<-Calc(th,t)
  sigma.sqs<-res$ht
  returns<-res$et

  return (-sum(dnorm(returns[-1],mean=th[1],sd=sqrt(sigma.sqs[-1]),log=TRUE)))
}

 GarchLogLSimpl<-function(th,y){GarchLogL(c(0,th),y)}

  fit2<-nlm(GarchLogLSimpl,
            p=rep(1,5),
            hessian=TRUE,
            data<-returnzzzz,
            iterlim=500)
  sqrt(diag(solve(fit2$hessian)))

嗨,这是我第一次来这里,我希望我做的一切都是对的。在这段代码中我想实现N-GARCH的最大似然函数,我从R中得到这个错误:有50个或更多警告(使用warnings()查看前50个)并且这一个在solve.default中出错(fit2 $ hessian):   Lapack例程dgesv:系统完全是单数:U [1,1] = 0.

不幸的是,我不是一个非常优秀的程序员,我只是根据我的需要更改了GARCH模型代码。我的返回数据是

#            [,1]
#1996-01-02  0.007793
#1996-01-03  0.000950
#1996-01-04 -0.005826
#1996-01-05 -0.001587
#1996-01-08  0.002821
#1996-01-09 -0.014568
像这样,作为一个xts。我希望我提供了足够的信息,如果不是,请发表评论。

我真的很感谢你的帮助!!

我得到了一个可以解决它的新代码,但是我在这个中遇到了另一个错误:

Ngarch<-function(rtn){

mu=mean(rtn)
par=c(mu,0.01,0.8,0.01,0.7) #Startwerte

low=c(-10,0,0,0,0)
upp=c(10,1,1,0.4,2)
mm=optim(par,glkn,method="Nelder-Mead",hessian=T)
#mm=optim(par,glkn,method="L-BFGS-B",hessian=T,lower=low,upper=upp)
par=mm$par
H=mm$hessian
Hi = solve(H)
cat(" ","\n")
cat("Estimation results of NGARCH(1,1) model:","\n")
cat("estimates: ",par,"\n")
se=sqrt(diag(Hi))
cat("std.errors: ",se,"\n")
tra=par/se
cat("t-ratio: ",tra,"\n")
# compute the volatility series and residuals
ht=var(rtn)
T=length(rtn)
if(T > 40)ht=var(rtn[1:40])
at=rtn-par[1]
for (i in 2:T){
  sig2t=par[2]+par[3]*ht[i-1]+par[4]*(at[i-1]-par[5]*sqrt(ht[i-1]))^2
  ht=c(ht,sig2t)
}
sigma.t=sqrt(ht)
Ngarch <- list(residuals=at,volatility=sigma.t)
}

glkn <- function(par){
  rtn=read.table("tmp.txt")[,1]
  glkn=0
  ht=var(rtn)
  T=length(rtn)
  if(T > 40)ht=var(rtn[1:40])
  at=rtn[1]-par[1]
  for (i in 2:T){
    ept=rtn[i]-par[1]
    at=c(at,ept)
    sig2t=par[2]+par[3]*ht[i-1]+par[4]*ht[i-1]*(at[i-1]/sqrt(ht[i-1])-par[5])^2
    ht=c(ht,sig2t)
    glkn=glkn + 0.5*(log(sig2t) + ept^2/sig2t)
  }
  glkn
}

我得到的错误是optim中的错误(par,glkn,method =“Nelder-Mead”,hessian = T):   非有限的有限差分值[2]。

再一次这些警告,我怎么能摆脱它们呢?

感谢您的帮助!

0 个答案:

没有答案