bayesian - STAN - 定义因随机变量的先验
问题描述
背景:我有一个具有未观察到的参数的仿真模型。我使用人工神经网络 (ANN) 创建了一个元模型,因为仿真模型的运行时间很长。我正在尝试使用贝叶斯校准来估计未观察到的参数,其中先验基于当前知识,并且从元模型中估计观察数据的可能性。
查询:我有两个随机变量 X 和 Y,我正在尝试使用 STAN 获得后验分布。X 的先验分布是均匀的U(0,2)。Y 的先验也是一致的,但它总是会超过 X,即Y ~ U(X,2)。由于 Y 与 X 相关联,如何在 STAN 中定义 Y 的先验分布以使约束 Y>X 成立?我是 STAN 的新手,因此我将不胜感激有关如何进行的任何建议或指导。太感谢了!
解决方案
Stan 的有序向量是您所需要的。在块中创建一个长度为 2 的有序向量(我称之为beta
)parameters
,如下所示:
parameters {
ordered<lower=0,upper=2>[2] beta;
}
有序向量受到约束,使得每个元素都大于前一个元素。beta[1]
您对X的估计也是如此,beta[2]
您对Y的估计也是如此。
(为了确保我正确理解您的模型:您有两个参数X和Y,您对它们的唯一先验知识是它们都位于 [0, 2] 和Y > X中 。X和Y描述了您的数据分布 - 例如,也许X是其他一些随机变量Z的平均值,您对此有观察。我说得对吗?)
beta
我相信 Stan 的先验默认情况下是统一的,但是您可以通过在model
块中指定先验来确保这一点:
model {
beta ~ uniform(0, 2);
...
}
推荐阅读
- javascript - 是否可以在 JavaScript 中创建不拥有其订阅的事件发射器?
- php - 有没有办法根据公共列减少mysql中的行数?
- python - python数据框操作
- android - 在 Google Play 管理中心找不到崩溃报告
- mysql - 无法连接到在 docker 中运行的 MySQL
- javascript - 如何在 javascript 中使用集合并获得相同的结果
- d3.js - d3.scaleLog 以 2 为底的刻度
- python - 是否可以设置 lint 自定义设置并忽略 pylance
- c++ - 时间:2019-05-10 标签:c++vector
标题是一个字符串 - javascript - Discord.js 不播放 youtube 网址