R Ошибка памяти Windows и возможное улучшение кода

Я пытаюсь расширить модель 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 = ""))
}

r xts
person rlh2    schedule 25.10.2011    source источник
comment
Просто чтобы убедиться, что память — это единственная проблема, будет ли нормально работать ваш код, если вы уменьшите количество параметров ниже 6000? Если он заработает, сколько параметров вы сможете подобрать, прежде чем возникнут проблемы?   -  person Richie Cotton    schedule 25.10.2011
comment
Трудно понять, где находится отсечка, но цикл будет работать нормально, если вы урежете внутренние итерации. Итак, если я изменю итерации внутреннего цикла с 1: 6000 на 5990: 6000, он будет работать нормально.   -  person rlh2    schedule 25.10.2011


Ответы (1)


При смене типов данных с xts на числовые проблема ушла и резко увеличилась скорость обработки. (кажется очевидным задним числом)

person rlh2    schedule 01.11.2011