0
我對R和OpenBugs相對較新,並且花了很多時間對這個模型進行故障排除。我可以通過在線資源自己找出相當數量的這些資源,但是我一直在困擾這個錯誤。它說這是「節點dummyy [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)
日誌報告:
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