Welcher Algorithmus wird von der Funktion rnorm verwendet?

8

Welcher Algorithmus verwendet standardmäßig die Funktion rnorm , um normal normalverteilte Zufallszahlen zu generieren?

    
Klaus 12.03.2013, 18:49
quelle

2 Antworten

11

Siehe ?RNGkind . Der Standardwert ist ein Inversionsalgorithmus:

  

normal.kind kann "Kinderman-Ramage", "Buggy Kinderman-Ramage" sein (nicht   für set.seed ), "Ahrens-Dieter", "Box-Müller", "Inversion" (der   Standard) oder "vom Benutzer bereitgestellt". (Für die Umkehrung, siehe die Referenz in    qnorm .) Der Kinderman-Ramage-Generator, der in den Versionen vor 1.7.1 verwendet wurde   (jetzt "Buggy" genannt) hatte mehrere Näherungsfehler und sollte nur   für die Reproduktion von alten Ergebnissen verwendet werden. Der "Box-Müller" -Generator ist   Stateful als Paare von Normalen werden sequenziell generiert und zurückgegeben.   Der Status wird zurückgesetzt, wenn er ausgewählt wird (auch wenn es sich um den aktuellen Status handelt)   normaler Generator) und wenn Art geändert wird.

Sie können den Algorithmus mit

ändern %Vor%

Sie können herausfinden, was aktuell eingestellt ist, indem Sie RNGkind()[2] betrachten.

    
Jouni Helske 12.03.2013, 19:04
quelle
6

Die andere Antwort ist ausreichend, aber hat mir noch einige Fragen hinterlassen; Insbesondere habe ich nirgends in der Dokumentation * gesehen, was in der Welt der Algorithmus "Inversion" ist, also tauchte ich in die Quellcode , der auch akademische Verweise auf die Papiere gibt, die die anderen möglichen Algorithmen hervorbringen, um herauszufinden, was genau getan wird.

%Vor%

So scheint es, dass der Standard-Algorithmus "Inversion" eine sehr lange Fließkommazahl generiert und dann an die Funktion qnorm5 sendet, die eine CDF-Funktion für die Normalverteilung ist.

Wie funktioniert die qnorm5 Funktion (da es keine geschlossene Form für die normale CDF oder inverse CDF gibt), hatte ich nicht viel Glück beim Knacken, was anscheinend der Quellcode ist hier , aber sie geben weitere akademische Referenzen, nämlich Beasley, JD und SG Springer (1977) und Wichura, MJ (1988) ; ersterer wird typischerweise für kleine Quantile der CDF verwendet und letzterer für große ( z>7 oder so).

Es mag auch interessant sein zu bemerken, dass (zum jetzigen Zeitpunkt) dieser Algorithmus anscheinend wird von der Julia-Sprache geteilt , die auch den von qnorm5 verwendeten R -Code teilt.

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

    
MichaelChirico 28.08.2015 19:26
quelle

Tags und Links