首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winbug到Rjags二项式模型的转换

Winbug到Rjags二项式模型的转换
EN

Stack Overflow用户
提问于 2017-02-03 07:46:31
回答 2查看 620关注 0票数 0

我正在阅读Christensen等人的教科书“贝叶斯思想和数据分析”。

本书中有一个简单的练习,涉及到剪切和粘贴以下代码,以便在Winbug中运行:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
model {
    #Likelihoods
    y ~ dbin(theta,n)
    yt ~ dbin(theta,m)
    #Priors
    theta ~ dbeta(a,b)
    prob <- step(yt - 20)
}

使用R码:

代码语言:javascript
复制
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代码会导致以下错误:

代码语言:javascript
复制
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循环吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-03 17:50:39

错误来自R函数jags.model (而不是JAGS) --您试图将参数、parameters.to.save等用于错误的函数。

如果您希望保持模型尽可能类似于WinBUGS,有一种比在R中指定数据和初始值更容易的方法:将以下内容放入工作目录中名为“model.txt”的文本文件中:

代码语言:javascript
复制
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中运行这个:

代码语言:javascript
复制
library('runjags')
results <- run.jags('model.txt', monitor='theta')
results
plot(results)

有关将WinBUGS模型转换为JAGS的方法的更多信息,请参见:http://runjags.sourceforge.net/quickjags.html

哑光

票数 2
EN

Stack Overflow用户

发布于 2017-02-03 17:52:15

这篇旧博文有一个通过包rjags (而不是R2jags )访问的将BUGS转换为JAGS的广泛示例。(我更喜欢runjags包。)我知道我们应该在这里给出完整的答案,而不仅仅是链接,但这篇文章相当长。它通过脚本的每个逻辑步骤,包括:

  • 加载包
  • 指定模型
  • 数据拼装
  • 初始化链
  • 管理铁链
  • 检查结果
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42019219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档