我处理的是微小的时间序列,其中大约有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()
答案 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')
范数是贝叶斯线性回归