我正在研究Christensen等人的教科书“贝叶斯思想和数据分析”。
本书中有一个简单的练习,涉及剪切和粘贴以下代码以在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循环吗?
答案 0 :(得分:2)
错误来自R函数jags.model(不是来自JAGS) - 您正在尝试将参数parameters.to.save等用于错误的函数。
如果要使模型尽可能与WinBUGS类似,则比在R中指定数据和初始值更简单。将以下内容放入工作目录中名为“model.txt”的文本文件中:
connect
然后在R:
中运行它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
}
有关将WinBUGS模型转换为JAGS的方法的更多信息,请参阅: http://runjags.sourceforge.net/quickjags.html
马特
答案 1 :(得分:0)
This old blog post有一个广泛的例子,可以将BUGS转换为通过包rjags
而不是R2jags
访问的JAGS。 (我更喜欢包runjags
。)我知道我们应该在这里提供自包含的答案,而不仅仅是链接,但帖子相当长。它遍历脚本的每个逻辑步骤,包括: