2011-10-25 5 views
2

rugarch 패키지를 사용하여 확장 기준으로 eGARCH 모델을 적용하려고합니다. 나는 6 컬럼의 데이터를 가지고 있으며 각 컬럼에 대해 ~ 6000 개의 파라미터를 다시 쓰려고합니다. 다음 코드를 실행하면 두 번째 열의 창에 오류가 표시됩니다. 이는 첫 번째 내부 루프를 성공적으로 완료하는 중입니다. 루프 내에서 gc()를 사용하여 피팅 된 객체를 제거하면 메모리 오류가 발생하는 데 걸리는 시간이 길어졌습니다. 또한,이 과정은 일반적으로 매우 오랜 시간이 걸리며, 어쨌든 그것을 향상시킬 수 있을지 궁금합니다. 패키지 자체는 낮은 수준의 C로 필터링되는 대부분의 필터를 사용하여 매우 효율적으로 작성된 것 같습니다. 30-60 일마다 모델을 다시 작성할 수는 있지만 실제로 이렇게하는 것이 좋습니다. 나는 32 비트 윈도우에서 R 2.13.2를 실행 중이다. 미리 감사드립니다. 편집 : 오류 : ""0x6c732a07 "의 명령이"0x00000008 "의 메모리를 참조했습니다. 메모리를"읽을 수 없습니다 "".R Windows 메모리 오류 및 가능한 코드 개선

library(rugarch) 
library(xts) 
e.spec <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1,1)), mean.model = list(armaOrder = c(1,0), include.mean = TRUE)) 
dly.xts <- xts(matrix(rnorm(8000*6), nrow = 8000, ncol = 6), as.Date(1:8000)) 
tst.xts <- tail(dly.xts, 6000) 
names(tst.xts) <- 1:6 
tst.idx <- index(tst.xts) 
dly.idx <- index(dly.xts) 
for(j in 1:ncol(tst.xts)){ 
    sig.est <- rep(NA, nrow(tst.xts)) 
    for(i in 1:nrow(tst.xts)){ 
     print(i) 
     dat <- dly.xts[dly.idx <= tst.idx[i], j] 
     fit <- try(ugarchfit(e.spec, data = dat[-nrow(dat), ], solver = "solnp", solver.control = list(trace = FALSE))) 
     if(class(fit) != "try-error"){ 
      spec.new <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1,1)), mean.model = list(armaOrder = c(1,0), include.mean = TRUE), fixed.pars = coef(fit)) 
      sig.est[i] <- as.numeric(tail(sigma(ugarchfilter(spec = spec.new, data = dat)),1)) 
      rm(spec.new) 
      rm(fit) 
      gc() 
     }else{ 
      sig.est[i] <- NA 
     } 
    } 
    save(sig.est, file = paste("egarch", names(tst.xts)[j], ".RData", sep = "")) 
} 
+0

메모리가 유일한 문제인지 확인하기 위해 6000 미만의 매개 변수 수를 줄이면 코드가 제대로 실행됩니까? 실행되는 경우 문제가 발생하기 전에 몇 개의 매개 변수를 적용 할 수 있습니까? –

+0

컷오프가 어디 있는지 알기가 힘들지 만 내부 반복을 자르면 루프가 잘 실행됩니다. 따라서 내부 루프 반복을 1 : 6000에서 5990 : 6000으로 변경하면 정상적으로 실행됩니다. – rlh2

답변

1

데이터 유형을 xts에서 숫자로 변경하면 문제가 사라지고 처리 속도가 크게 높아졌습니다. (뒤늦은 지 분명 해 보인다)