0

私は R と OpenBugs に比較的慣れておらず、このモデルのトラブルシューティングに多くの時間を費やしてきました。私はオンラインのリソースを使って自分でそれらのかなりの量を把握することができましたが、このエラーで立ち往生しています. それは「ノードdummyy[1]の複数の定義」であると言います。このエラーは、インデックスを持たない for ループ内で変数を定義しようとすることが原因であることが多いことをオンラインで読みましたが、私の変数にはあります。リソースhereに基づいてこのモデルを作成しました。

エラーを見つけるのに苦労しています。以下にリストされているコードは、私が見ているのと同じエラーを生成するはずです。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
4

1 に答える 1

2

m2 ループの開始前ではなく、モデルの最後に m1 ループの右中括弧を配置しました。つまり、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)
}

それが役立つことを願って、

マット

于 2016-09-28T21:46:23.693 に答える