我正在尝试使用R中的“R2OpenBUGS”包进行简单的线性回归分析。当我运行“bugs”命令时,我面临错误。
在命令行中添加“debug = T”后,我在OpenBUGS中收到此错误:
预期右括号错误pos 130
这是我在R中的代码:
library(R2OpenBUGS)
library(coda)
MODEL <- function() {
for (i in 1:N) {
y[i] ~ dnorm(mu[i], s2)
mu[i] <- b0+b1*(x[i])
}
b0 ~ dnorm(0, 1/9)
b1 ~ dnorm(0, 1/9)
s2 ~ dgamma(3, 1)
s2 <- 1/s2
}
write.model (model,"MODEL.txt")
INIT <- function() {
list(b0 = runif(1,-9, 9),
b1 = runif(1,-9, 9),
s2 = rexp(1,1/3))
}
DATA=list(y=c(15,33,26,21,39,40,14,38,20,32),
x=c(3,7,6,3,9,9,2,9,5,6),N=10)
BUGS=bugs(data = DATA, inits = INIT,
parameters.to.save = c("b0", "b1", "s2"),
model.file = "MODEL.txt", n.chains = 1,
n.iter = 10000, n.burnin = 100, codaPkg=TRUE, debug = T)
答案 0 :(得分:0)
您需要将b0
和b1
的精度参数设置为0.11,而不是1/9。 precision参数必须是浮点数,否则OpenBUGS将返回错误。
此外,您已将s2
定义为随机变量,然后为其分配值。 BUGS也不喜欢这样。您应该创建一个新变量tau
,以指定s2
的倒数值。您的型号代码应如下所示:
MODEL <- function() {
for (i in 1:N) {
y[i] ~ dnorm(mu[i], tau)
mu[i] <- b0+b1*(x[i])
}
b0 ~ dnorm(0, 0.11)
b1 ~ dnorm(0, 0.11)
s2 ~ dgamma(3, 1)
tau <- 1/s2
}