2016-10-18 19 views
1

저는 GARCH (1,1) 모델을 직접 만들려고했습니다. 그러나 지금까지 사용해 왔던 솔버는 최적화 된 매개 변수를 반환하지 못했거나 최적화하는 데 너무 오랜 시간이 걸렸습니다 (아마도 수렴하지 않았을 것입니다). 지금까지 optim() (Nelder-Mead & BFGS), nlm()을 성공시키지 않았습니다. "rugarch"패키지에서도 실제로 사용되는 "solnp"옵티 마이저를 사용하여 코드를 포함 시켰습니다. 문제를 해결할 수있는 방법은 있지만 그렇게하지 않았습니까? 누군가 내가 실수를 저지르는 곳을 지적 할 수 있다면 정말로 감사 할 것입니다. 감사!GARCH (1,1)을 최대화하려고 할 때 Optim()이 너무 오래 걸리는 경우

library(tseries) 
library(zoo) 
AAPL <-get.hist.quote(instrument = "AAPL", 
       start = "2015-09-15", 
       end = "2016-09-14", 
       quote = "AdjClose", 
       retclass = "zoo", 
       quiet = TRUE) 

garch_likelihood <- function(asset,fixed=c(FALSE,FALSE,FALSE)) { 
      pars <- fixed 
      function(p) { 
        pars[!fixed] <- p 
        omega <- pars[1] 
        alpha <- pars[2] 
        beta <- pars[3] 
    #constructor function 
      # object must be a time series class 
      if (class(asset) !="zoo") 
      stop("asset must be a time series object!!") 
      # Calculating log returns 
      r <- log(asset)-log(lag(asset,-1)) 
      #calculating squared returns & variance 
      r2 <- r^2 
      variance.r <- var(r,na.rm = TRUE) 
      # Setting up the initial model 
      mod.pregarch <- cbind(r2,variance.r) 
      mod.pregarch[2:nrow(mod.pregarch),2] <- 0 

    # Using a loop to calculate the conditional variances 
    for (i in 2:nrow(mod.pregarch)) { 
    # pregarch model: var(t+1) = omega+alpha*r(t)^2+beta*var(t) 
    mod.pregarch[i,2] <- omega +alpha*mod.pregarch[i-1,1]+beta*mod.pregarch[i-1,2]} 
    pregarch <-mod.pregarch[,2] 
    sum(pregarch) 
    pregarch <- cbind(pregarch,rep(0,length(pregarch))) 
    #calculating log likelihoods 
    for (i in 1:nrow(pregarch)){ 
    pregarch[i,2] <- dnorm(r[i,1],mean = 0,sd = sqrt(pregarch[i,1]),log = TRUE) 
    } 
    ## Loglike.alternative <- -.5*log(2*pi)-.5*log(pregarch[i,1])-.5*(r2[i]/pregarch[[i,1]]) 
    sum_log.like <- sum(pregarch[,2]) 
      sum_log.like 
      } 
      } 
pars <- c(0.000005,0.10,0.85) #initial values 
garch11.ML <- garch_likelihood(AAPL) 
library(Rsolnp) 
optim_garch <- solnp(pars =pars,fun = garch11.ML) #Rsolnp solver package 

답변

0

매개 변수를 인쇄하는 기능을 요청할 때 모델을 다시 방문하는 것이 좋습니다.

garch_likelihood <- function(asset,fixed=c(FALSE,FALSE,FALSE)) { 
     pars <- fixed 
     function(p) { 
     print(p) 
...} 

매개 변수의 범위는 다음과 같습니다.

[1] 0.0000781018 0.0672768675 0.6338644923 
[1] 5.796055e-05 6.020388e-02 7.161618e-01 

나는, 다음의 호출도 Optim을 사용

optim_garch <- optim(par =pars ,fn = garch11.ML, control =list(fnscale = -1)) 

또한 다음과 같은 경고를() 얻을

warnings() 
1: In sqrt(pregarch[i, 1]) : NaNs produced 

당신이있는 경우에 나는이 모델에 익숙하지 않은,하지만 NaN 결과를 얻지 못하도록 매개 변수가 가까워지면 불이익을 줄 수있는 매개 변수 경계에 대한 아이디어. 나는 이것이 당신의 질문에 대답하지 않는다는 것을 안다. 그러나 당신의 코드를 최적화하는데 도움을 얻으려면 먼저 솔루션에 도달 할 수 있어야한다.