Можно ли обновить модель BSTS? - PullRequest
1 голос
/ 22 января 2020

Я работаю с данными временных рядов, которые обновляются ежедневно. Поэтому я подумал, что байесовский фреймворк идеально подойдет, потому что теоретически можно обновить модель по мере поступления новых данных. Таким образом, я перехожу к моделированию моих данных с пакетом bsts в R, что дает мне довольно многообещающие результаты. Теперь у меня есть два вопроса:

1 - Как я могу сохранить свою текущую модель и затем обновить ее новыми данными?

В качестве альтернативы,

2 - Возможно ли это извлечь распределение коэффициентов, чтобы я мог подключить в качестве предшествующего элемента новую модель на основе новых данных?

Вот минимальный пример:

library(bsts)
library(magrittr)

# Use data included in the bsts package for reproducible example

data(iclaims)
plot(initial.claims)

# Let's assume I only have the data until 2011

t0 <- window(initial.claims, end = "2011-01-01")
t0

# Model data
ss <- AddLocalLinearTrend(list(), t0$iclaimsNSA)
ss <- AddSeasonal(ss, t0$iclaimsNSA, nseasons = 52)
model1 <- bsts(iclaimsNSA ~ .,
               state.specification = ss,
               data = t0,
               niter = 1000)

predict(model1, horizon = 30) %>%
  plot(.)

# What I would like to do next

saveRDS(model1, file = "model_t0")

# Next month/year

load("model_t0")

NEW_DATA <- window(initial.claims, start = "2011-01-01")

# Option 1, get the priors manually
priors <- get_priors(model_t0) # imaginary function of what I want to do
updated_model <- bsts(iclaimsNSA ~ .,
                     state.specification = ss,
                     data = NEW_DATA,
                     niter = 1000,
                     prior = priors)

# Option 2, update the model directly
updated_model <- bsts(iclaimsNSA ~ .,
                     state.specification = ss,
                     data = NEW_DATA,
                     niter = 1000, 
                     old_model = model_t0)

Я видел этот вид подхода с пакетом brms, но, к сожалению, этот пакет не может работать с данными, относящимися к временным рядам.

С уважением

...