Winbugs 到 Rjags beta 二项式模型的转换
Winbugs to Rjags beta binomial model translation
我正在阅读 Christensen 等人的教科书 "Bayesian Ideas and Data Analysis"。
书中有一个简单的练习,涉及将以下代码剪切并粘贴到 Winbugs 中的 运行:
model{ y ~ dbin(theta, n) # Model the data
ytilde ~ dbin(theta, m) # Prediction of future binomial
theta ~ dbeta(a, b) # The prior
prob <- step(ytilde - 20) # Pred prob that ytilde >= 20 }
list(n=100, m=100, y=10, a=1, b=1) # The data
list(theta=0.5, ytilde=10) # Starting/initial values
我正在尝试将以下内容翻译成 R2jags
代码,运行 遇到了一些麻烦。我认为我可以相当直接地以这种方式编写我的 R2Jags
代码:
model {
#Likelihoods
y ~ dbin(theta,n)
yt ~ dbin(theta,m)
#Priors
theta ~ dbeta(a,b)
prob <- step(yt - 20)
}
使用 R 代码:
library(R2jags)
n <- 100
m <- 100
y <- 10
a <- 1
b <- 1
jags.data <- list(n = n,
m = m,
y = y,
a = a,
b = b)
jags.init <- list(
list(theta = 0.5, yt = 10), #Chain 1 init
list(theta = 0.5, yt = 10), #Chain 2 init
list(theta = 0.5, yt = 10) #Chain 3 init
)
jags.param <- c("theta", "yt")
jags.fit <- jags.model(data = jags.data,
inits = jags.inits,
parameters.to.save = jags.param,
model.file = "hw21.bug",
n.chains = 3,
n.iter = 5000,
n.burnin = 100)
print(jags.fit)
但是调用R代码会出现如下错误:
Error in jags.model(data = jags.data, inits = jags.inits, parameters.to.save = jags.param, :
unused arguments (parameters.to.save = jags.param, model.file = "hw21.bug", n.iter = 5000, n.burnin = 100)
是否因为我的 R2Jags
模型代码中缺少必要的 for 循环?
错误来自 R 函数 jags.model(不是来自 JAGS)- 您正试图将参数 parameters.to.save 等用于错误的函数。
如果你想让模型尽可能类似于 WinBUGS,有一种比在 R 中指定数据和初始值更简单的方法。将以下内容放入一个名为 'model.txt' 的文本文件中目录:
model{
y ~ dbin(theta, n) # Model the data
ytilde ~ dbin(theta, m) # Prediction of future binomial
theta ~ dbeta(a, b) # The prior
prob <- step(ytilde - 20) # Pred prob that ytilde >= 20
}
data{
list(n=100, m=100, y=10, a=1, b=1) # The data
}
inits{
list(theta=0.5, ytilde=10) # Starting/initial values
}
然后 运行 R 中的这个:
library('runjags')
results <- run.jags('model.txt', monitor='theta')
results
plot(results)
有关将 WinBUGS 模型转换为 JAGS 的方法的更多信息,请参阅:
http://runjags.sourceforge.net/quickjags.html
马特
This old blog post 有一个将 BUGS 转换为 JAGS 的广泛示例,该示例通过包 rjags
而不是 R2jags
访问。 (我更喜欢包 runjags
。)我知道我们应该在这里提供 self-contained 答案,而不仅仅是链接,但 post 相当长。它遍历脚本的每个逻辑步骤,包括:
- 正在加载包
- 指定模型
- 组装数据
- 正在初始化链
- 运行 锁链
- 检查结果
我正在阅读 Christensen 等人的教科书 "Bayesian Ideas and Data Analysis"。
书中有一个简单的练习,涉及将以下代码剪切并粘贴到 Winbugs 中的 运行:
model{ y ~ dbin(theta, n) # Model the data
ytilde ~ dbin(theta, m) # Prediction of future binomial
theta ~ dbeta(a, b) # The prior
prob <- step(ytilde - 20) # Pred prob that ytilde >= 20 }
list(n=100, m=100, y=10, a=1, b=1) # The data
list(theta=0.5, ytilde=10) # Starting/initial values
我正在尝试将以下内容翻译成 R2jags
代码,运行 遇到了一些麻烦。我认为我可以相当直接地以这种方式编写我的 R2Jags
代码:
model {
#Likelihoods
y ~ dbin(theta,n)
yt ~ dbin(theta,m)
#Priors
theta ~ dbeta(a,b)
prob <- step(yt - 20)
}
使用 R 代码:
library(R2jags)
n <- 100
m <- 100
y <- 10
a <- 1
b <- 1
jags.data <- list(n = n,
m = m,
y = y,
a = a,
b = b)
jags.init <- list(
list(theta = 0.5, yt = 10), #Chain 1 init
list(theta = 0.5, yt = 10), #Chain 2 init
list(theta = 0.5, yt = 10) #Chain 3 init
)
jags.param <- c("theta", "yt")
jags.fit <- jags.model(data = jags.data,
inits = jags.inits,
parameters.to.save = jags.param,
model.file = "hw21.bug",
n.chains = 3,
n.iter = 5000,
n.burnin = 100)
print(jags.fit)
但是调用R代码会出现如下错误:
Error in jags.model(data = jags.data, inits = jags.inits, parameters.to.save = jags.param, :
unused arguments (parameters.to.save = jags.param, model.file = "hw21.bug", n.iter = 5000, n.burnin = 100)
是否因为我的 R2Jags
模型代码中缺少必要的 for 循环?
错误来自 R 函数 jags.model(不是来自 JAGS)- 您正试图将参数 parameters.to.save 等用于错误的函数。
如果你想让模型尽可能类似于 WinBUGS,有一种比在 R 中指定数据和初始值更简单的方法。将以下内容放入一个名为 'model.txt' 的文本文件中目录:
model{
y ~ dbin(theta, n) # Model the data
ytilde ~ dbin(theta, m) # Prediction of future binomial
theta ~ dbeta(a, b) # The prior
prob <- step(ytilde - 20) # Pred prob that ytilde >= 20
}
data{
list(n=100, m=100, y=10, a=1, b=1) # The data
}
inits{
list(theta=0.5, ytilde=10) # Starting/initial values
}
然后 运行 R 中的这个:
library('runjags')
results <- run.jags('model.txt', monitor='theta')
results
plot(results)
有关将 WinBUGS 模型转换为 JAGS 的方法的更多信息,请参阅: http://runjags.sourceforge.net/quickjags.html
马特
This old blog post 有一个将 BUGS 转换为 JAGS 的广泛示例,该示例通过包 rjags
而不是 R2jags
访问。 (我更喜欢包 runjags
。)我知道我们应该在这里提供 self-contained 答案,而不仅仅是链接,但 post 相当长。它遍历脚本的每个逻辑步骤,包括:
- 正在加载包
- 指定模型
- 组装数据
- 正在初始化链
- 运行 锁链
- 检查结果