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

时间:2019-06-27 11:06:47

标签: r winbugs

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

让我们以本书中的示例4.1.1为例:

  

假设我们观察到某家医院在某医院死亡的人数 y   高风险操作。让 n 表示这样的总数   执行的操作,并假设我们希望对   基本真实死亡率$ \ 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

作者说:

  

该软件知道如何得出后验分布和   随后从中取样。

我的问题是:

哪个代码反映了逻辑结构,以告知WinBUGS“我要计算哪个参数的后验分布”?

这个问题似乎很愚蠢,但是如果我不先阅读背景知识,我真的无法在上面的代码中直接找到直接,该参数是关于哪个参数(例如theta或y?)的。

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

我认为WinBUGS中代码样式的以下三个属性使我感到困惑:

(1)该代码不遵循“特定顺序”。例如,为什么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 个答案:

答案 0 :(得分:0)

  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。这两个语句是等效的。

    < / li>

最后,您的大问题:上面代码中的没什么告诉您要查看的参数。 BUGS将计算每个参数的关节后验分布。 ny将采用其固定值,thetalogit.theta都将从后验模拟。在代码的另一部分(或通过使用WinBUGS菜单),您可以决定查看其中的哪个。

相关问题