2013-03-12 6 views

Antwort

11

Siehe ?RNGkind. Der Standardwert ist ein Inversionsalgorithmus:

normal.kind kann "Kinderman-Ramage" seine "Buggy Kinderman-Ramage" (nicht für set.seed), "Ahrens-Dieter", "Box-Muller", "Inversion" (die Standard) oder "vom Benutzer zur Verfügung gestellt". (Für die Inversion, siehe die Referenz in qnorm.) Der Kinderman-Ramage Generator in den Versionen vor 1.7.1 (jetzt "Buggy" genannt) hatte mehrere Näherungsfehler und sollte nur für die Reproduktion von alten Ergebnissen verwendet werden. Der Generator "Box-Muller" ist Stateful, da Paare von Normalen sequenziell generiert und zurückgegeben werden. Der Status wird zurückgesetzt, wenn er ausgewählt wird (auch wenn es der aktuelle Normalgenerator ist) und wenn art geändert wird.

können Sie den Algorithmus ändern, indem

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

können Sie finden, was zur Zeit durch einen Blick auf RNGkind()[2] gesetzt.

+0

danke, weißt du, ob die rnorm-funktion vom mvtnorm-paket verwendet wird, um normalverteilte standardzahlen zu generieren? – Klaus

+0

@Klaus ja, 'mvtnorm's' rmvnorm' verwendet die gleiche 'rnorm' Funktion. –

+0

sie verwenden die Standardoption? – Klaus

6

Die andere Antwort ist ausreichend, aber ließ mich mit einigen weiteren Fragen; Insbesondere habe ich nirgends in der Dokumentation * was auf der Erde der "Inversion" Algorithmus ist, also bin ich in die source code getaucht, die auch akademische Hinweise auf die Papiere gibt, die die anderen möglichen Algorithmen hervorbringen, um herauszufinden, was genau getan wird .

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); 

So scheint es, Basis an dem Standard "Inversion" Algorithmus eine sehr lange Gleitkommazahl erzeugt, dann sendet sie an die qnorm5 Funktion, die eine CDF-Funktion für die Normalverteilung ist.

Wie funktioniert die qnorm5 Funktion (vorausgesetzt, es gibt keine geschlossene Form für die normale CDF noch inverse CDF), ich hatte nicht viel Glück Cracking was scheint der Quellcode here zu sein, aber sie geben weitere akademische Referenzen, nämlich Beasley, J. D. and S. G. Springer (1977) und Wichura, M.J. (1988); ersterer wird typischerweise für kleine Quantile der CDF und letzterer für große verwendet (z>7 oder so).

Es kann auch interessant sein zu beachten, dass (zum Zeitpunkt dieses Schreibens) dieser Algorithmus scheint shared by the Julia language, die auch die qnorm5 Code von R verwendet.

* Um fair zu sein, wird Wichura im Rückblick in ?qnorm erwähnt, auf die oben verwiesen wird. Trotzdem lohnt es sich, Dinge in diesem Thread zu formulieren, denke ich.

+0

Danke! Ich habe nach dieser Antwort gesucht! –

Verwandte Themen