まず、今日のコンピューター生成「乱数」には真のランダム性はありません。すべての擬似乱数ジェネレーターは、決定論的な方法を使用します。(おそらく、量子コンピューターはそれを変えるでしょう。)
難しいタスクは、真にランダムなソースからのデータと有意に区別できない出力を生成するアルゴリズムを考案することです。
シードを設定すると、擬似乱数の長いリスト内の特定の既知の開始点から開始されるのは正しいです。R、Pythonなどで実装されたジェネレーターの場合、リストは非常に長くなります。最大の実行可能なシミュレーションプロジェクトでさえ、ジェネレータの「期間」を超えないため、値のリサイクルが開始されます。
多くの通常のアプリケーションでは、人々はシードを設定しません。次に、予測不能なシードが自動的に選択されます(たとえば、オペレーティングシステムクロックのマイクロ秒から)。一般的に使用されている擬似乱数ジェネレーターは一連のテストにかけられており、主に初期の不十分なジェネレーターではシミュレートすることが困難であることが判明した問題で構成されています。
通常、ジェネレーターの出力は、実際の目的上、上の一様分布から真にランダムに選択された数値と区別できない値で構成されます次に、それらの擬似乱数が操作されるため、二項分布、ポアソン分布、正規分布、指数分布などの他の分布からランダムにサンプリングするものと一致します。(0,1).
ジェネレーターの1つのテストは、としてシミュレートされた 'observations'の連続するペアが実際にランダムに単位正方形を埋めているように見えるかどうかを確認することです
。(下で2回行います。)わずかに霜降りの外観は、固有の変動性の結果です。完全に均一に灰色に見えるプロットを取得することは非常に疑わしいでしょう。[解像度によっては、規則的なモアレパターンが存在する場合があります。その偽の効果が発生した場合は、倍率を上下に変更して削除してください。]Unif(0,1)
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))
シードを設定すると便利な場合があります。そのような用途のいくつかは次のとおりです。
プログラミングとデバッグを行う場合、予測可能な出力が便利です。そのため、多くのプログラマーは、set.seed
書き込みとデバッグが完了するまで、プログラムの先頭にステートメントを配置します。
シミュレーションについて教えるとき。sample
R の関数を使用してフェアダイスのロールをシミュレートできることを生徒に見せたい場合は、チートし、多くのシミュレーションを実行し、目標の理論値に最も近いものを選択できます。しかし、それはシミュレーションが実際にどのように機能するかという非現実的な印象を与えます。
最初にシードを設定すると、毎回同じ結果が得られます。学生は私のプログラムのコピーを校正して、意図した結果が得られることを確認できます。その後、独自のシードを使用するか、プログラムに独自の開始位置を選択させることにより、独自のシミュレーションを実行できます。
たとえば、2つのフェアダイスを振ったときに合計10が得られる確率は、3100万回の2ダイス実験では、2〜3桁の精度が得られるはずです。シミュレーションエラーの95%マージンは約2 √
3/36=1/12=0.08333333.
2(1/12)(11/12)/106−−−−−−−−−−−−−−−√=0.00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
シミュレーションを含む統計分析を共有する場合。
現在、多くの統計分析には、置換テストやギブスサンプラーなどのシミュレーションが含まれています。シードを表示することにより、分析を読んでいる人が、必要に応じて結果を正確に複製できるようにします。
ランダム化を含む学術論文を書くとき。学術論文は通常、複数回の査読を経ます。プロットでは、たとえば、ランダムにジッターされたポイントを使用して、オーバープロットを減らします。レビュー担当者のコメントに応じて分析をわずかに変更する必要がある場合は、特定の無関係なジッターがレビューラウンド間で変更されないことが望ましいです。これは、特に気の利いたレビュー担当者を混乱させる可能性があります。
2^19937 − 1
ます。シードは、ジェネレータが起動するこの非常に長いシーケンスのポイントです。はい、それは決定論的です。