我想了解extract
中rstan
的输出如何对后验样本进行排序。我知道我可以使用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])
对于几个链和参数,我总是得到TRUE
(ss
是第一个参数)。这使得后验样本似乎在fit
中被串联。但是,当我这样做时,
fitarray[,2,1] == fit$ss[1001:2000]
我得到FALSE
(确认不只是精度差异)。看来fitarray
和fit
以不同的方式存储迭代。如何分别查看每个后样本链的迭代(按顺序)?
答案 0 :(得分:1)
从rstan:::as.array.stanfit
可以看出,as.array
方法本质上定义为
extract(x, permuted = FALSE, inc_warmup = FALSE)
您默认使用extract
可以保持预热并随机排列预热后绘制,这就是索引不与as.array
输出对齐的原因。