7

私はpsclRでパッケージを使用しており、テスト可能/再現可能な結果を​​生成しようとしています。基礎となる C コードを調べたところ、適切な場所で呼び出されているように見えますが、MCMC モデルからの出力を繰り返すことは不可能のようです。GetRNGstate()PutRNGstate()

R 側で各シミュレーション R の開始状態を確認できるように、 SoDAsimulationResultパッケージから関数をパッケージ化しました。

library(pscl)
library(SoDA)
run1 <- simulationResult(
  ideal(s109, 
    normalize=TRUE,
    maxiter = 500,
    thin = 10,
    burnin = 0),
  seed = 42)

run2 <- simulationResult(
  ideal(s109, 
    normalize=TRUE,
    maxiter = 500,
    thin = 10,
    burnin = 0),
  seed = 42)

少なくとも R 側で開始状態が同じであることを確認できます。

all.equal(run1@firstState, run2@firstState)

しかし、出力は異なります。

all.equal(run1@result$xbar, run2@result$xbar)

反復回数を増やすことはできますが、RNG 状態が伝播されている場合は問題になりません。本当に単純なものが欠けていますか?ありがとう。

編集all.equal(run1@lastState, run2@lastState):(各実行の終了状態)は同じである必要がありますが、最終的には異なることに注意してください。私の推測では、C によって呼び出される R RNG 関数以外の不測の事態の原因が、それらの RNG 関数が呼び出される回数に影響を与えているということです。奇妙。

編集2

また、OS X 10.8.4 で pscl 1.04.4 を使用して R 3.0.1 を使用していることも追加する必要があります。

4

3 に答える 3