通过BST在时间序列中估算缺失值

时间:2019-01-29 12:17:29

标签: r time-series missing-data imputation

我处理的是微小的时间序列,其中大约有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()

2 个答案:

答案 0 :(得分:1)

我真的不知道我在做什么,但这似乎行得通:

我认为,我可能必须汇总mcmc样本中来自模型对象的状态贡献等。确切的过程可能取决于模型的顺序。

model1$state.contributions %>% 
  apply(c(2, 3), median) %>% 
  colSums()

这似乎在mcmc-iterations的各个实现中汇总。

答案 1 :(得分:0)

您尝试过鼠标包吗?

library(mice)

mice_mod <- mice(YourDataFrame[,VariablesYouWantToUseForImputationAndTheVariablesYouWantToImpute]
                   , method='norm') 

范数是贝叶斯线性回归

相关问题