我正在研究在 R 中使用bsts 包的贝叶斯结构时间序列模型的结果的稳定性。以下代码为三种不同数量的 MCMC 绘制(100、1000、 10000)。对于这三种情况,我重复估计 10 次并将 R 方存储在数据框中:
library(bsts)
data(AirPassengers)
y <- log(AirPassengers)
df=data.frame(niter100=NA,niter1000=NA,niter10000=NA)
dfcolumn=0
for (j in c(100,1000,10000)) {
dfcolumn=dfcolumn+1
for (i in 1:10) {
ss <- AddLocalLinearTrend(list(), y)
model_benchmark <- bsts(y,state.specification = ss,niter = j)
summary=summary(model_benchmark)
df[i,dfcolumn]=summary$rsquare
}
}
结果如下:
> df
niter100 niter1000 niter10000
1 0.9058217 0.8959122 0.8352333
2 0.9058217 0.6254595 0.7148984
3 0.9058217 0.8956490 0.8840317
4 0.9058217 0.9071929 0.8682971
5 0.9050454 0.9076566 0.9017717
6 0.9050454 0.8904109 0.8416038
7 0.9050454 0.9073501 0.8674943
8 0.9050454 0.9059262 0.8563360
9 0.9050454 0.9070879 0.8585177
10 0.9050454 0.6612644 0.8920700
我的期望是,随着我们增加 MCMC 抽签次数,结果应该会变得更加准确和稳定。然而,上面的测试向我表明,随着 MCMC 绘制次数的增加,结果往往会变得不太稳定,即对于 100 次迭代,R 方的变化很小,而对于 1000 次迭代,它在 0.63 和 0.91 之间变化。这可能是什么原因?有什么策略可以在实际应用中处理这个问题吗?