我的问题的一个非常小的版本是这样的:
我有很多时间序列
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]
但我没有运气!
答案 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]])
}