Я работаю с данными временных рядов, которые обновляются ежедневно. Поэтому я подумал, что байесовский фреймворк идеально подойдет, потому что теоретически можно обновить модель по мере поступления новых данных. Таким образом, я перехожу к моделированию моих данных с пакетом 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
, но, к сожалению, этот пакет не может работать с данными, относящимися к временным рядам.
С уважением