stats パッケージの random サブパッケージ
使い方
stats[random, distribution](quantity, uniform, method)
random[distribution](quantity, uniform, method)
パラメータ
distribution - この分布に従って生成される乱数
quantity - (オプション, default=1) 必要とされる乱数の個数を表す正の整数、または、キーワード 'generator'
uniform - (オプション, default = 'default') 一様に分布する数を 1 つずつ生成する手続き、または、キーワード 'default'
method - (オプション, default = 'auto') キーワード 'auto', 'inverse' ,'builtin'のいずれか
|
説明
|
|
•
|
サブパッケージ stats[random, ...] は、指定された分布を持つ乱数を提供します。
|
•
|
サブパッケージ random は、一様分散乱数のデータ列を、ある分布に従うデータ列に変換するフィルターを提供しています。基礎となる一様乱数ジェネレータは、パラメータ uniform により指定することができます。
|
•
|
デフォルトのジェネレータが使う乱数の種は、関数 randomize() を用いて修正することができます。
|
•
|
乱数ジェネレータは、パラメータ quantity にキーワード 'generator' を指定することによって得られます。生成される乱数の桁数は (もし、Digits により与えられたデフォルト値でなければ) 、'generator' に対するインデックスとして与えられます。randomize() を用いるときは、ジェネレータを生成する以前に指定を完了させていなければなりません。
|
•
|
パラメータ uniform により指定される一様乱数ジェネレータは、0 と 1 の間にある値を 1 つ返します。パラメータ uniform は、独立した一様乱数ジェネレータを用いるという条件の下で、独立した乱数のデータ列の生成を可能にします。互いに独立した良好な一様乱数ジェネレータの設計は、容易な仕事でないことに注意しなくてはいけません。ランダムに選択した乱数ジェネレータは、低品質になる傾向にあります。
|
•
|
パラメータ method により、どの方法により乱数を生成するのかを指定します。もし、method が 'inverse' であれば、連続分布の icdf (inverse cumulative density function、逆累積密度関数) と離散分布の idcdf (inverse discrete cumulative probability function、逆離散累積密度関数) に従って、一様分布データ列を変換します。もし、method が 'builtin' ならば、要求された分布に応じた専用の関数を使うことになります。もし、method が 'auto' ならば、random は、そしてもし存在すれば、'builtin' 法を使用します。専用の関数が無ければ、'inverse' 法を用います。
|
•
|
'inverse' 法により使用可能な分布は、stats[statevalf, icdf] または stats[statevalf,idcdf] のどちらかが存在するすべての分布です。
|
•
|
'builtin' 法により使用可能な分布は、次の通りです。
|
beta chisquare fratio
gamma normald studentst
•
|
alias 機能は、よく使う呼び出し手順を簡略化するために用います。また、with(stats) と入力した後は、with(random) として使うこともできます。
|
•
|
このサブパッケージは stats パッケージの一部なので、with コマンドにより定義しなければいけません。
|
|
|
例
|
|
正規分布に従う乱数を20個生成
>
|
stats[random, normald](20);
|

| (2.1) |
今度は 'inverse' 法を使用してみる
>
|
stats[random, normald](20,'default','inverse');
|

| (2.2) |
ユーザ指定のジェネレータを用いて、ポアソン分布 poisson[3] による乱数を 20 個生成します。
| (2.3) |
>
|
uniform_generator:=proc() # not a very good generator
global seed;
seed:=irem(seed*11,101);
return(seed/101)
end proc:
random[gamma[3]](20,uniform_generator);
|

| (2.4) |
ジェネレータ
>
|
P1:=random[gamma[3]]('generator'):
'P1()'$10;
|
Error, (in stats/random/functions/gamma) cannot evaluate
boolean:
-4.117783036-2.341640787*ln(U()/(1.-1.*U()))+3.*exp(.4472135956*ln(U()/(1.-1.*U())))+4.5*U()^3
<= 0
| |
15 桁の乱数のジェネレータ
>
|
P2:=random[gamma[3]]('generator[15]'):
'P2()'$10;
|

| (2.5) |
|
|