什么是后验预测检查,我如何在 R 中做到这一点?

机器算法验证 拟合优度 后部 分层贝叶斯 检查
2022-04-10 15:47:02

我正在使用贝叶斯分层建模从度量变量预测有序分类变量。例如,我想在金钱(一个度量变量)上回归幸福(1-5 个等级):

幸福∼log(美元)

在使用 MCMC 和 RJags 估计后验分布后,我想做一个后验预测检查,所以我需要对后验分布和数据之间的差异进行建模。但是我应该选择什么作为差异?

pp.check这是来自jagsUI计算贝叶斯的包中的样本的结果p- 后验预测检查贝叶斯分析适合 JAGS 的值。

贝叶斯后验预测检查

1个回答

您描述的层次模型是生成模型您构建的模型可用于生成“假”数据。这在概念上与使用模型进行预测略有不同。

这个概念背后的假设是,一个好的模型应该生成与您用来制作模型的实际数据集相似的假数据。一个糟糕的模型会生成在某种程度上根本或系统不同的数据。

您可以直观地评估这一点,也可以使用一些指标,例如您在 JAGS 中尝试的 pp.check 方法(我不是 JAGS 用户,因此无法具体评论它是如何实现的)。

从程序上讲,这是如何工作的:

  1. 你指定你的模型。在您的情况下,您似乎想要进行序数回归。 看起来像一个类似的例子。具体来说,我建议您参考本书中名为“序数预测变量”的章节

  2. 您对模型中的参数进行采样并获得后验分布。查看链接示例中的图,这些参数是β0,β1σ.

  3. 现在绘制后验预测样本。在您的输入范围内(美元),从您估计的参数的后验中抽取许多样本(或获取您的后验样本),然后将这些样本插入到您的模型方程中,即您写下的幸福度 ~ log(美元) .

您最终应该在给定的日志(美元)中获得许多“幸福”数据样本。例如,从这些样本中,您可以计算和绘制对数(美元)的 90% 可信区间。

  1. 绘制实际数据(在 y 轴上:幸福,在 x 轴上:log(Dollars)),然后叠加您的后验预测样本的平局和可信区间。

现在目视检查。您的 90% 可信区间是否包含 90% 的实际幸福数据点?真实数据是否与您的模型存在系统性偏差?然后求助于 pp.check 等指标。

这是执行模型验证的一种方式,还有很多其他方式。