7

S-Plusで大規模なモンテカルロシミュレーションを実行するときはいつでも、それが完了するのを待つ間、私はいつもあごひげを生やしてしまいます。

Rでモンテカルロシミュレーションを実行するための最良のトリックは何ですか?分散方式でプロセスを実行する良い例はありますか?

4

4 に答える 4

11
  • 複数のコア/マシンの使用は、並列の独立したレプリケーションを使用しているだけであれば簡単ですが、乱数ジェネレーターの一般的な欠陥に注意してください (たとえば、現在の時間をシードとして使用している場合、それぞれに 1 つの RNG を持つ多くのプロセスを生成すると、相関ランダムが生成される可能性があります)。無効な結果につながる数値- たとえば、この論文を参照してください)

  • 分散削減を使用して、必要な複製の数を減らす、つまり、必要なサンプルのサイズを縮小することができます。より高度な分散削減手法については、多くの教科書 (このなど) に記載されています。

于 2009-09-10T06:06:16.393 に答える
5

ベクトルを事前に割り当ててください!

> nsims <- 10000
> n <- 100
> 
> system.time({
     res <- NULL
     for (i in 1:nsims) {
         res <- c(res,mean(rnorm(n)))
     }
 })
   user  system elapsed 
  0.761   0.015   0.783 
> 
> system.time({
     res <- rep(NA, nsims)
     for (i in 1:nsims) {
         res[i] <- mean(rnorm(n))
     }
 })
   user  system elapsed 
  0.485   0.001   0.488 
> 
于 2009-09-10T18:58:25.933 に答える
3

Latin Hypercube Sampling は簡単に適用でき、結果に大きな影響を与えます。基本的に、一様分布からラテン ハイパーキューブ サンプルを取得し (たとえば、lhs パッケージの randomLHS() を使用)、これを qnorm(uniformsample) を使用して目的の分布に変換します。

于 2009-09-10T07:13:53.447 に答える