winbugs中节点错误的多个定义

时间:2013-04-17 10:30:37

标签: r winbugs r2winbugs

我尝试使用来自WinBUGS RBRugs的{​​{1}},代码如下:

R2WinBUGS

结果没有出来,我发现了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) log.txt的部分内容:

WinBUGS

很明显,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) error,但这是什么意思?我不认为multiple definitions of node y[1]有多个定义,因为我在y[1]中使用y[i]而不是y

2 个答案:

答案 0 :(得分:3)

如果没有正确定义模型的可能性,则往往会出现多个定义错误。如果您的数据中包含y,则需要在模型中说明y的分配。目前,模型中的y被设置为确定性(而非随机)节点。取决于您可以设置的实际型号

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

然后,您必须在每个公差w [i]上有不同的先验分布(只有正数)。

答案 1 :(得分:1)

在你的模型中,y [i]具有正态分布,均值为x [i],方差由v [i]的方差加上w [i]的方差定义。因此,它将为您提供在y [i] ~dnorm(x [i],prec [i])中使用的适当参数。注意,BUGS中的正态分布由precision = 1 / variance定义,因此prec [i]&lt; -1 /(1 / sigma.y + 1 / sigma.x)。假设西格玛是精确的 - 虽然这是令人困惑的表示法,因为西格玛通常是一个标准偏差。