Я работаю с мелкими временными сериями с примерно 20% пропущенных данных (различной длины).
Байесовские методы AFAIK могут элегантно обрабатывать пропущенные данные, и я хотел бы попытаться соответствовать байесовской модели временных рядов, а затем использовать байесовскую модель для вменения или извлечения пропущенных значений (в идеале также возвращает достоверный интервал).
Я бы хотел подогнать модель по всему набору данных, включая отсутствующие точки данных изатем каким-то образом рассчитать значения одновременно, избегая сложностей (и вычислительных затрат) скользящих многогоризонтных прогнозов.В настоящее время я планирую использовать пакет «bsts» для вменения, но я открыт и для других вариантов.
(я пробовал forecast::na.imp
, а также imputeTS::na.seadec
для вменения, но я хотел бы немного улучшить точность вычислений, добавив внешние регрессоры)
Как вы можете видеть ниже, я пока не смог извлечь серию времени без пропущенных значений.
library(magrittr)
library(bsts)
# Load data
data(iclaims)
claims_nsa <- initial.claims$iclaimsNSA
# Create missing values
n <- length(claims_nsa)
na_pos <- 1:n %>%
sample(size = 1/ 5 * n)
claims_nsa[na_pos] <- NA
# Fit Model
ss <- AddLocalLinearTrend(list(), claims_nsa)
ss <- AddSeasonal(ss, claims_nsa, nseasons = 52)
model1 <- bsts(claims_nsa,
state.specification = ss,
niter = 100,
model.options = BstsOptions(save.full.state = TRUE))
# Fiddle around with model object
predict.bsts(model1, h=10)
str(model1)
model1$full.state %>% str()