如果我在OpenBUGS中运行以下代码:
MODEL
{
for (i in 1:50) {
variable[i] ~ dunif(50, 100)
}
item <- rank(variable[], 1)
}
我希望item
为0,因为variable
的任何组件都不能低于1.这是基于OpenBUGS用户手册中函数rank
的定义:
&#34; rank(v, s)
:v
的组件数量小于或等于s
&#34;
然而,item
的后验实际上是:
mean sd MC_error val2.5pc median val97.5pc start sample
item 25.4 14.39 0.4072 1.0 25.0 49.0 1 1000
意味着variable
的大约25个分量小于或等于1,显然variable
的任何分量都不能小于1 - 由{{1的后验分布确认值:
variable
这里发生了什么?
答案 0 :(得分:1)
来自Andrew Millard,通过[BUGS] listserv:
OpenBugs手册的定义为
rank(v, s)
v的组件数小于或等于s
这是我的代码基础,但手册错了,应该是
rank(v, s)
v的分量小于或等于v
答案 1 :(得分:0)
rank(u[],i)
返回u的第i个元素的等级。
由于所有“变量”节点都是等效的分布,因此rank()函数将返回一个值(基本上)是for循环中元素数量的1/2(在您的示例中为25)
item <- rank(variable[], 1)
将给出25(平均值)
item <- rank(variable[], 10)
将给出25(平均值)
item <- rank(variable[], 55)
会在采样过程中出错。