Я пытаюсь приспособить модель eGARCH на расширенной основе, используя пакет rugarch.У меня есть 6 столбцов данных, и я пытаюсь обновить параметры ~ 6000 для каждого столбца.Если я запускаю следующий код, я получаю сообщение об ошибке в окнах во 2-м столбце (это означает, что я успешно прошел весь первый внутренний цикл).Используя gc () внутри цикла и удаляя подобранный объект, я увеличил время, необходимое для устранения ошибки памяти.Кроме того, этот процесс в целом занимает очень много времени, и мне интересно, есть ли способ улучшить его с моей стороны.Кажется, что сам пакет написан довольно эффективно, при этом большая часть фильтрации выполняется на низком уровне C. Я мог бы обновлять модель каждые 30-60 дней, но я действительно предпочел бы сделать это таким образом.Я использую R 2.13.2 на 32-битных окнах.Заранее спасибо.Редактировать: Ошибка: «Инструкция в« 0x6c732a07 »ссылается на память в« 0x00000008 ». Память не может быть« прочитана ».
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 = ""))
}