Dlaczego generatory liczb losowych, takie jak runif()
w R, nie generują za każdym razem tego samego wyniku?
Na przykład:
X <- runif(100)
X
generuje różne wyniki za każdym razem.
Jaki jest powód generowania różnych wyników za każdym razem?
Jakie funkcje działa w tle, aby to zrobić?
r
algorithms
random-generation
uniform
Himabindu Kunani
źródło
źródło
Odpowiedzi:
W istocie nie jest to tak naprawdę tylko pytanie R. bardziej ogólnie dotyczy generowania liczb losowych.
Liczby „losowe” są bardzo ważne w wielu częściach statystyki. Potrzebujemy wygenerowanych wartości losowych, aby mieć określone właściwości, i (zwykle) wiele wysiłku poświęca się konstruowaniu generatorów liczb losowych i sprawdzaniu ich właściwości.
Chodzi o to, że chcemy uzyskać ciąg wartości, które są dobrym proxy dla faktycznie liczb losowych. Zwykłym koniem roboczym generowania liczb losowych jest rozkład równomierny (z tego konstruujemy inne, takie jak liczby losowe Gaussa).
Tak więc (najczęściej) algorytm numeryczny jest używany do konstruowania sekwencji liczb całkowitych, z których każda jest pod względem funkcji poprzednich. Te liczby całkowite są następnie skalowane do wartości od 0 do 1 (zwykle ).[ 0 , 1 )
Na przykład wielu po prostu pracuje nad poprzednim:
Zobacz
?runif
w R, a zauważysz, że wyjaśnia on istnienie losowego ziarna, wraz z linkiem do pomocy na ten temat,?.Random.seed
który wyjaśnia dużą liczbę generatorów liczb losowych dostępnych w R (możesz nawet podać własne). Ta sama strona pomocy wyjaśnia, że jeśli nie użyłeś generowania liczb losowych przed ani nie ustawiłeś materiału siewnego, na początek ziarno jest pobierane z zegara, a następnie zapisywana jest poprzednia wartość (aby następna otrzymana liczba losowa była ten sam, który uzyskałbyś, gdybyś wygenerował jeszcze jedną wartość ostatnim razem - pamięta „gdzie jesteś”.Funkcja
runif
w R (podobnie jak kilka innych procedur generowania liczb losowych w innych pakietach, które zwykle mogą zrobić coś podobnego) wie o miejscu, w którym przechowywane jest ziarno liczb losowych. Wciąż aktualizuje tę wartość. Więc może działać bez konieczności jawnego przekazywania nasion, ale nadal używa jednego; jeśli go nie podałeś, po prostu używa tego, który zapisał jako ostatni.Co do tego, dlaczego daje różne wyniki za każdym razem (jeśli nie powiesz mu, aby podawał tę samą sekwencję): robi to, ponieważ te same wartości za każdym razem byłyby zwykle bardzo nieproduktywne - nie miałyby właściwości, które się powtarzałyby miałoby to losowe próbkowanie, co czyni go mało przydatnym do celów, w których używamy generatorów liczb losowych.
źródło
Musisz ustawić losowe ziarno , aby za każdym razem uzyskać ten sam wynik. Użyj ? Set.seed, aby to zrobić. Rozważać:
Być może zainteresuje Cię przeczytanie: Powody korzystania z funkcji set.seed .
źródło