Identyfikacja i modelowanie struktur i procesów biologicznych Laboratorium 3: Generatory liczb losowych. Rozkłady statystyczne mgr inż. Urszula Smyczyńska AGH Akademia Górniczo-Hutnicza 1. Cel zajęć Celem ćwiczenia jest zapoznanie z metodami generowania ciągów losowych (pseudolosowych) liczb przy użyciu komputera, sposobami oceny jakości wygenerowanych sekwencji oraz podstawowymi rozkładami statystycznymi. 2. Wstęp 2.1. Ciągi liczb pseudolosowych Generowanie i badanie ciągów losowych odgrywa w statystyce i modelowaniu istotną rolę. Komputerowe symulacje różnych procesów oraz obliczenia numeryczne często wymagają wykorzystania losowych sekwencji liczb. Korzystamy z nich np. do automatycznego generowania haseł, modelowania szumu czy inicjalizacji algorytmów uczenia maszynowego, takich jak sieci neuronowe. Zwykle oczekuje się przy tym, że taki ciąg liczb będzie miał z góry zadane parametry statystyczne średnią, odchylenie standardowe, zakres czy konkretny rozkład (np. równomierny, normalny), co oczywiście można sprawdzić po uzyskaniu tych liczb. Pozostaje pytanie: jak komputer urządzenie deterministyczne może wygenerować losowy ciąg? Jeśli za kryterium losowości przyjmiemy brak zrozumiałej przyczyny (czy algorytmu) powstania takiego ciągu to odpowiedź brzmi: nie może. Mimo tego sytuacja nie jest całkowicie beznadziejna, ponieważ możliwe jest komputerowe generowanie ciągów tzw. liczb pseudolosowych, czyli takich, które sprawiają wrażenie losowych, w tym sensie, że brak w nich porządku i bez znajomości algorytmu nie będziemy w stanie przewidzieć kolejnych wyników. Niewątpliwą zaletą takich generatorów programowych jest łatwość ich użycia i możliwość produkowania nawet długich ciągów liczb bez ponoszenia poważnych kosztów. Alternatywa generatory sprzętowe, działające w oparciu o zjawiska prawdziwie losowe, np. rozpad promieniotwórczy są zdecydowanie trudniejsze w użyciu, a ich stosowanie wymaga zdecydowanie większych nakładów finansowych. Zdarza się też, że pożądane właściwości statystyczne ciągów liczb łatwiej uzyskać w generatorze programowym, który w przeciwieństwie do sprzętowego nie zmienia właściwości z czasem. 1
2.2. Rozkład statystyczny Statystyczne właściwości zmiennej losowej często opisujemy za pomocą jej rozkładu prawdopodobieństwa, czyli funkcji opisującej prawdopodobieństwo wystąpienia poszczególnych wartości. Taka funkcja gęstości prawdopodobieństwa P(x) musi spełniać następujący warunek: P( x)=1, co oznacza, że suma prawdopodobieństw wszystkich zdarzeń (wartości) wynosi 1. Korzystając z powyższej właściwości często wprowadza się dystrybuantę funkcji gęstości prawdopodobieństwa, jako funkcję: z F(z)= P( x)dx, która każdej wartości z przypisuje łączne prawdopodobieństwo wystąpienia w ciągu wszystkich wartości nie większych od z. Ponieważ F(z) wyraża prawdopodobieństwo jej zakres wartości wynosi zawsze [0, 1], niezależnie od tego jaki opisuje rozkład. 2.3. Najpopularniejsze rozkłady statystyczne Do najczęściej stosowanych rozkładów statystycznych należą: Nazwa Funkcja gęstości prawdopodobieństwa Dystrybuanta 1 dla x [a,b] b a P(x)={ 0 dla x [a,b] 0 dla x (,a) x a dla x [a, b) b a F(x)={ 1 dla x [b, ) Rozkład równomierny (jednorodny, jednostajny, płaski) 2
P(x)= 1 σ (2π ) exp ( (x μ)2 2σ 2 ) Analitycznie nie da się dokładnie wyznaczyć. Rozkład normalny (Gaussa) Rozkład chi kwadrat ( Χ 2 ) Rozkład Studenta (t, t-studenta) P(x)={ λ e λ x x 0 0 x<0 F(x)={ 1 e λ x x 0 0 x<0 Rozkład wykładniczy 3
Oznaczenia: a, b dowolnie wybrane liczby, takie, że b>a μ średnia σ odchylenie standardowe k liczba stopni swobody 3. Generatory liczb losowych 3.1. Generator liniowy Liniowy generator liczby losowych ma następującą ogólną postać, określającą wartość n+1 wygenerowanej liczby: X n +1 =(a 1 X n +a 2 X n 1 +...+a k X n k+1 +c) mod m Jak widać generator korzysta z k liczb, będących dotychczasowym rezultatem jego pracy lub na początku z k liczb podanych jako inicjalizujące jego działanie, pomnożonych przez odpowiednie współczynniki. Operacja modulo (mod), czyli obliczanie reszty z dzielenia przez m, zapewnia efekt pseudolosowości. Generator tego typu daje na wyjściu liczby całkowite, mniejsze od m (reszta z dzielenia przez m może wynosić co najwyżej m-1), przy czym ich rozkład jest równomierny. Jeśli chcemy taki wynik przekształcić na generator liczb z zakresu (0,1) należy uzyskane wartości podzielić przez m. W praktyce najczęściej wykorzystuje się generatory, które w powyższym obliczeniu uwzględniają tylko jedną poprzedzającą próbkę, co daje: Albo przy pominięciu stałej c: X n +1 =(a X n +c) mod m X n+1 =(a X n ) mod m W obu powyższych przypadkach do zainicjalizowania generatora potrzeba tylko 1 liczby. Łatwo również zauważyć, że przy danym X n wartość X n+1 jest zdeterminowana jednoznacznie, stąd gdy jakaś wartość pojawi się w sekwencji po raz drugi, automatycznie powtarza się cały ciąg. Zatem generator jest okresowy, choć okres może być tak długi, że będzie to trudne do zaobserwowania. Przykładowe wartości parametrów generatora: 1. a=2 16 +3 i m=2 31 generator RANDU 2. a=4 23 7 +1 i m=2 31 generator RNB 3. a=7 5 i m=2 31 1 4
3.2. Przekształcanie rozkładu równomiernego na inny Czasem potrzeba, aby wygenerowane losowe liczby miały rozkład inny niż równomierny, np. normalny. Najczęściej osiąga się to przez odpowiednie przekształcenie wyników uzyskanych z generatora o rozkładzie równomiernym, co można wykonać na wiele sposobów. A. Odwracanie dystrybuanty Odwracanie dystrybuanty jest metodą pozwalającą przekształcić rozkład równomierny na inny, przy czym najlepiej taki, którego dystrybuanta jest opisana stosunkowo nieskomplikowanym równaniem funkcji y(x). W celu odwrócenia dystrybuanty potrzebna jest zależność odwrotna, czyli funkcja x(y), uzyskana z przekształcenia równania dystrybuanty. Będzie ona jednoznaczna oczywiście tylko wtedy, gdy dystrybuanta jest rosnąca (zwykle tak jest, czasem zdarzają się odcinki funkcji stałej; malejąca być nie może, co wynika z definicji). Aby otrzymać ciąg liczb o rozkładzie opisanym dystrybuantą y, wystarczy wygenerować ciąg z rozkładu równomiernego i przekształcić go zgodnie z zależnością x(y), podstawiając kolejne elementy w miejsce y. Na rysunku poniżej koncepcja odwracania dystrybuanty została przedstawiona graficznie, na przykładzie rozkładu wykładniczego. Jak widać punkty, które były rozłożone równomiernie na osi Y, po przekształceniu na oś X mają już inny rozkład. B. Metoda eliminacji Metoda eliminacji jest bardziej uniwersalna i dla wielu rozkładów prostsza w implementacji niż odwracanie dystrybuanty. W ogólnym przypadku, aby przekształcić rozkład równomierny U(x) na szukany rozkład gęstości prawdopodobieństwa f(x) potrzebujemy w pierwszej kolejności funkcji g(x) takiej, że: c g(x) f ( x), dla pewnej wartości stałej c, jesteśmy w stanie wygenerować ciąg liczb losowych o rozkładzie opisanym przez g(x). 5
Chcąc wygenerować ciąg losowy o rozkładzie f(x) postępujemy następująco: 1. Generujemy liczbę u z rozkładu U(x). 2. Generujemy liczbę X z rozkładu g(x). 3. Jeżeli u< f (X ), zapamiętujemy X jako element szukanego ciągu, w przeciwnym c g( X ) przypadku y odrzucamy. 4. Powtarzamy powyższe, aż do uzyskania żądanej długości ciągu. Na rysunku poniżej znajduje się graficzna ilustracja metody dla generowania liczb z rozkładu normalnego (f(x) niebieska krzywa) za g(x) przyjęto funkcje wykładniczą 0.5 e 0.5 x c=1., natomiast 3.3. Testowanie generatora Istnieje bardzo dużo testów, a nawet standardów testowania, generatorów liczb losowych. Część z nich jest uniwersalna i nadaje się do badania jakości niemal dowolnych generatorów, inne są przydatne tylko w niektórych sytuacjach. Najczęściej chcemy sprawdzić przynajmniej, czy nasz generator rzeczywiście charakteryzuje się zadanymi parametrami statystycznymi, takimi jak średnia, zakres czy odchylenie standardowe oraz czy otrzymaliśmy żądany rozkład wartości ciągu. Drugą istotną sprawą może być stwierdzenie braku (lub obecności) powiązań między kolejnymi wyprodukowanymi przez generator liczbami. 6
A. Badanie parametrów statystycznych Gdy interesują nas cechy statystyczne generatora, najprostszą możliwością ich sprawdzenia jest po prostu wygenerowanie odpowiednio długiego ciągu, obliczenie żądanych wielkości i porównanie ich z wartościami oczekiwanymi. Jeśli chcemy mieć większą pewność, co do wiarygodności wyniku, właściwym rozwiązaniem są testy statystyczne. Istnieje oczywiście bardzo wiele testów stosowanych w różnych okolicznościach. Tutaj najbardziej będą nas interesowały testy dla wartości średniej i odchylenia standardowego próby, przy czym niektórych z nich możemy użyć dla prób o dowolnym rozkładzie, innych tylko w konkretnych przypadkach. W odniesieniu do wartości średniej najpowszechniejszy jest test t-studenta, dzięki któremu możemy zweryfikować hipotezę, że średnia liczb produkowanych przez generator jest równa założonej wartości M. Odchylenie standardowe (lub wariancję) również możemy zbadać odpowiednim testem, z tym, że najczęściej wykonujemy to w odniesieniu do rozkładu normalnego. B. Badanie rozkładu Często bardziej interesujące niż testy odnoszące się do średniej lub odchylenia standardowego są te, które umożliwiają sprawdzenie zgodności rozkładu wartości z naszymi oczekiwaniami. Najbardziej uniwersalnym narzędziem jest w tym przypadku test Χ 2 (chi-kwadrat), który można wykorzystać do oceny zgodności uzyskanego rozkładu próbek z dowolnym rozkładem przewidywanym. Istnieją także inne testy, odpowiednie dla poszczególnych rozkładów prawdopodobieństwa, np. test Shapiro-Wilka dla rozkładu normalnego, stosowany zwłaszcza przy stosunkowo niewielkich próbach czy test Kołmogorowa-Smirnova, wykorzystywany najczęściej również dla rozkładu normalnego. C. Badanie zależności między kolejnymi próbkami W przypadku generatorów losowych istotne jest, aby nie istniało oczywiste statystyczne powiązanie między kolejnymi próbkami, czyli aby były one nieskorelowane. Wstępnie można zbadać to na wykresie zależności dwóch kolejnych próbek, prezentującym funkcję X n ( X n 1 ). Pozwala to zaobserwować pewne wzorce w ciągu oraz zobaczyć na ile równomiernie punkty wypełniają płaszczyznę. Podobnie można postąpić korzystając z sekwencji 3 kolejnych próbek, tworząc wykres trójwymiarowy X n ( X n 1, X n 2 ). Ponadto zależności między próbkami bardziej odległymi można wykryć stosując funkcję autokorelacji, którą w przypadku sygnałów dyskretnych definiujemy następująco: R xx (r)= 1 N r x(i) x(i+r) N r i=1 gdzie: x sygnał, tu: ciąg losowy N długość sygnału (jako ilość próbek) r przesunięcie czasowe (również jako ilość próbek) 7
Wartość takiej funkcji będzie najwyższa przy zerowym przesunięciu czasowym (każdy sygnał jest skorelowany ze swoją kopią). W przypadku ciągu losowego dla kolejnych przesunięć powinna być zdecydowanie mniejsza. 4. Liczby losowe w Matlab'ie 4.1. Generowanie wbudowanymi funkcjami rand generator liczby z rozkładu równomiernego randn generator liczb z rozkładu normalnego ze średnią 0 i odchyleniem standardowym 1 rng funkcja pozwalająca kontrolować parametry powyższych generatorów 4.2. Podstawowe statystyki dla liczb z generatora mean średnia std odchylenie standardowe ttest funkcja realizująca różne warianty testu t-studenta do badania hipotez dotyczących wartości średniej. Najczęściej używana dla populacji o rozkładzie normalnym, ale przydaje się również w innych sytuacjach, o ile badana próba jest duża. vartest test wartości odchylenia standardowego dla rozkładu normalnego 4.3. Badanie rozkładu liczb z generatora hist generowanie histogramu badanego ciągu liczb chi2gof test Χ 2 oceniający zgodność badanego rozkładu z rozkładem teoretycznym. Domyślnie, przy podaniu tylko ciągu badanego, oceniana jest jego zgodność z rozkładem normalnym. 4.4. Badanie powiązań między próbkami xcorr funkcja służąca do obliczania autokorelacji w przypadku podania tylko 1 argumentu (sygnału) lub korelacji wzajemnej w przypadku podania 2 argumentów (sygnałów). plot(x,y) wykres dwuymiarowy scatter3(x,y,z) wykres trójwymiarowy zaznaczenie punktów o współrzędnych opisanych wektorami X, Y, Z. 8
4.5. Funkcje dla popularnych rozkładów Rozkład normalny: normpdf, normfit, normrnd Rozkład wykładniczy: exppdf, expfit, exprnd Rozkład jednorodny: unifpdf, uniffit, unifrnd Rozkład lognormalny: lognpdf, lognfit, lognrnd 5. Literatura: [1] Wieczorkowski R., Zieliński R. Komputerowe generatory liczb losowych, WNT Wydawnictwa Naukowo-Techniczne, Warszawa 1997 [2] Cook J.D. Testing a Random Number Generator, W: Beautiful Testing, red. Riley T., Goucher A., O'Reilly, 2010 [3] Gentle J. Computational Statistics, Springer, 2009. (Generowania liczb losowych dotyczy rozdział 7: Generation of Random Numbers ) [4] Robert C.P., Casella G. Introducing Monte Carlo Methods with R, Springer, 2010 (O generatorach losowych rozdział 2: Random Variable Generation, z przykładami w języku programowania R) [5] Müller-Clostermann B., Jonischkat T. Random Numbers How Can We Create Randomness in Computers?, W: Algorithms Unplugged, red. Vöcking B., Alt H., Dietzfelbinger M., Reischuk R., Scheideler C., Vollmer H., Wagner D., Springer, 2011 [6] Gentle G. Random Number Generation and Monte Carlo Methods, Springer, 2005 9