R - OpenBugs - Несколько определений при ошибке узла - Пользовательское распространение
Я относительно новичок в R и OpenBugs и потратил много времени на устранение неисправностей этой модели. Мне удалось выяснить изрядное количество их самостоятельно через ресурсы онлайн, но я застрял на этой ошибке. Это говорит, что это "множественные определения узла dummyy[1]". Я читал в Интернете, что эта ошибка часто вызывается попыткой определить переменную внутри цикла for, у которого нет индекса, но мои переменные имеют. Я создал эту модель на основе ресурса здесь.
Я боролся с обнаружением ошибки. Код, приведенный ниже, должен выдать ту же ошибку, что и я. Я также включил ошибку журнала, которую я видел на OpenBugs. Спасибо, что нашли время, чтобы помочь мне.
Данные:
library(R2OpenBUGS)
n1=20 ; k1=1 ; m1=5; R.x=c(3,3,3,3,3); x=c(1.008195, 1.212885, 1.349857, 1.909607, 7.134668)
n2=20 ; k2=1 ; m2=5; R.y=c(3,3,3,3,3); y=c(0.7507421, 1.3103649, 1.5022302, 1.7875087, 3.1900460)
Модель:
mtemp<-function(){
for (i in 1:m1)
{
dummyx[i]<-0
dummyx[i] ~ dloglik(logLikex[i])
logLikex[i] <- -log(a)-log(c)-(c-1.0)*log(x[i])+(a*k1*(R.x[i]+1.0)+1.0)*log(1.0 + pow(x[i],c))
for(j in 1:m2){
dummyy[j]<-0
dummyy[j] ~ dloglik(logLikey[j])
logLikey[j] <- -log(b)-log(c)-(c-1.0)*log(y[j])+(b*k2*(R.y[j]+1.0)+1.0)*log(1.0 + pow(y[j],c))
}
a ~ dgamma(0.001, 0.0001)
b ~ dgamma(0.001, 0.0001)
c ~ dgamma(0.001, 0.0001)
}
}
model.file <- file.path(tempdir(), "model.txt") #create temporary directory
write.model(mtemp, model.file) #write to temporary directory
file.show(model.file) #verify model was created
datatemp<- list( "x","y","R.x","k1","m1","R.y","k2","m2")
initstemp<-function(){list(a=7.0,b=7.0,c=4.5)}
bugstemp = bugs(data=datatemp,inits=initstemp,parameters=c("a","b","c"),model.file=model.file,
n.chains=3,n.iter= 10000, n.burnin=1000,n.thin=1, debug=T)
Отчет журнала:
model is syntactically correct
data loaded
multiple definitions of node dummyy[1]
model must have been compiled but not updated to be able to change RN generator
BugsCmds:NoCompileInits
BugsCmds:NoCompileInits
BugsCmds:NoCompileInits
model must be compiled before generating initial values
model must be initialized before updating
model must be initialized before monitors used
model must be initialized before monitors used
model must be initialized before monitors used
model must be initialized before monitors used
model must be initialized before DIC can be monitored
model must be initialized before updating
model must be initialized before monitors used
DIC monitor not set
1 ответ
Вы поместили закрывающую скобку для цикла m1 в конец модели, а не перед началом цикла m2. Это означает, что все dummyy, loglikey, а также ab и c определены m1 раз.
Изменить: просто чтобы быть ясно, ваша модель должна быть:
for (i in 1:m1)
{
dummyx[i]<-0
dummyx[i] ~ dloglik(logLikex[i])
logLikex[i] <- ...
}
for(j in 1:m2)
{
dummyy[j]<-0
dummyy[j] ~ dloglik(logLikey[j])
logLikey[j] <- ...
}
a ~ dgamma(0.001, 0.0001)
b ~ dgamma(0.001, 0.0001)
c ~ dgamma(0.001, 0.0001)
И не так, как сейчас
for (i in 1:m1)
{
dummyx[i]<-0
dummyx[i] ~ dloglik(logLikex[i])
logLikex[i] <- ...
for(j in 1:m2)
{
dummyy[j]<-0
dummyy[j] ~ dloglik(logLikey[j])
logLikey[j] <- ...
}
a ~ dgamma(0.001, 0.0001)
b ~ dgamma(0.001, 0.0001)
c ~ dgamma(0.001, 0.0001)
}
Надеюсь, это поможет,
Matt