Мне нужно запустить загрузчик временного ряда с нестандартной зависимостью. Итак, чтобы сделать это, мне нужно создать функцию, которая имитирует временные ряды, делая корректировку времени по времени.
testing<-function(){
sampleData<-as.zoo(data.frame(index=1:1000,vol=(rnorm(1000))^2,x=NA))
sampleData[,"x"]<-sampleData[,"vol"]+rnorm(1000) #treat this is completely exognenous and unknown in connection to vol
sampleData<-cbind(sampleData,mean=rollmean(sampleData[,"vol"],k=3,align="right"))
sampleData<-cbind(sampleData,vol1=lag(sampleData[,"vol"],k=-1),x1=lag(sampleData[,"x"],k=-1),mean1=lag(sampleData[,"mean"],k=-1))
#get estimate
mod<-lm(vol~vol1+x1+mean1,data=sampleData)
res<-mod$residuals
for(i in 5:1000){
#recursively estimate
sampleData[i,"vol"]<-as.numeric(predict(mod,newdata=data.frame(sampleData[i-1,])))+res[i-3]
#now must update other paramaters
#first our rolled average
sampleData[i,"mean"]<-mean(sampleData[(i-3):i,"vol"])
#reupdate our lagged variables
sampleData[i,"vol1"]<-sampleData[i-1,"vol"]
sampleData[i,"mean1"]<-sampleData[i-1,"mean"]
}
lm(vol~vol1+x1+mean1,data=sampleData)
}
Когда я запускаю этот код и измеряю время выполнения, я получаю
system.time(testing())
user system elapsed
2.711 0.201 2.915
Это небольшая проблема для меня, так как я буду интегрировать этот код для создания начальной загрузки. Это означает, что любое время, потраченное здесь, умножается примерно на 100 для каждого шага. И я обновляю это несколько тысяч раз. Это означает, что один запуск займет от нескольких часов (до нескольких дней).
Есть ли способ ускорить этот код?
С уважением,
Мэтью
sapply
не поможет. Вам нужно профилировать свой код, чтобы найти узкое место (см.?Rprof
). Переход с зоопарка на xts экономит немного времени, так как немного времени тратится на поднабор. Вы также можете улучшить производительность, избегая накладных расходов наpredict.lm
, выполняя умножение вручную. - person Joshua Ulrich   schedule 21.08.2012predict.lm
. - person Joshua Ulrich   schedule 21.08.2012predict
— это универсальный метод, который отправляет методpredict.lm
. - person Joshua Ulrich   schedule 21.08.2012