2016-09-28 5 views
0

データブロックとデータ=引数を持つモデルでは、run.jags()の直感的な動作がいくつか発生しています。実際のモデルではrun.jagsにdata引数を使用しているように見えますが、データブロックで使用されているものがないか環境を検索しています。ここでは非常に単純なモデルの例である:run.jagsデータの検索環境

data { 
    ylen <- length(y) 
} 
model { 
    for (i in 1:ylen) { 
     y[i] ~ dnorm(mu,1) 
    } 
    mu ~ dnorm(0,1/10^2) 
} 

私はそうのようにそれを実行すると、私はエラーを取得:

> run.jags('trivial.jags',data=list(y=c(5,5,5,6)),monitor=c('ylen','mu')) 
Error: The following error was obtained while attempting to parse the data: 
Error in eval(expr, envir, enclos) : object 'y' not found 

しかし、私は、呼び出し元の環境に変数「Y」を作成した場合それが使用されているが、非常に奇妙な方法で:

> y<-c(-1,-1,-1) 
> run.jags('trivial.jags',data=list(y=c(5,5,5,6)),monitor=c('ylen','mu')) 
Compiling rjags model... 
Calling the simulation using the rjags method... 
Note: the model did not require adaptation 
Burning in the model for 4000 iterations... 
    |**************************************************| 100% 
Running the model for 10000 iterations... 
    |**************************************************| 100% 
Simulation complete 
Calculating summary statistics... 
Note: The monitored variable 'ylen' appears to be non-stochastic; it will not be included 
in the convergence diagnostic 
Calculating the Gelman-Rubin statistic for 2 variables.... 
Finished running the simulation 

JAGS model summary statistics from 20000 samples (chains = 2; adapt+burnin = 5000): 

    Lower95 Median Upper95 Mean  SD Mode  MCerr MC%ofSD SSeff AC.10 psrf 
ylen  3  3  3  3  0 3  --  -- -- --  -- 
mu 3.8339 4.9742 6.0987 4.9747 0.57625 -- 0.0040089  0.7 20661 0.011 1.0001 

だから、あなたは3に到着し、長さを計算するため、呼び出し元の環境からのyを使用しているように見えることを確認することができますが、データからyの値を使用しました実際のデータのリスト、 mu = 5に到着する。

私がrjagsを使用する場合、実際のモデルとデータブロック内の派生変数の計算の両方にdata =引数を使用して、期待どおりに動作します。

これはランザグのバグですか?データブロックの計算にrun.jags()のdata =引数を使用するにはどうすればよいですか?

は私が上でこれを試してみましたrunjags_2.0.3-2とrunjags_2.0.4-2

答えて

1

はい、これは今、次のリリースのためにあなたの明確かつ再現性の例のおかげで修正される予定runjagsのバグは、あります!問題の根本は、データリスト(JAGSで使用されているデータブロックとは異なる)を含むことができるバグモデルのテキストとの互換性を維持しようとすることです。

一方、Rでylenを計算し、それをデータリストのJAGSに渡したり(モデル自体の#data#構造も参照)、モデルでlength(y)を使用する直接例えば:助け

model { 
for (i in 1:length(y)) { 
    y[i] ~ dnorm(mu,1) 
} 
mu ~ dnorm(0,1/10^2) 
} 

希望、

マット

+0

ありがとう!バグの互換性は必要ないので、read.jagsfile()の呼び出しをデータブロックを解析するwinbugs.extract *に削除しました。それは問題を解決する次のリリースまで私を得るべきです。 –

+0

うん、それも動作するだろう! –

関連する問題