首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >winbugs中节点错误的多种定义

winbugs中节点错误的多种定义
EN

Stack Overflow用户
提问于 2013-04-17 18:30:37
回答 2查看 1.9K关注 0票数 3

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-17 19:48:16

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

代码语言:javascript
复制
y[i] ~ dnorm(x[i], w[i])

然后,你必须在每个容差wi上有一个不同的先验分布(只有正的东西)。

票数 4
EN

Stack Overflow用户

发布于 2013-04-19 16:55:48

在您的模型中,yi具有正态分布,均值为xi,方差由vi的方差加上wi的方差定义。因此,这将为您提供在yi ~ dnorm(xi,preci)中使用的适当参数。请注意,BUGS中的正态分布由精度=1/方差定义,因此精度<- 1/ (1/sigma.y + 1/sigma.x)。假设sigma是精度-尽管这是一个令人困惑的符号,因为sigma通常是一个标准偏差。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16057710

复制
相关文章

相似问题

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