【问题标题】:Impute missing values in timeseries via bsts通过 bsts 估算时间序列中的缺失值
【发布时间】:2019-06-22 13:42:52
【问题描述】:

我处理一个包含大约 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()

【问题讨论】:

    标签: r time-series missing-data imputation


    【解决方案1】:

    我真的不知道,我在做什么,但这似乎工作正常:

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

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

    这似乎汇总了 mcmc 迭代的实现。

    【讨论】:

      【解决方案2】:

      你试过老鼠包吗?

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

      范数是贝叶斯线性回归

      【讨论】:

      • 谢谢你 afaik 鼠标包没有考虑数据的时间序列结构?
      猜你喜欢
      • 2019-08-10
      • 2021-06-10
      • 2021-07-29
      • 2020-04-18
      • 2018-12-22
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多