Warum runif()
generieren Zufallszahlengeneratoren wie in R nicht jedes Mal das gleiche Ergebnis?
Beispielsweise:
X <- runif(100)
X
generiert jedes Mal unterschiedliche Ausgänge.
Was ist der Grund dafür, jedes Mal unterschiedliche Ausgaben zu generieren?
Welche Funktionen hat es im Hintergrund, um dies zu tun?
r
algorithms
random-generation
uniform
Himabindu Kunani
quelle
quelle
Antworten:
Im Kern ist dies nicht wirklich nur eine R-Frage; es bezieht sich allgemeiner auf die Zufallszahlengenerierung.
"Zufallszahlen" sind in vielen Teilen der Statistik sehr wichtig. Wir benötigen die Zufallswerte, die wir generieren, um bestimmte Eigenschaften zu haben, und (normalerweise) wird viel Aufwand in die Erstellung von Zufallszahlengeneratoren und die Überprüfung ihrer Eigenschaften investiert.
Die Idee ist, dass wir eine Folge von Werten erhalten möchten, die ein guter Proxy für tatsächlich zufällige Zahlen sind. Das übliche Arbeitstier der Zufallszahlengenerierung ist die gleichmäßige Verteilung (daraus konstruieren wir andere, wie Gaußsche Zufallszahlen).
Daher wird (am typischsten) ein numerischer Algorithmus verwendet, um eine Folge von ganzen Zahlen zu konstruieren, jede in Bezug auf eine Funktion der vorherigen. Diese ganzen Zahlen werden dann so skaliert, dass sie zwischen 0 und 1 liegen (normalerweise ).[0,1)
Zum Beispiel arbeiten viele nur an der vorherigen:
Wenn Sie
?runif
in R nachsehen, werden Sie feststellen, dass es die Existenz des Zufallsstartwerts erklärt, mit einem Link zu der Hilfe,?.Random.seed
die die große Anzahl der in R verfügbaren Zufallszahlengeneratoren erklärt (Sie können sogar Ihre eigenen angeben). Auf derselben Hilfeseite wird erläutert, dass, wenn Sie zuvor keine Zufallszahlengenerierung verwendet oder den Startwert festgelegt haben, zunächst der Startwert aus der Uhr entnommen und anschließend der vorherige Wert gespeichert wird (sodass die nächste Zufallszahl angezeigt wird) das gleiche, das Sie erhalten hätten, wenn Sie beim letzten Mal einen weiteren Wert generiert hätten - es merkt sich, "wo Sie sind".Die Funktion
runif
in R (wie einige andere Routinen zur Erzeugung von Zufallszahlen in anderen Paketen, die normalerweise etwas Ähnliches tun können) kennt den Ort, an dem der Startwert für Zufallszahlen aufbewahrt wird. Dieser Wert wird ständig aktualisiert. Es kann also funktionieren, ohne dass explizit ein Startwert übergeben werden muss, aber es wird immer noch einer verwendet. Wenn Sie ihm keinen gegeben haben, wird nur der zuletzt gespeicherte verwendet.Warum es jedes Mal unterschiedliche Ausgaben gibt (wenn Sie nicht sagen, dass es dieselbe Sequenz geben soll): Dies geschieht, weil jedes Mal dieselben Werte normalerweise sehr kontraproduktiv wären - es würde nicht die Eigenschaften haben, die sich wiederholen Zufallsstichproben hätten, was es für die Putposes, für die wir Zufallszahlengeneratoren verwenden, nicht sehr nützlich macht.
quelle
Sie müssen den zufälligen Startwert festlegen , um jedes Mal das gleiche Ergebnis zu erzielen. Verwenden Sie dazu ? Set.seed . Erwägen:
Möglicherweise möchten Sie Folgendes lesen: Gründe für die Verwendung der Funktion set.seed .
quelle