在 Stan 中,有没有办法在新分析中使用旧分析中的参数后验作为先验?

机器算法验证 r 斯坦
2022-04-08 02:36:15

通常在模型块中,我可能会在参数上指定先验

y ~ normal(mu, sigma);

但是,如果我已经从先前的分析中获得了 y 的后验,以及在新分析中使用该后验作为先验怎么办。我可以从旧的后验中导入一组样本并从中获取样本吗?这是怎么做的?我可以从旧分析中导入整个 Stan 对象并使用其中编码的参数分布吗?

3个回答

正如前面的答案所提到的,Stan、JAGS 和 WinBUGS 要求将先验指定为数学函数。

如果您已经从先前的分析中获得了 MCMC 表示的后验,并且您想将该 MCMC 后验用作后续数据的先验,则必须以数学形式近似 MCMC 后验。除非您有一个具有共轭先验的简单模型,否则 MCMC 分布的数学近似值将只是一个近似值。

正如 Bjorn 的回答所暗示的那样,将 MCMC 分布中参数的相关性包括在先验的数学近似中是很重要的。

最后,如果之前的数据和新的数据具有完全相同的结构,并且您使用的是完全相同的模型,那么您可以通过组合两个数据集并在组合数据上只运行一次模型来获得准确的答案。

大多数软件,如 Stan、WingBUGS、SAS 等,都要求您提供先验分析表,而不是 MCMC 样本。围绕它的可能方法是用所有数据重新拟合模型或用例如一些混合分布(例如双变量法线到μlogσ- 例如在 R 中使用 mclust 包或在 SAS 中使用 PROC FMM)并使用混合 log-pdf 作为新的先验。

您能否澄清一下,您所说的“我已经在 y 上有后验”是什么意思?

你的意思是你已经根据你定义的模型生成样本来描述适合你的数据 (y) 的各种参数的分布?如果是这种情况,您仍然需要将这些参数拟合应用于您的输入数据以创建每个观察的预测 - 您可以通过使用 Stan 提供的参数值“逆向工程”您的模型语句来完成 - 或在generated_quantities块(此处为示例,或者我可以在必要时提供更多详细信息,只需发布​​您的原始模型声明)。一旦你有了预测,你当然可以在 Stan 内部或外部对其应用任何其他类型的附加建模。

您可能还会问,您是否不仅可以使用第一个模型中的参数点值“做某事”,还可以使用它们的分布形状?如果是这种情况,我建议研究分层模型,它们是很棒的工具,但也有自己的挑战。

如果您还没有看过它,我会推荐 John Kruschke 的书做贝叶斯数据分析作为这类事情的一个很好的资源。第 9 章是关于层次模型的。