- ベストアンサー
モンテカルロ法の乱数列は何が問題か?
- モンテカルロ法を使って計算する際に注意すべき点は、乱数列の生成方法です。
- 50区分の頻度検定だけでは乱数列の一様性を確認できず、正しいモンテカルロ法の計算には不適切です。
- モンテカルロ法を正しく行うには、乱数列の周期が必要な乱数の数よりも十分に大きいことが必要です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
最も極端な話、arguistさんの作った「(疑似)乱数列」r[n] が 1,2,3,4,.......,50, 1.5,2.5,3.5, ...., 50.5, 1.25,2.25, ....., 50.25, 1.75,2.75, ...., 50.75, 1.125, .... だったとしましょうか。 χ二乗検定は完璧にパスしそうですね。周期はない。十分周期が長いわけです。 で、これを使って、50個の要素からなる列x[j] (j=1,2,...,50)から二つのサンプルを取り出すのに x[r[n]の整数部分], x[r[n+1]の整数部分] という風にやったとすると、ほとんどいつも、列xの中から隣り合う二つの要素を拾い出すことになります。 x[j]がjに多少とも依存するものであったとすれば、(たとえば、最も極端な場合 x[j] = j だったとすれば)選ばれた二つのサンプルには相関がある。 そういうわけで、一連の部分列r[n],r[n+1],...,r[n+m-1]に相関があってはまずいわけです。m=2の場合ならX[n]=r[n], Y[n]=r[n+1] として、(X[n],Y[n])を2次元のグラフにプロットしてみれば一目瞭然でしょう。 もちろん、「乱数列」をどう使うかにも依ります。滑らかな関数f(x)の定積分をするためにこの乱数列を用いても多分問題はない。単に等間隔にサンプルを採って平均を求めるんですから、丁度50の倍数の個数のサンプルを採るか、あるいはうんと沢山のサンプルを採れば、大抵正解に近い値が得られるでしょう。 しかし、2変数関数f(x,y)の定積分をしたくてx,yを選ぶのにこの「乱数列」を使っちゃうとダメなのはもうお分かりですね。 一般に、モンテカルロ法というのは相手にしている関数が多変数である場合、とくにその変数の数が多くて等間隔にサンプリングしてたんじゃとても計算が終わらないや、って場合にこそ有用な方法ですから、部分列r[n],r[n+1],...,r[n+m-1]の無相関性が非常に重要になります。
お礼
なるほど。よくわかりました。 例えば、1本の乱数列から交互に要素をとって(A列:2n-1番目の数、B列:2n版目の数など)計算をする場合には、A列とB列が無相関であることが重要なわけですね。 そういえば、連の検定とか系列相関検定とかあったのを思い出しました。 ありがとうございました。