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

person math123456789    schedule 28.09.2016    source источник


Ответы (1)


Вы поместили закрывающую фигурную скобку цикла m1 в конец модели, а не перед началом цикла m2. Это означает, что все dummyy, loglikey, а также a b и 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)
}

Надеюсь, это поможет,

Мэтт

person Matt Denwood    schedule 28.09.2016