Prism での乱数の生成方法
乱数と疑似乱数
真の乱数を生成する唯一の方法は、サイコロを振る、放射線崩壊の間隔の測定など、ランダムな物理的プロセスによるものです。Prism では、すべてのコンピューター プログラムと同様、定義済みの計算から乱数が生成されます。数値のシーケンスは再現可能であることから、数学者はこの数値を疑似乱数と呼びます。
真の乱数と疑似乱数の違いによって問題が生じることはほとんどありません。ほとんどの場合、コンピューターによって生成された乱数は、データのシミュレーションや分析手法のテストには十分です。
Prism では、時刻を使用して最初の乱数が計算されるため、プログラムを実行するたびに一連の乱数は異なるものが生成されます。
ガウス分布からの乱数
Prism では、『Numerical Recipes in C』 (W. H. Press他, second edition, Cambridge Press, 1992)で示されている考え方に基づいたルーチンを使用して ガウス分布から乱数値が生成されます。関数 RAN3 (『Numerical Recipes』で定義) によって、均等に分布された乱数が生成され、関数 GASDEV により、平均値 0 およびユーザーが入力する標準偏差を使用してこれらの値がガウス分布に変換されます。
相対誤差を選択した場合、まず平均値 0、および入力したパーセント誤差に等しい SD を使用した ガウス分布から乱数が算出されます。続いて、そのパーセントを理想的な Y 値で乗じることにより、その Y 値に追加される実際の乱数値が生成されます。
また、任意の自由度 (df) を使用して t 分布から乱数を生成することも可能です。この方法では、Gaussian よりも広い散布状態をシミュレーションできます。df が低い場合、この分布はかなり広いことを意味します。df が高い場合 (約 20 を超える)、ガウス分布とほぼ区別できません。df=1 の場合、分布は極めて広く (外れ値が多い)、Lorentzian 分布と同一になります。これは Cauchy 分布とも呼ばれます。Prism では、以下の数式を使用して自由度が df の t 分布から乱数が生成されます。

この数式では、Rand は平均値 =0 および SD=1 の ガウス分布から導かれた乱数です。Prism では、自由度が df の t 分布から乱数を算出するため、ガウス分布から導かれた別の乱数の df+1 が生成されます。
Poisson 分布または 2 項分布からの乱数
WH Press 他による『Numerical Recipes, third edition』 の 372 ページから 377 ページに示されている考え方を採用しました。
Excel での乱数
Prism では不可能なシミュレーションも、Excel を使用して可能になることもあります。以下の手法は、Excel 2003 以降のバージョンで機能しますが、それ以前のバージョンの場合は使用しないでください。
Excel には 2 つの乱数関数が備わっています。
| • | RANDBETWEEN(low, high) 式は、入力された最小値と最大値の間の範囲 (これらの値も範囲に含まれる) からランダムに整数を選択します。結果は常に整数となるため、この関数はあまり役には立ちません。 |
| • | RAND() 関数は、0.0 から 1.0 の乱数値を生成します。少なくとも名目上、Excel 関数であるため丸括弧を後に付ける必要がありますが、入力値を取らないため、丸括弧の中には何も入りません。 |
ガウス分布から乱数を生成する場合、RAND() 関数を使用して生成された値は変換が必要になります。この Excel の式では、平均値 0.0、SD 1.0 の ガウス分布から乱数が算出されます。
=NORMSINV(RAND())
RAND() 関数は 0 から 1 までの乱数を算出します。NORMSINV() 関数は 0 から 1 の間の小数を取り、全体に対するその割合が累積的な ガウス分布に含まれるには、平均値 +/- いくつの標準偏差が必要か示します。
この標準偏差で乗じ、平均値を追加すると、その平均値と SD を使用した ガウス分布から乱数が導かれます。たとえば、次の式を使用して、平均値 100、SD 15 の ガウス分布からサンプルを導きます。
=(NORMSINV(RAND())*15)+100