WinBUGS 中计算后验分布的代码语法

Code syntax in calculating posterior distribution in WinBUGS

最近看了"The BUGS Book – A Practical Introduction to Bayesian Analysis"学习WinBUGS。 WinBUGS描述后验分布推导的方式让我感到困惑。

我们以本书中的Example 4.1.1来说明一下:

Suppose we observe the number of deaths y in a given hospital for a high-risk operation. Let n denote the total number of such operations performed and suppose we wish to make inferences regarding the underlying true mortality rate, $\theta$.

WinBUGS代码为:

y <- 10  # the number of deaths
n <- 100 # the total number of such operations
#########################
y ~ dbin(theta,n)             # likelihood, also a parametric sampling distribution
logit(theta) <- logit.theta   # normal prior for the logistic transform of theta
logit.theta ~ dnorm(0,0.368)  # precision = 1/2.71

作者说:

The software knows how to derive the posterior distribution and subsequently sample from it.

我的问题是:

哪个代码反映了告诉 WinBUGS 关于 "which parameter that I want to calculate its posterior distribution" 的逻辑结构?

这个问题看起来很傻,但是如果我不先看背景,我确实无法在上面的代码中直接找到关注哪个参数(例如theta,theta,还是 y?)。

以下是我的一些想法(作为WinBUGS的初学者):

我认为WinBUGS中代码风格的以下三个属性让我感到困惑:

(1) 代码不遵循"a specific sequence"。比如logit.theta ~ dnorm(0,0.368)为什么不在logit(theta) <- logit.theta前面?

(2) 重复变量。例如,为什么最后两行没有缩减为一行:logit(theta) ~ dnorm(0,0.368)?

(3) 变量定义在多个地方。例如,y 被定义了两次:y <- 10 和 y ~ dbin(theta, n)。这个在书的附录A中有解释(即However, a check has been built in so that when finding a logical node that also features as a stochastic node, a stochastic node is created with the calculated values as fixed data),但我还是不明白它的意思

  1. BUGS 是一种声明性语言。大多数情况下,语句不是按顺序执行的,它们定义了模型的不同部分。 BUGS 适用于可以用有向无环图表示的模型,即那些你在某些组件上放置先验,然后在给定较早组件的情况下对其他组件进行条件分布的模型。

  2. 这是一种相当简单的语言,所以我认为 logit(theta) ~ dnorm(0, 0.368) 对它来说太复杂了。

  3. 该语言允许您定义一个复杂的概率模型,并在其中声明对某些组件的观察。一旦你声明了一个观察,BUGS 从中采样的模型就是以该观察为条件的原始完整模型。 y <- 10 定义观测数据。 y ~ dbin(theta,n) 是模型的一部分。
    语句 n <- 100 可以是:对于像 n 这样的固定常量,你怎么想它并不重要。要么模型说 n 总是 100,要么 n 有一个不依赖于任何其他参数的未声明的先验分布,以及观察值 100。这两个陈述是等价的。

最后,你的大问题:上面代码中的 Nothing 说明你想查看哪个参数。 BUGS 将计算每个参数的联合后验分布。 ny 将取其固定值,thetalogit.theta 都将从后验模拟。在代码的另一部分(或通过使用 WinBUGS 菜单),您可以决定查看其中的哪些。