在BUGS中使用rank()函数

时间:2014-10-14 21:11:17

标签: winbugs

如果我在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

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

来自Andrew Millard,通过[BUGS] listserv:

OpenBugs手册的定义为

rank(v, s) v的组件数小于或等于s

这是我的代码基础,但手册错了,应该是

rank(v, s) v的分量小于或等于v

的第s个分量

答案 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)会在采样过程中出错。