1

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

我有许多时间序列

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]

但是我没有运气!

4

1 回答 1

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]])

}
于 2018-02-15T11:10:41.357 回答