我处理的是一个详细的时间序列,其中大约 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()
我真的不知道我在做什么,但这似乎工作正常:
我认为,我可能必须跨 mcmc 样本聚合模型对象中的状态贡献等。确切的过程可能取决于模型的顺序左右。
model1$state.contributions %>%
apply(c(2, 3), median) %>%
colSums()
这似乎在mcmc迭代的实现中聚合。
你试过老鼠套餐吗?
library(mice)
mice_mod <- mice(YourDataFrame[,VariablesYouWantToUseForImputationAndTheVariablesYouWantToImpute]
, method='norm')
范数是贝叶斯线性回归