2013-03-12 19 views

答えて

11

?RNGkindを参照してください。デフォルトでは、反転アルゴリズムです:

normal.kindは "Kinderman-たRamage"、 "バギーKinderman-たRamage"(set.seedのためではない )、 "アーレンス・ディーター"、 "ボックス・ミュラー"、 "反転" することができ(デフォルトは )、または「ユーザー指定」です。 (反転については、 qnormの参考文献を参照してください)1.7.1より前のバージョンで使用されているKinderman-Ramageジェネレータは、いくつかの近似誤差があり、古い結果の再現にのみ使用する必要があります。 "Box-Muller"ジェネレータは、法線のペアが生成され、順番に返されるのでステートフルで です。 状態が選択されると(現在の ノーマルジェネレータであっても)状態がリセットされ、種類が変更されたときに状態がリセットされます。

あなたが現在RNGkind()[2]を見て、設定されているものを見つけることができます

RNGkind(normal.kind = "Box-Muller") 

でアルゴリズムを変更することができます。

+0

標準正規分布乱数を生成するためにrnorm関数がmvtnormパッケージで使用されていれば、ありがとうございます。 – Klaus

+0

@Klausはい、 'mvtnorm'の' rmvnorm'は同じ 'rnorm'関数を使います。 –

+0

デフォルトのオプションは使用していますか? – Klaus

6

もう1つの答えで十分ですが、もう少し質問があります。特に私は文書のどこにも* "Inversion"アルゴリズムがあるので、source codeに分割しました。これは他の可能なアルゴリズムを起源とする論文を学術的に参照し、正確に何が行われているか把握しています。

case INVERSION: 
#define BIG 134217728 /* 2^27 */ 
    /* unif_rand() alone is not of high enough precision */ 
    u1 = unif_rand(); 
    u1 = (int)(BIG*u1) + unif_rand(); 
    return qnorm5(u1/BIG, 0.0, 1.0, 1, 0); 

だから、それがベースにデフォルト"Inversion"アルゴリズムは非常に長い浮動小数点数を生成しそうですし、正規分布のためのCDF関数であるqnorm5機能に送信します。

普通のCDFでも逆CDFでもクローズドフォームがないので、qnorm5の機能については、私はソースコードのように幸運を覚えていませんでしたが、すなわち、Beasley, J. D. and S. G. Springer (1977)およびWichura, M.J. (1988)。前者はCDFの小さな分位数に使用され、後者は大きな(z>7程度)のために使用されます。

(この執筆時点で)このアルゴリズムはshared by the Julia languageであると思われ、Rによって使用されるqnorm5コードも共有されています。

*振り返ってみると、上で参照されている?qnormにはWichuraが記載されています。それでも、このスレッドで物事を綴ることは価値があると思います。

+0

ありがとうございました!私はこの答えを探していた! –

関連する問題