Множественные определения ошибки узла в winbugs
Я пытаюсь использовать WinBUGS
от R
с помощью BRugs
а также 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
в loop
,
2 ответа
Вы склонны получать ошибку множественных определений, если вы не правильно определили вероятность вашей модели. Если у вас есть y
в ваших данных, вам нужно будет указать распределение для y
в твоей модели. На данный момент ваш y
в модели устанавливается как детерминированный (а не случайный) узел. В зависимости от вашей реальной модели вы можете установить
y[i] ~ dnorm(x[i], w[i])
Тогда вам нужно будет иметь другое предварительное распределение (что-то только положительное) для каждого допуска w[i].
В вашей модели y [i] имеет нормальное распределение со средним значением x[i] и дисперсией, определяемой дисперсией v [i] плюс дисперсия w[i]. Так что это даст вам соответствующие параметры для использования в y[i] ~ dnorm(x[i], prec[i]). Обратите внимание, что нормальное распределение в BUGS определяется точностью = 1 / дисперсия, поэтому prec [i] <- 1 / (1 / sigma.y + 1 / sigma.x). Предполагая, что сигма является точностью - хотя это вводит в заблуждение, потому что сигма обычно является стандартным отклонением.