3

私はJAGSを初めて使用し、打ち切りデータに対してJAGSでdinterval()がどのように機能するかを理解しようとしています。各データポイントの上限と下限のみがある粗いデータをモデル化しています(真の値ではありません)。これがどのように機能するかを示す簡単な例です。

各ポイントのいくつかの上限と下限:

> head(lim)
        L        U
[1,] 14.98266 15.68029
[2,] 21.21827 21.91590
[3,] 18.34953 19.04716
[4,] 19.00186 19.69949
[5,] 15.39891 16.09654
[6,] 17.81705 18.51468

モデルを作成する関数(データが共通の平均と分散を持つ正規分布からのものであると想定):

playmodel <- function(){
           for (i in 1:50){
                is.censored[i] ~ dinterval(t[i], lim[i,])
                t[i] ~ dnorm(mu,tau)
               }
           mu ~ dnorm(0,.001)
           tau ~ dgamma(.01,.01)
          } 
          filename <- "toymod.bug"
          write.model(toymod,filename)

ジャグ呼び出しのいくつかの関数と割り当て:

data <- list("lim"=lim)
inits <- list(mu=rnorm(1),tau=rgamma(1,.01,.01),t=as.vector(apply(lim,1,mean)))
#last part is to ensure the starting value is between the upper and lower limit
#each chain will start at the same place for t but this is just for this case
params <- c("mu","tau")

そして、モデルを実行します。

playmodel.jags <- jags(data,inits, params, model.file="toymod.bug", n.chains=3,
                  n.iter=50000,n.burnin=30000, n.thin=1, DIC=TRUE, 
                  working.directory=NULL,refresh = 50000/50, progress.bar = "text")

これを実行するとどうなりますか?

1)muの推定値は、15になるはずのときに0付近に浮かんでいます。

2)DIC = TRUEの場合、実行されません。

エラー: "jags.samples(model、variable.names、n.iter、thin、type =" trace "のエラー、:ノードの逸脱度のトレースモニターを設定できませんでした

私は愚かなことをしていると確信しており、誰かが私を軌道に乗せるのを手伝ってくれたら幸いです。

4

1 に答える 1

3

以下は、マーティン・プラマーからの回答です。

書かれているように、モデルには観察された結果はありません。あなたはおそらくそれが本当に本当に速く動くことに気づいたでしょう。これは、前回からの順方向サンプリングであるためです。そのため、muの事後平均は前の平均0と同じです。変数名「is.censored」は、生存分析で見つかった左打ち切りまたは右打ち切りのデータに適していますが、問題には適していません。それで、名前を「y」に変更します。あなたが持っている場合

y[j] ~ dinterval(t[j], lim[j,]) 

lim [j]に2つの列がある場合、y[j]は3つの可能な値を取ることができます

y[j] = 0 if t[j] <= lim[j,1] 
y[j] = 1 if lim[j,1] < t[j] <= lim[j,2]
y[j] = 2 if lim[j,2] < t[j] 

区間打ち切りデータをモデル化するには、モデルのデータとしてy[j]を指定する必要があります。あなたの場合、t[j]は常にlim[j、1]とlim [j、2]の間にあるので、データはそうあるべきです。

data <- list("lim"=lim, "y"=rep(1,nrow(lim))) 

DICの問題はかなり深刻です。モデルには結果データがないため、逸脱度は定義されていません。ただし、結果データを提供しても、必要な逸脱度統計(pDを含む)は取得できません。逸脱度はゼロになり、「ジャグ」関数はpDのGelmanヒューリスティックにフォールバックします(これは記述しなかったので、説明を求めないでください)。これもゼロになります。あなたが本当に望む可能性は

p(lim[j,1] < t[j] <= lim[j,2] | mu, tau) 

しかし、JAGSはあなたに与えています

 p(y[j] | t[j]) 

これは常に1です。DICの「焦点」は間違っています。このような状況でWinBUGSが何をするのかわかりません。おそらく、打ち切り変数には特別なルールがあります。

于 2011-08-09T10:49:17.877 に答える