【问题标题】:multiple definitions of node error in winbugswinbugs中节点错误的多重定义
【发布时间】:2013-04-10 01:52:09
【问题描述】:

我尝试使用R中的WinBUGS,通过BRugsR2WinBUGS,代码如下:

require(R2WinBUGS)
require(BRugs)
model<-function(){
  for(i in 1:N){
    y[i] <- x[i] + w[i]
    w[i] ~ dnorm(0, sigma.y)
    x[i] <- a - b*5 + v[i]
    v[i] ~ dnorm(0, sigma.x)
  }
a ~ dunif(0, 1)
b ~ dunif(-1, 1)
sigma.y ~ dgamma(0.1, 0.1)
sigma.x ~ dgamma(0.1, 0.1)
}

write.model(model, con = "model.bug")
modelCheck("model.bug")
# model is syntactically correct

N = 10
y = rnorm(100)
data = list(N = N, y = y)
inits = function(){
  list(a = runif(1, 0, 1), b = runif(1, -1, 1), sigma.x= rgamma(1, 0.1, 0.1), 
       sigma.y = rgamma(1, 0.1, 0.1))
}
parameters = c("a", "b", "sigma.x", "sigma.y")

result.sim <- bugs(data, inits, parameters, "model.bug",
                n.chains = 1, n.iter = 1000,
                program= "winbugs",
                working.directory = NULL,
                debug = T)

结果没出来,我找出了WinBUGSlog.txt的一部分:

display(log)
check(C:/Users/ADMINI~1.PC-/AppData/Local/Temp/RtmpkrnOoc/model.bug.txt)
model is syntactically correct
data(C:/Users/ADMINI~1.PC-/AppData/Local/Temp/RtmpkrnOoc/data.txt)
data loaded
compile(1)
multiple definitions of node y[1]
inits(1,C:/Users/ADMINI~1.PC-/AppData/Local/Temp/RtmpkrnOoc/inits1.txt)
command #Bugs:inits cannot be executed (is greyed out)
gen.inits()
command #Bugs:gen.inits cannot be executed (is greyed out)
thin.updater(1)
update(500)
command #Bugs:update cannot be executed (is greyed out)
set(a)

很明显errormultiple definitions of node y[1],但它是什么意思呢?我不认为y[1] 有多个定义,因为我在loop 中使用y[i] 而不是y

【问题讨论】:

    标签: r winbugs r2winbugs


    【解决方案1】:

    当您没有正确定义模型的可能性时,您往往会遇到多重定义错误。如果您的数据中有y,则需要在模型中声明y 的分布。目前,模型中的 y 被设置为确定性(而不是随机)节点。根据您的实际型号,您可以设置

    y[i] ~ dnorm(x[i], w[i])
    

    然后,您必须在每个容差 w[i] 上具有不同的先验分布(仅是正的)。

    【讨论】:

    • 为什么x[i]可以在逻辑上定义,而不是y[i]
    • @ChristianBueno 因为y[i] 也在数据中定义。再次将其定义为非随机节点将是第二个(多重定义)。 'x[i]' 是新的(不在数据中),因此它可以是逻辑的或随机的。
    【解决方案2】:

    在您的模型中,y[i] 具有正态分布,均值 x[i],方差由 v[i] 的方差加上 w[i] 的方差定义。这将为您提供在 y[i] ~ dnorm(x[i] , prec[i]) 中使用的适当参数。请注意,BUGS 中的正态分布由精度 = 1 / 方差定义,因此 prec[i]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2017-02-05
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多