2016-07-10 1 views
0

既知のパラメータを持つモデルからデータを生成するツールとしてJAGSを誤用することはできますか?シミュレーション研究を行い、私がRで開発したモデルの力をテストするために、あらかじめ定義されたモデルからデータポイントをサンプリングする必要があります。JAGS/r2jagsでデータをシミュレートする

残念ながらモデルは幾分難しいです(ARとVARコンポーネントを含む階層構造) Rでデータを直接シミュレートすることはできませんでした。 インターネットを検索しているときに、ブロックをJAGSで使用してJAGSでデータが生成されたblog postが見つかりました。ポストでは、著者はJAGSで直接モデルを推定した。私はRで自分のモデルを持っているので、model{}ブロックなしでデータをRに戻したいと思います。これは可能ですか?モデルブロックは、同じように簡単に固定に基づいてデータを生成するために、「逆」で働くことができます -

ベスト、 は、あなたがこの方法でデータを生成するためのデータ・ブロックを使用する必要が特別な理由はありません

+0

たとえば、 'y.sim [i]〜dnorm(mu、σ^ -2)'を実行し、 'y.sim'を監視します。 – jbaums

+0

これはどこで起こりますか?データ型モデルブロックでは? – winwin

答えて

2

を獲得しますパラメーター。パラメータをJAGSの 'data'として指定し、シミュレートされたデータポイントを監視します(データセットが必要な回数だけ実行します - 1つしかないかもしれません)。

データブロックまたはモデルブロック(またはその両方の組み合わせ)を使用してデータをシミュレートすることは原則ですが、JAGSのモデルブロック(単純で無関係なモデルでも)を持つ必要があります走る。たとえば、次のようにいくつかのデータをシミュレートするために、データ・ブロックを使用しています。

txtstring <- ' 
data{ 
    for(i in 1:N){ 
     Simulated[i] ~ dpois(i) 
    } 
} 

model{ 
    fake <- 0 
} 
#monitor# Simulated 
#data# N 
' 


library('runjags') 

N <- 10 
Simulated <- coda::as.mcmc(run.jags(txtstring, sample=1, n.chains=1, summarise=FALSE)) 
Simulated 

唯一の本当の違いは、モデルブロックがで更新されるのに対し、データブロックは、(シミュレーションの開始時に)一度だけ更新されていることです各反復。この場合、1つのサンプルしか取らないので問題はありませんが、同じJAGSでシミュレートされたデータの複数の実現を生成するには、コードをモデルブロックに配置する必要があります。 [データブロックとモデルブロックの間には別の違いがあるかもしれませんが、私はいかなる手放しも考えられません]。

JAGSからデータを取得して、別の形式(監視対象データ内の任意の配列のインデックスを示す名前を持つ単一のベクトル)にすることになるので、リストに戻すために必要な場合がありますのベクトル/配列/ Rの何でも編集:R2jagsはこれのためのいくつかのユーティリティを提供しない限り - 私はそのパッケージを使用しないように私はよく分かりません。

+0

ありがとう、それは私が探していた答えでした。 – winwin

+2

あなたの最後の点に関して、[jagstoolsパッケージ](https://github.com/johnbaums/jagstools)の 'rearray'は、監視対象の多次元配列を配列に変換し直します。 – jbaums

関連する問題