私はpscl
Rでパッケージを使用しており、テスト可能/再現可能な結果を生成しようとしています。基礎となる 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 を使用していることも追加する必要があります。