在Data.Table中更新Arima

时间:2018-02-13 05:11:48

标签: r data.table forecasting arima

我的问题的一个非常小的版本是这样的:

我有很多时间序列

library(data.table)
library(forecast)
library(tidyverse)


 x <-arima.sim(list(order = c(1,1,0), ar = 0.7), n = 100)
 y <- arima.sim(list(order = c(1,1,0), ar = 0.1), n = 100)

data <- data.frame(x,y) %>% gather(var,value) # place into a data.frame

我已使用auto.arima和data.table(实际上我有400+ ts)使用精彩的预测包对这些进行建模

models <- setDT(data)[,list(model=list(auto.arima(value))), by = var]

哪个有效,我的问题是如何为新数据更新Arima模型?

我一直试图按照

的方式做点什么
models <-setDT(data)[,list(model=list(Arima(value, model = models$model))), by = var]

但我没有运气!

1 个答案:

答案 0 :(得分:1)

我有一个解决方案 - 但是很想知道是否有更多R / data.table方法可以做到这一点?

注意:当我正在努力解决方案时,我将数据更改为模拟ARIMA流程 - 以确保模型正确更新。

<强>解决方案:

x <-arima.sim(list(order = c(1,1,0), ar = 0.7), n = 100)
y <- arima.sim(list(order = c(1,1,0), ar = 0.1), n = 100)


data <- data.frame(x,y) %>% gather(var,value) # place into a data.frame

models <- setDT(data)[,list(model=list(auto.arima(value))), by = var]


x <-arima.sim(list(order = c(1,1,0), ar = 0.7), n = 200)
y <- arima.sim(list(order = c(1,1,0), ar = 0.1), n = 200)


data_updated <- data.frame(x,y) %>% gather(var,value) # place updated data into data.frame

data_updated <- setDT(data_updated)[, list(dat=list(value)), by = var] # turn this into lists

#Use a loop to update the models

for(i in unique(models$var)){

  models[var == paste0(i)][[1,2]] <- Arima(data_updated[var == paste0(i)][[1,2]] ,model = models[var == paste0(i)][[1,2]])

}