区間打ち切りデータのdinterval()はJAGSでどのように機能しますか?


8

検閲済みデータの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)

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

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"のエラー」:ノード逸脱のトレースモニターを設定できませんでした

注:OpenBUGSで同様のモデルを実行するには、dinterval()行を省略し、I(Lower、Upper)をdnormに追加します。

回答:


6

マーティンプラマーからの回答は次のとおりです。

書かれているように、モデルには観測された結果はありません。あなたはおそらくそれが本当に本当に速く動くことに気づいたでしょう。前回からの順方向サンプリングだからです。これが、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が何をするのかわかりません。多分それは打ち切り変数のための特別なルールを持っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.