【问题标题】:error in using WinBUGS from R使用 R 中的 WinBUGS 时出错
【发布时间】:2013-04-11 04:47:04
【问题描述】:

代码如下:

require(BRugs)
require(R2WinBUGS)
model<-function(){
  for(i in 1:N){
  y[i] ~ dnorm(x[i], sigma.y)
  }
  x[1] ~ dnorm(theta[1], sigma.y)
  theta[1] <- 0
  for(j in 2:N){
    x[j] ~ dnorm(theta[j], sigma.x)
    theta[j] <- b*x[j-1] # this row wrong, 
# it would be right when I set theta[j] <- 1*x[j-1]
  }
  a ~ dunif(0, 1)
  b ~ dunif(-1, 1)
  sigma.y ~ dgamma(0.1, 0.1)
  sigma.x ~ dgamma(0.1, 0.1)
}
data <- list( N <- 100, y <- rnorm(100))
data=list(N=100,y=rnorm(100))

inits=function(){
  list(sigma.x = rgamma(1,0.1,0.1), sigma.y = rgamma(1, 0.1, 0.1), a = dnorm(1, 0, 1), b = dnorm(1, -1, 1))
}
parameters=c("a", "b", "x")

write.model(model, con = "model.bug")
modelCheck("model.bug")
# model is syntactically correct
ret.sim <- bugs(data, inits, parameters, "model.bug",
                n.chains = 1, n.iter = 1000,
                program= "winbugs",
                working.directory = NULL,
                debug = T)

我不知道为什么,当我将theta[j] &lt;- b*x[j-1]替换为theta[j] &lt;- 1*x[j-1]时程序会正确,但我定义了b ~ dunif(-1, 1)。确实,我需要在最终模型中设置theta[j] &lt;- a - b*x[j-1],当我尝试在其中添加ab 时结果是错误的。有谁发现问题出在哪里?

【问题讨论】:

    标签: r winbugs mcmc r2winbugs


    【解决方案1】:

    问题在于您对 b(很可能是 a)的先验。我不知道您的数据,但您当前的先验范围可能不包括 a 和 b 的真实值。我认为如果您使用连续分布:

    a ~ dnorm(0,1)
    b ~ dnorm(0,1)
    

    你的问题可能解决了吗?

    n.b.如果您尝试为 WinBUGS 创建 AR(1) 模型,您可能需要查看 tsbugs 包。

    【讨论】:

    • 是的,模型通过modelCheck我得到结果,你的意思是dunif(0,1)生成的a的初始值不包括a的真实值,所以我需要为 a 选择合适的 perior,我明白了吗?让我看看tsbugs,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2018-12-28
    • 2015-06-13
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多