2016-09-28 10 views
0

Я относительно новичок в R и OpenBugs и потратил много времени на устранение этой модели. Я был в состоянии выяснить их достаточное количество через ресурсы через Интернет, но я застрял на этой ошибке. В нем говорится, что это «множественные определения манекена узла [1]». Я читал онлайн, что эта ошибка часто вызвана попыткой определить переменную в цикле for, которая не имеет индекса, но мои переменные. Я создал эту модель, основанную на ресурсе here.R - OpenBugs - несколько определений при ошибке узла - произвольное распределение

Я борюсь с обнаружением ошибки. Код, указанный ниже, должен содержать ту же ошибку, которую я вижу. Я также включил ошибку журнала, которую я видел в 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) 

Log Report:

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 

ответ

2

Вы поставили закрывающую скобку для цикла m1 в конце модели, а чем до начала цикла m2. Это означает, что все dummyy, loglikey, а также b и c определяются m1 раз.

Edit: Просто чтобы быть ясно, ваша модель должна быть:

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