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 に答える