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 = ""))
}
메모리가 유일한 문제인지 확인하기 위해 6000 미만의 매개 변수 수를 줄이면 코드가 제대로 실행됩니까? 실행되는 경우 문제가 발생하기 전에 몇 개의 매개 변수를 적용 할 수 있습니까? –
컷오프가 어디 있는지 알기가 힘들지 만 내부 반복을 자르면 루프가 잘 실행됩니다. 따라서 내부 루프 반복을 1 : 6000에서 5990 : 6000으로 변경하면 정상적으로 실행됩니다. – rlh2