質問

r(R2OpenBugs)を介してOpenBugsを使用して、ランダム変数として観測 "Time"をモデル化しようとしています。すべての観測時間が利用可能な場合(NAのNA)がうまくいきますが、私がNAに時代の1つを設定した場合、何も起こりません。私はWinBugsを使って同じコードをテストし、トラップエラー 'nilの間違い(読み取り)'を取得しました。だから私の質問は私のコードでは本当に間違っているものがありますか、それとも私のモデルはバグのために奇妙すぎるのですか?

私のモデルはこのようなものです:

model{
 for(i in 1:k){
  obs[i] ~ dbern(p) #is the observation done at time 1 or 2?
  y[(i-1)*2 + obs[i]+1] <- x[i]
 }    
 for(i in 1:n){    
   y[i] ~ dnorm(mu,tau) 
 }    
 mu ~ dnorm(0,0.0001)
 tau~ dgamma(0.001,0.001)  
 p ~ dunif(0,1) 
}
.

とRコードは次のようになります。

library(R2OpenBUGS)
x<-obs<-rep(NA,5)
for(i in 1:k)
{
  obs[i]<-sample(c(0,1),1) #observation time of ith observation
  x[i]<-rnorm(1) #observed values
}

obs[2]<-NA #one of the sampling times is missing
INITS <- list(list(tau=1,mu=0,p=0.5))
DATA  <- list(x=x,n=n,k=k,obs=obs)

ob <- bugs(
  data=DATA,
  inits=INITS,
  parameters.to.save=c("tau","mu","p","y"),
  model.file="BUGSModel.R",
  n.chains=1,
  n.iter=50,
  n.burnin=10,
  n.thin=1,    
  DIC=FALSE)
.

役に立ちましたか?

解決

あなたの質問をよく理解しているなら、あなたはこの式がかどうかを尋ねています

obs[i] ~ dbern(p)
.

はwin / openbugsのための奇妙なもので欠けている値を処理しないようにします。いいえ、そうは思わない。バグはこのようにして欠けている値を処理することができ、それはそれらを後処理さえしています。

しかし、私はの強い疑いがあります

y[(i-1)*2 + obs[i]+1] <- x[i]
.

は本当に奇妙です!これは、NULLの展望obs[i]を使用してインデックスを計算すると強制的にバグに問題を引き起こす可能性があります。これは本当に奇妙です、あなたはそれをするための別の方法を見つけるようにしてください。まず、この規則をスキップするためにモデルを単純化してみて、問題が解消されることを賭けます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top