Nigdy nie miałem kursu statystyki, więc mam nadzieję, że pytam w odpowiednim miejscu.
Załóżmy, że mam tylko dwa dane opisujące rozkład normalny: średnią i wariancję . Chcę użyć komputera do losowego pobierania próbek z tej dystrybucji, tak aby uszanować te dwie statystyki.
To całkiem oczywiste, że mogę poradzić sobie ze średnią, po prostu normalizując około 0: po prostu dodaj do każdej próbki przed wysłaniem próbki. Ale nie widzę, jak programowo generować próbki, aby uszanować .
Mój program będzie w konwencjonalnym języku programowania; Nie mam dostępu do żadnych pakietów statystycznych.
Odpowiedzi:
Jeśli możesz próbkować z danego rozkładu ze średnią 0 i wariancją 1, możesz łatwo próbować z transformacji położenia w skali tego rozkładu, który ma średnią i wariancję σ 2 . Jeśli x jest próbką ze średniego rozkładu 0 i wariancji 1, to σ x + μ jest próbką o średniej μ i wariancji σ 2 . Wystarczy więc przeskalować zmienną o odchylenie standardowe σ (pierwiastek kwadratowy wariancji) przed dodaniem średniej μ .μ σ2) x
Sposób uzyskania symulacji z rozkładu normalnego ze średnią 0 i wariancją 1 to inna historia. To zabawne i interesujące wiedzieć, jak zaimplementować takie rzeczy, ale niezależnie od tego, czy korzystasz z pakietu statystycznego, czy języka programowania, zalecam uzyskanie i użycie odpowiedniej funkcji lub biblioteki do generowania liczb losowych. Jeśli potrzebujesz porady na temat używanej biblioteki, możesz dodać szczegółowe informacje na temat używanych języków programowania.
Edycja: W świetle komentarzy, kilku innych odpowiedzi oraz faktu, że Fixee zaakceptował tę odpowiedź, podam więcej szczegółów na temat tego, w jaki sposób można wykorzystać transformacje zmiennych jednolitych do uzyskania normalnych zmiennych.
Na koniec dnia poprawnie zaimplementowana metoda nie jest lepsza niż zastosowany jednolity generator liczb pseudolosowych. Osobiście wolę polegać na bibliotekach specjalnego przeznaczenia, które moim zdaniem są godne zaufania. Niemal zawsze polegam na metodach zaimplementowanych w języku R albo bezpośrednio w języku R, albo poprzez interfejs API w języku C / C ++. Oczywiście nie jest to rozwiązanie dla wszystkich, ale nie znam wystarczająco wielu innych bibliotek, aby polecać alternatywy.
źródło
To jest naprawdę komentarz do odpowiedzi Michaela Lwa i komentarza Fixee, ale został opublikowany jako odpowiedź, ponieważ nie mam reputacji na tej stronie do komentowania.
źródło
Oprócz odpowiedzi NRH, jeśli nadal nie masz możliwości wygenerowania losowych próbek ze „standardowego rozkładu normalnego” N (0,1), poniżej jest dobry i prosty sposób (ponieważ wspominasz, że nie masz danych statystycznych pakiet, poniższe funkcje powinny być dostępne w większości standardowych języków programowania).
1. Wygeneruj u i v jako dwie równomiernie rozmieszczone liczby losowe w zakresie od -1 do 1 przez
u = 2 r1 - 1
iv = 2 r2 - 1
2. oblicz,
w = u^2 + v^2
jeśli w> 1 wróć do 13. zwróć u * zy = v * z z
z= sqrt(-2ln(w)/w)
Przykładowy kod wyglądałby tak:następnie użyj tego, co sugeruje MHR powyżej, aby uzyskać losowe odchylenia
N(mu, sigma^2)
.źródło
Rozkład normalny pojawia się, gdy dodaje się wiele losowych wartości o podobnym rozkładzie (to znaczy podobnych do siebie). Jeśli dodasz do siebie dziesięć lub więcej równomiernie rozłożonych losowych wartości, suma jest prawie prawie rozkładem normalnym. (Dodaj więcej niż dziesięć, jeśli chcesz, aby było jeszcze bardziej normalne, ale dziesięć wystarczy na prawie wszystkie cele).
Powiedz, że twoje jednolite losowe wartości są równomiernie rozłożone między 0 a 1. Suma będzie wówczas wynosić od 0 do 10. Odejmij 5 od sumy, a średnia wynikowego rozkładu wyniesie 0. Teraz dzielisz wynik przez odchylenie standardowe (bliski) rozkład normalny i pomnożyć wynik przez pożądane odchylenie standardowe. Niestety nie jestem pewien, jakie jest standardowe odchylenie sumy dziesięciu jednolitych losowych odchyleń, ale jeśli będziemy mieli szczęście, ktoś powie nam w komentarzu!
Wolę rozmawiać ze studentami o rozkładzie normalnym w tych kategoriach, ponieważ użyteczność założenia rozkładu normalnego w wielu systemach wynika całkowicie z właściwości, że sumy wielu losowych wpływów prowadzą do rozkładu normalnego.
źródło