我正在尝试使用bsts
包在R中拟合贝叶斯结构时间序列模型。例如,考虑一个具有500个时间步长的序列,并假设我们使用1000个MCMC迭代拟合局部模型:
library(bsts)
y <- rnorm(500)
ss <- AddLocalLevel(list(), y)
mod <- bsts(y, state.specification = ss, family='gaussian', niter=1000)
我可以轻松地使用mod$state.contributions
提取500个时间步长中每个水平状态的1000个MCMC绘制。对于状态和观察误差的方差参数,我如何得到相同的结果? mod$sigma.level
和mod$sigma.obs
仅在最后(第500个)时间步中提供了1000个这些参数的绘制,但我想在每个时间步中获取这些参数。
由于我对时间序列模型知之甚少,所以我不愿发表此文章,因此,如果不好,请发表评论,然后将其删除。
使用R中的循环似乎至少有些皱眉,但我不能勉强工作。另外,以下答案与i的低起始值挂在一起-例如2.但是从i = 100开始它可以正常工作。
mod_sl <- matrix(nrow = 1000, ncol = 500)
mod_so <- matrix(nrow = 1000, ncol = 500)
for(i in 495:500) {
cat(i)
ss <- AddLocalLevel(list(), y[1:i])
mod <- bsts(y[1:i], state.specification = ss, family='gaussian', niter=1000)
mod_sl[ , i] <- mod$sigma.level
mod_so[ , i] <- mod$sigma.obs
}
我想重申一下,这不是有关如何解决此问题的规定性答案,但作为故障排除的建议,它似乎可行。
例如,在第499次运行时对sigma.level的答案是在mod_sl[ ,499]
。