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
),但我还是不明白它的意思
BUGS 是一种声明性语言。大多数情况下,语句不是按顺序执行的,它们定义了模型的不同部分。 BUGS 适用于可以用有向无环图表示的模型,即那些你在某些组件上放置先验,然后在给定较早组件的情况下对其他组件进行条件分布的模型。
这是一种相当简单的语言,所以我认为 logit(theta) ~ dnorm(0, 0.368)
对它来说太复杂了。
该语言允许您定义一个复杂的概率模型,并在其中声明对某些组件的观察。一旦你声明了一个观察,BUGS 从中采样的模型就是以该观察为条件的原始完整模型。 y <- 10
定义观测数据。 y ~ dbin(theta,n)
是模型的一部分。
语句 n <- 100
可以是:对于像 n
这样的固定常量,你怎么想它并不重要。要么模型说 n
总是 100,要么 n
有一个不依赖于任何其他参数的未声明的先验分布,以及观察值 100。这两个陈述是等价的。
最后,你的大问题:上面代码中的 Nothing 说明你想查看哪个参数。 BUGS 将计算每个参数的联合后验分布。 n
和 y
将取其固定值,theta
和 logit.theta
都将从后验模拟。在代码的另一部分(或通过使用 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
),但我还是不明白它的意思
BUGS 是一种声明性语言。大多数情况下,语句不是按顺序执行的,它们定义了模型的不同部分。 BUGS 适用于可以用有向无环图表示的模型,即那些你在某些组件上放置先验,然后在给定较早组件的情况下对其他组件进行条件分布的模型。
这是一种相当简单的语言,所以我认为
logit(theta) ~ dnorm(0, 0.368)
对它来说太复杂了。该语言允许您定义一个复杂的概率模型,并在其中声明对某些组件的观察。一旦你声明了一个观察,BUGS 从中采样的模型就是以该观察为条件的原始完整模型。
y <- 10
定义观测数据。y ~ dbin(theta,n)
是模型的一部分。
语句n <- 100
可以是:对于像n
这样的固定常量,你怎么想它并不重要。要么模型说n
总是 100,要么n
有一个不依赖于任何其他参数的未声明的先验分布,以及观察值 100。这两个陈述是等价的。
最后,你的大问题:上面代码中的 Nothing 说明你想查看哪个参数。 BUGS 将计算每个参数的联合后验分布。 n
和 y
将取其固定值,theta
和 logit.theta
都将从后验模拟。在代码的另一部分(或通过使用 WinBUGS 菜单),您可以决定查看其中的哪些。