如果您在设置rjags时需要帮助,我希望您的助教或同学可以帮助您。这个答案的重点是解释代码的作用。
出于教学目的,让我们对这些数据进行简单的叙述。假设我们有两枚硬币,我们想知道一枚硬币是否比另一枚更有可能翻转正面。代码分为两部分。
生成/正向模拟
第一个是前向模拟,我们已经知道两枚硬币正面朝上的概率是多少。
## how many times we will flip each coin
n <- 100
## coin 1 has 70% chance to land on heads
## simulate n flips
x1 <- rbinom(n, 1, .7)
## coin 2 has 50% chance to land on heads
## simulate n flips
x2 <- rbinom(n, 1, .5)
## count number of coin 1 heads
sum(x1) # 70
## count number of coin 2 heads
sum(x2) # 54
后验概率
现在我们采用这些模拟数据并尝试反转实验。也就是说,如果我们观察到一枚硬币有 70 个正面,另一枚硬币有 54 个正面,我们能说一下每枚硬币翻转正面的概率吗?具体来说,代码会问,“在关于每枚硬币的真实概率的统一假设下,硬币 1 比硬币 2 更有可能正面朝上的(后验)概率是多少? ”
计算可能性
JAGS 将使用 MCMC 执行此操作,其中样本取自所有可能的参数配置(在本例中为p1
和的值p2
)的空间,并根据每个配置生成观察数据的可能性进行加权。因此,JAGS 代码需要完成的主要事情是定义如何生成参数值,以及如何在给定这些值的情况下计算数据的可能性。这是模型代码的第一部分。
计算感兴趣的值
模型部分代码的第二部分是测试我们提出的问题。这是通过计算一些对配置的可能性没有贡献的额外变量来完成的。相反,它们会告诉我们有关正在采样的配置的信息。具体来说,diff
将跟踪两个硬币概率之间差异的分布情况,p.value
并将跟踪p1
大于 的频率p2
。
model{
## COMPUTE LIKELIHOODS
## compute likelihood that heads resulted from coins
## with given probabilities after `n` coin flips
x1 ~ dbin(p1, n)
x2 ~ dbin(p2, n)
## SAMPLE PARAMETERS
## randomly select coin probabilities from Beta distributions
## Note that since these are all 1, it's really just a Uniform[0,1]
p1 ~ dbeta(a1, b1)
p2 ~ dbeta(a2, b2)
## HYPOTHESIS TEST
## compute how often coin1's probability is greater than coin2's
diff <- p1 - p2
p.value <- step(diff)
}
## INPUT VALUES
list(n = 100, x1 = 70, x2 = 54, a1 = 1, b1 = 1, a2 = 1, b2 = 1)