18 3. Generowanie zmiennych losowych I. Ogólne metody
dodawać zmienne Ei możemy mnożyć zmienne U i. Mamy N — max{n : Pn > e A}, gdzie Pn = Ui---Un.
3.2. Metoda przekształceń
Zmienna losowa Y, która ma postać Y = h(X), a więc jest pewną funkcją zmiennej X, w naturalny sposób „dziedziczy” rozkład prawdopodobieństwa zgodnie z ogólnym schematem P(y € •) — P(h(X) € •) — P(X € h-1(-)) („wykropkowany” argument jest zbiorem). Przy tym zmienne X i Y nie muszą być jednowymiarowe. Jeśli obie zmienne mają ten sam wymiar i przekształcenie h jest dyfeomorfizmem, to dobrze znany wzór wyraża gęstość rozkładu Y przez gęstość X (Twierdzenie 5.1). Odpowiednio dobierając funkcję h możemy „przetwarzać” jedne rozkłady prawdopodobieństwa na inne, nowe.
Prawie wszystkie algorytmy generowania zmiennych losowych zawierają przekształcenia zmiennych losowych jako część składową. W niemal „czystej” postaci metoda przekształceń pojawiła się w algorytmie Boxa-Miilłera, Przykładzie 3.4. Najważniejszym być może szczególnym przypadkiem metody przekształceń jest odwracanie dystrybuanty.
3.2.1. Odwrócenie dystrybuanty
Faktycznie, ta metoda została już wykorzystana w Przykładzie 3.2. Opiera się ona na prostym fakcie. Jeżeli F jest ciągłą i ściśle rosnącą dystrybuantą, U ~ U(0,1) i X — F~l(U), to X = F~l{U) ~ F. Następująca definicja funkcji „pseudo-odwrotnej” pozwala pozbyć się kłopotliwych założeń.
Definicja 3.1. Jeżeli F : R —» [0,1] jest dowolną dystrybuantą, to funkcję F~ :]0,1[—> R określamy wzorem:
F~(u) = inf{x : F(x) > u}.
Stwierdzenie 3.1. Nierówność F~(u) < x jest równoważna u < F(x), dla dowolnych u €]0,1[ * x € R.
Dowód. Z prawostronnej ciągłości dystrybuanty F wynika, że kres dolny w Definicji 3.1 jest osiągany, czyli
F(F~(u))>u.
Z drugiej strony,
F~(F(x)) = min{y : F(y > F(a:)} < x,
po prostu dlatego, że x € {y : F(y > F(x)}. Teza stwierdzenia natychmiast wynika z dwóch nierówności powyżej. □
Wniosek 3.1 (Ogólna metoda odwrócenia dystrybuanty). Jeżeli U ~ U(0,1) i X — F~(U), to P(X < x) = F(x). W skrócie, X ~ F.
Na Rysunku 3.2 widać 20 punktów U20, które wylosowałem z rozkładu U(0,1) (na
osi pionowej) i odpowiadające im punkty Xi — F-1(l7j) (na osi poziomej). W tym przypadku, F jest dystrybuantą rozkładu Gamma(3,1) (Unia krzywa). Najważniejszy fragment kodu w R jest taki:
curve(pgamma(x,shape=3,rate=l), from=0,to=10) # rysowanie F
U <- runif(20); X <- qgamma(U,shape=3,rate=l)
Zauważmy, że ta metoda działa również dla rozkładów dyskretnych i sprowadza się wtedy do metody „oczywistej”.