2016-09-28 9 views
0

私はRやOpenBugsには比較的新しいので、このモデルのトラブルシューティングに多くの時間を費やしました。私はオンラインでリソースを通して自分自身でかなりの量を把握することができましたが、私はこのエラーに固執しています。それは、「複数のノード・ダミーの定義」であると言われています。私はこのエラーは、インデックスを持たない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) 

ログレポート:あなたは、むしろ、モデルの最後に、M1ループのために閉じ括弧を入れている

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

m2ループの開始前よりも優先されます。つまり、すべてのダミー、loglikey、および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) 
} 

希望、

マット

関連する問題