Chcę próbkować zgodnie z gęstością gdzie i są ściśle pozytywne. (Motywacja: może to być przydatne do próbkowania Gibbsa, gdy parametr kształtu gęstości gamma ma wcześniejszą jednolitość).cd
Czy ktoś wie, jak łatwo pobierać próbki z tej gęstości? Może to standard i coś, o czym nie wiem?
Można myśleć głupie odrzucenia algorytmu sampliing, które bardziej lub mniej pracy (wybrać z trybu o , próbki od jednolite w dużym polu i odrzuć, jeśli ), ale (i) to wcale nie jest skuteczne i (ii) będzie zbyt duży, aby komputer mógł go łatwo obsługiwać, nawet w przypadku umiarkowanie dużych i . (Zwróć uwagę, że tryb dla dużych i wynosi około .)
Z góry dziękuję za wszelką pomoc!
Odpowiedzi:
Próbkowanie przy odrzuceniu będzie działało wyjątkowo dobrze, gdy i jest uzasadnione dla c d ≥ exp ( 2 ) .cd≥exp(5) cd≥exp(2)
Aby trochę uprościć matematykę, pozwól , napisz x = a i zwróć na to uwagęk=cd x=a
dla . Ustawienie X = U 3 / 2 podajex≥1 x=u3/2
dla . Gdy k ≥ exp ( 5 ) , rozkład ten jest bardzo zbliżony do normalnego (i zbliża się, gdy k staje się większy). W szczególności możeszu≥1 k≥exp(5) k
Znajdź tryb numerycznie (używając np. Newtona-Raphsona).f(u)
Rozwiń do drugiego rzędu dotyczącego jego trybu.logf(u)
Daje to parametry blisko przybliżonego rozkładu normalnego. Dla wysokiej dokładności ta przybliżona Normalna dominuje z wyjątkiem skrajnych ogonów. (Kiedy k < exp ( 5 ) , może być konieczne trochę skalowanie normalnego pdf, aby zapewnić dominację.)f(u) k<exp(5)
Po wykonaniu tej wstępnej pracy dla dowolnej wartości i oszacowaniu stałej M > 1 (jak opisano poniżej), uzyskanie losowej wariacji jest kwestią:k M>1
Narysuj wartość z dominującego rozkładu normalnego g ( u ) .u g(u)
Jeśli lub jeśli nowy jednolity wariant X przekracza f ( u ) / ( M g ( u ) ) , wróć do kroku 1.u<1 X f(u)/(Mg(u))
Zestaw .x=u3/2
Oczekiwana liczba ocen powodu rozbieżności między g i f jest tylko nieznacznie większa niż 1. (Pewne dodatkowe oceny wystąpią z powodu odrzucenia wariantów mniejszych niż 1 , ale nawet gdy k jest tak niskie jak 2, częstotliwość takich wystąpienia są niewielkie).f g f 1 k 2
Wykres ten pokazuje logarytm o g i F w funkcji u o . Ponieważ wykresy są tak blisko, musimy sprawdzić ich stosunek, aby zobaczyć, co się dzieje:k=exp(5)
Wyświetla log logarytm ; uwzględniono współczynnik M = exp ( 0,004 ), aby upewnić się, że logarytm jest dodatni w głównej części rozkładu; to znaczy aby zapewnić, M g ( U ) ≥ F ( u ) z wyjątkiem ewentualnie w obszarach o niewielkim prawdopodobieństwem. Robiąc M wystarczająco dużą, możesz zagwarantować, że M ⋅ glog(exp(0.004)g(u)/f(u)) M=exp(0.004) Mg(u)≥f(u) M M⋅g dominuje we wszystkich, z wyjątkiem najbardziej ekstremalnych ogonów (które i tak praktycznie nie mają szansy zostać wybranym w symulacji). Im większy M , tym częściej będą występować odrzucenia. Ponieważ k rośnie, M można wybrać bardzo blisko 1 , co praktycznie nie wiąże się z żadną karą.f M k M 1
Podobne podejście działa nawet dla , ale dość duże wartości M mogą być potrzebne, gdy exp ( 2 ) < k < exp ( 5 ) , ponieważ f ( u ) jest zauważalnie asymetryczny. Na przykład, dla k = exp ( 2 ) , aby uzyskać względnie dokładne g , musimy ustawić M = 1 :k>exp(2) M exp(2)<k<exp(5) f(u) k=exp(2) g M=1
Górna czerwona krzywa jest wykresem podczas gdy dolna niebieska krzywa jest wykresem log ( f ( u ) ) . Odrzucenie próbkowania f względem exp ( 1 ) g spowoduje odrzucenie około 2/3 wszystkich losowań próbnych, potrojąc wysiłek: wciąż niezły. Prawa tylna ( U > 10 i x > 10 3 / 2 ~ 30log(exp(1)g(u)) log(f(u)) f exp(1)g u>10 x>103/2∼30 ) będzie niedostatecznie reprezentowany w próbce odrzucenia (ponieważ nie dominuje już tam f ), ale ten ogon zawiera mniej niż exp ( - 20 ) ∼ 10 - 9 całkowitego prawdopodobieństwa.exp(1)g f exp(−20)∼10−9
Podsumowując, po początkowej próbie obliczenia trybu i oszacowaniu kwadratycznego wyrażenia szeregu mocy wokół trybu - wysiłku, który wymaga co najwyżej kilkudziesięciu ocen funkcji - można użyć próbkowania odrzucenia na oczekiwany koszt od 1 do 3 (lub więcej) ocen na wariant. Mnożnik kosztów gwałtownie spada do 1, gdy k = c d wzrasta powyżej 5.f(u) k=cd
Nawet jeśli potrzebne jest tylko jedno losowanie z , ta metoda jest rozsądna. Sprawdza się, kiedy potrzeba wielu niezależnych losowań dla tej samej wartości k , ponieważ wówczas narzuty początkowych obliczeń są amortyzowane przez wiele losowań.f k
Uzupełnienie
@Cardinal poprosił, dość rozsądnie, o poparcie niektórych analiz machania ręką w poprzednim. W szczególności, dlaczego transformacja sprawiają, że rozkład w przybliżeniu normalny?x=u3/2
W świetle teorii transformacji Boxa-Coxa naturalne jest poszukiwanie transformacji mocy postaci (dla stałej α , miejmy nadzieję, że nie różni się zbytnio od jedności), która sprawi, że rozkład „bardziej” będzie normalny. Przypomnijmy, że wszystkie rozkłady normalne są po prostu scharakteryzowane: logarytmy ich plików pdf są czysto kwadratowe, z zerowym składnikiem liniowym i bez wyrażeń wyższego rzędu. Dlatego możemy pobrać dowolny plik pdf i porównać go z rozkładem normalnym, rozszerzając jego logarytm jako szereg mocy wokół jego (najwyższego) szczytu. Szukamy wartości α, która czyni (przynajmniej) trzeciąx=uα α α moc zanika, przynajmniej w przybliżeniu: to jest najwięcej, co możemy mieć uzasadnioną nadzieję, że osiągnie jeden wolny współczynnik. Często działa to dobrze.
Ale jak uzyskać kontrolę nad tą konkretną dystrybucją? Po dokonaniu transformacji mocy jego pdf jest
Podejmuje logarytm i używać asymptotycznej ekspansję Stirlinga z :log(Γ)
(dla małych wartości , które nie są stałe). Działa to pod warunkiem, że α jest dodatnie, co zakładamy, że tak jest (w przeciwnym razie nie możemy zaniedbać pozostałej części rozszerzenia).do α
Oblicz jego trzecią pochodną (która, podzielona przez Będzie współczynnikiem trzeciej mocy u w szeregu mocy) i wykorzystaj fakt, że w szczycie pierwsza pochodna musi wynosić zero. Upraszcza to znacznie trzecią pochodną, dając (w przybliżeniu, ponieważ ignorujemy pochodną c )3 ! u do
That's whyα=3/2 works so well: with this choice, the coefficient of the cubic term around the peak behaves like u−3 , which is close to exp(−2k) . Once k exceeds 10 or so, you can practically forget about it, and it's reasonably small even for k down to 2. The higher powers, from the fourth on, play less and less of a role as k gets large, because their coefficients grow proportionately smaller, too. Incidentally, the same calculations (based on the second derivative of log(f(u)) at its peak) show the standard deviation of this Normal approximation is slightly less than 23exp(k/6) , with the error proportional to exp(−k/2) .
źródło
Bardzo podoba mi się odpowiedź @ whubera; prawdopodobnie będzie bardzo wydajny i ma piękną analizę. Ale wymaga to głębokiego wglądu w odniesieniu do tej konkretnej dystrybucji. W sytuacjach, w których nie masz takiego wglądu (tak dla różnych dystrybucji), podoba mi się również następujące podejście, które działa dla wszystkich dystrybucji, w których plik PDF można dwukrotnie różnicować, a ta druga pochodna ma skończenie wiele korzeni. Konfiguracja wymaga sporo pracy, ale potem masz silnik, który działa dla większości dystrybucji, które możesz na niego rzucić.
Zasadniczo chodzi o to, aby użyć częściowego liniowego górnego ograniczenia do pliku PDF, który dostosowuje się podczas próbkowania odrzucania. Jednocześnie masz kawałek liniowo niższyzwiązany z plikiem PDF, co uniemożliwia zbyt częstą jego ocenę. Górne i dolne granice są określone przez akordy i styczne do wykresu PDF. Początkowy podział na przedziały jest taki, że w każdym przedziale PDF jest albo wklęsły, albo w całości wypukły; ilekroć musisz odrzucić punkt (x, y), dzielisz ten przedział na x. (Możesz także wykonać dodatkowy podział w x, jeśli musiałbyś obliczyć PDF, ponieważ dolna granica jest naprawdę zła.) To sprawia, że podziały występują szczególnie często, gdy górna (i dolna) granica jest zła, więc masz naprawdę dobrą zbliżenie pliku PDF zasadniczo za darmo. Szczegóły są trochę skomplikowane, aby uzyskać prawo, ale starałem się wyjaśnić, z czego większość w tej serii z bloga stanowisk - zwłaszczaostatni .
Te posty nie omawiają, co zrobić, jeśli plik PDF nie jest powiązany ani w domenie, ani w wartościach; Poleciłbym dość oczywiste rozwiązanie albo przekształcenia, które uczynią je skończonymi (co byłoby trudne do zautomatyzowania), albo zastosowania odcięcia. Wybrałbym granicę odcięcia w zależności od całkowitej liczby punktów, które spodziewasz się wygenerować, powiedzmy N , i wybrałem granicę tak, aby usunięta część miała mniej niż1 / ( 10 N) prawdopodobieństwo. (Jest to dość łatwe, jeśli masz zamknięty formularz dla CDF; w przeciwnym razie może to być trudne.)
Ta metoda jest zaimplementowana w Maple jako domyślna metoda dla ciągłych dystrybucji zdefiniowanych przez użytkownika. (Pełne ujawnienie - Pracuję dla Maplesoft.)
Zrobiłem przykładowy przebieg, generując 10 ^ 4 punktów dla c = 2, d = 3, określając [1, 100] jako początkowy zakres wartości:
Odrzucono 23 (na czerwono), 51 punktów „w okresie próbnym”, które znajdowały się w międzyczasie między dolną granicą a faktycznym plikiem PDF, i 9949 punktów, które zostały zaakceptowane po sprawdzeniu tylko nierówności liniowych. To łącznie 74 oceny pliku PDF lub około jedna ocena PDF na 135 punktów. Współczynnik powinien się poprawiać, gdy generujesz więcej punktów, ponieważ przybliżenie staje się coraz lepsze (i odwrotnie, jeśli wygenerujesz tylko kilka punktów, stosunek będzie gorszy).
źródło
Możesz to zrobić numerycznie, wykonując metodę inwersji, która mówi, że jeśli wstawisz jednolite (0,1) zmienne losowe do odwrotnego CDF, otrzymasz losowanie z rozkładu. Poniżej zamieściłem kod R, który to robi, i po kilku sprawdzeniach, które przeprowadziłem, działa dobrze, ale jest nieco niechlujny i jestem pewien, że możesz go zoptymalizować.
Jeśli nie znasz R, lgamma () jest log funkcji gamma; całka () oblicza określoną całkę 1-D; uniroot () oblicza pierwiastek funkcji za pomocą bisekcji 1-D.
Główną arbitralną rzeczą, którą tu robię, jest założenie tego( 1 , 10000 ) jest wystarczającym przedziałem dla podziału - byłem leniwy co do tego i może być bardziej skuteczny sposób na wybranie tego przedziału. W przypadku bardzo dużych wartości obliczenia numeryczne CDF (powiedzmy> 100000 ) kończy się niepowodzeniem, więc przedział musi być poniżej tego. CDF jest faktycznie równy 1 w tych punktach (chyba żec , d są bardzo duże), więc prawdopodobnie można by dołączyć coś, co zapobiegłoby błędnemu obliczeniu CDF dla bardzo dużych wartości wejściowych.
Edycja: kiedyc d jest bardzo duży, przy tej metodzie występuje problem numeryczny. Jak zauważył Whuber w komentarzach, kiedy to się stanie, rozkład jest zasadniczo zdegenerowany w swoim trybie, co czyni go trywialnym problemem próbkowania.
źródło