0

我想了解 in 的输出如何对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了(确认不仅仅是精度差异)。似乎fitarray并且fit以不同的方式存储迭代。如何分别查看每个后验样本链的迭代(按顺序)?

4

1 回答 1

1

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

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

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

于 2018-08-14T23:49:36.143 回答