r语言 - 通过 bsts 插补时间序列中的缺失值



我处理的是一个详细的时间序列,其中大约 20% 的数据缺失(长度不同)。

AFAIK贝叶斯方法可以优雅地处理缺失数据,我想尝试拟合贝叶斯时间序列模型,然后使用贝叶斯模型来插补或提取缺失值(理想情况下也返回可信区间)。

我希望将模型拟合在整个数据集上,包括缺失的数据点,然后以某种方式同时插补这些值 - 避免滚动多地平线预测的复杂性(和计算成本)。我目前计划使用"bsts"包进行插补,但我也对其他选项持开放态度。

(我已经尝试了forecast::na.impimputeTS::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') 

范数是贝叶斯线性回归

相关内容

  • 没有找到相关文章

最新更新