rstan如何存储独立链的后验样本?

时间:2018-08-14 19:20:08

标签: output stan rstan

我想了解extractrstan的输出如何对后验样本进行排序。我知道我可以使用as.array查看每个链的后验样本,

stanfit <- sampling(
  model,
  data = stan.data)
​
fitarray <- as.array(stanfit)

例如,fitarray[, 2, 1]将给我第一个参数的第二个链的样本。将后验样本存储在extract的输出中的一种方法就是将它们串联起来。当我这样做时,

fit <- extract(stanfit)
mean(fitarray[,2,1]) == mean(fit$ss[1001:2000]) 

对于几个链和参数,我总是得到TRUEss是第一个参数)。这使得后验样本似乎在fit中被串联。但是,当我这样做时,

fitarray[,2,1] == fit$ss[1001:2000]

我得到FALSE(确认不只是精度差异)。看来fitarrayfit以不同的方式存储迭代。如何分别查看每个后样本链的迭代(按顺序)?

1 个答案:

答案 0 :(得分:1)

rstan:::as.array.stanfit可以看出,as.array方法本质上定义为

extract(x, permuted = FALSE, inc_warmup = FALSE)

您默认使用extract可以保持预热并随机排列预热后绘制,这就是索引不与as.array输出对齐的原因。