错误使用来自R
问题描述:
代码WinBUGS软件是以下几点:错误使用来自R
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] <- 1*x[j-1]
取代theta[j] <- b*x[j-1]
,但我已经定义b ~ dunif(-1, 1)
。事实上,我需要在最终模型中设置theta[j] <- a - b*x[j-1]
,并且当我尝试将a
和b
添加到最终模型中时,结果是错误的。任何人都可以找到问题所在?
答
问题出在你的先验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'选择一个合适的位置,我明白了吗?让我看看'tsbugs',谢谢。 – PepsiCo 2013-04-18 09:30:08