2017-02-03 35 views
0

我正在通过Christensen等人的教科书“贝叶斯理念和数据分析”Winbugs to Rjags beta二项模型翻译

有一个简单的练习中,涉及剪切和粘贴下面的代码在运行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型号代码中缺少必要的循环?

回答

2

错误来自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中运行以下命令:在翻译WinBUGS软件模型JAGS的这种方法

library('runjags') 
results <- run.jags('model.txt', monitor='theta') 
results 
plot(results) 

欲了解更多信息,请参阅: http://runjags.sourceforge.net/quickjags.html

马特

0

This old blog post有缺陷,转换为经由包rjagsR2jags访问JAGS的广泛实例。 (我更喜欢包runjags。)我知道我们应该在这里提供自包含的答案,而不仅仅是链接,但帖子相当长。它通过一个脚本的每个逻辑步骤,其中包括:

  • 加载包
  • 指定模型
  • 组装数据
  • 初始化链
  • 运行链
  • 检查结果