我正在阅读Christensen等人的教科书“贝叶斯思想和数据分析”。
本书中有一个简单的练习,涉及到剪切和粘贴以下代码,以便在Winbug中运行:
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循环吗?
发布于 2017-02-03 17:50:39
错误来自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
哑光
发布于 2017-02-03 17:52:15
这篇旧博文有一个通过包rjags (而不是R2jags )访问的将BUGS转换为JAGS的广泛示例。(我更喜欢runjags包。)我知道我们应该在这里给出完整的答案,而不仅仅是链接,但这篇文章相当长。它通过脚本的每个逻辑步骤,包括:
https://stackoverflow.com/questions/42019219
复制相似问题