Integracja Metropolis-Hastings - dlaczego moja strategia nie działa?


16

Załóżmy, że mam funkcję , którą chcę zintegrować Oczywiście przy założeniu, że osiąga zero w punktach końcowych, brak wybuchów, fajna funkcja. Jednym ze sposobów, w jakie się bawiłem, jest użycie algorytmu Metropolis-Hastings do wygenerowania listy próbek z rozkładu proporcjonalnego do , w którym brakuje stałej normalizacyjnej który , a następnie obliczenia niektórych statystyk na tych : g(x)

g(x)dx.
g(x)x1,x2,,xng(x)
N=g(x)dx
p(x)f(x)x
1ni=0nf(xi)f(x)p(x)dx.

Ponieważ , mogę podstawić aby anulować g z całki, co powoduje wyrażenie postaci \ frac {1} {N} \ int _ {- \ infty} ^ {\ infty} \ frac {U (x)} {g (x)} g (x) dx = \ frac {1} {N} \ int _ {- \ infty} ^ \ infty U (x) dx. Więc pod warunkiem, że U (x) integruje się z 1 wzdłuż tego regionu, powinienem uzyskać wynik 1 / N , który mógłbym wziąć na zasadzie wzajemności, aby uzyskać odpowiedź, której chcę. Dlatego mógłbym wziąć zakres mojej próbki (aby najskuteczniej wykorzystać punkty) r = x_ \ max - x_ \ min i pozwolić U (x) = 1 / r dla każdej narysowanej próbki. W ten sposób U (x)p(x)=g(x)/Nf(x)=U(x)/g(x)g

1NU(x)g(x)g(x)dx=1NU(x)dx.
U(x)11/Nr=xmaxxminU(x)=1/rU(x)ocenia na zero poza regionem, w którym nie ma moich próbek, ale integruje się z 1 w tym regionie. Więc jeśli teraz przyjmuję oczekiwaną wartość, powinienem otrzymać:
E[U(x)g(x)]=1N1ni=0nU(x)g(x).

Próbowałem to przetestować w R dla przykładowej funkcji g(x)=ex2 . W tym przypadku nie używam Metropolis-Hastings do generowania próbek, ale używam rzeczywistych prawdopodobieństw rnormdo generowania próbek (tylko do testowania). Nie do końca otrzymuję wyniki, których szukam. Zasadniczo pełne wyrażenie tego, co bym obliczał, to:

1n(xmaxxmin)i=0n1exi2.
To powinno w mojej teorii oceniać na 1/π . Zbliża się, ale na pewno nie zbiega się w oczekiwany sposób, czy robię coś złego?
ys = rnorm(1000000, 0, 1/sqrt(2))
r = max(ys) - min(ys)
sum(sapply(ys, function(x) 1/( r * exp(-x^2))))/length(ys)
## evaluates to 0.6019741. 1/sqrt(pi) = 0.5641896

Edycja dla CliffAB

Powodem, dla którego używam zakresu jest po prostu łatwe zdefiniowanie funkcji, która nie jest zerowa w regionie, w którym znajdują się moje punkty, ale która integruje się z w zakresie . Pełna specyfikacja funkcji jest następująca: Nie musiałem używać jako tej jednolitej gęstości. Mógłbym użyć innej gęstości zintegrowanej z , na przykład gęstości prawdopodobieństwa Sprawiłoby to jednak, że sumowanie poszczególnych próbek byłoby banalne, tzn [ - , ] U ( x ) = { 11[,]U(x)1P(x)=1

U(x)={1xmaxxminxmax>x>xmin0otherwise.
U(x)11
P(x)=1πex2.
1ni=0nP(x)g(x)=1ni=0nexi2/πexi2=1ni=0n1π=1π.

Mógłbym wypróbować tę technikę dla innych dystrybucji, które integrują się z . Chciałbym jednak nadal wiedzieć, dlaczego nie działa w przypadku równomiernej dystrybucji.1


Szybko się nad tym zastanawiam, więc nie jestem pewien, dlaczego zdecydowałeś się użyć range (x). Pod warunkiem, że jest ważny, jest wyjątkowo nieefektywny! Zakres próbki tego rozmiaru jest prawie najbardziej niestabilną statystyką, jaką możesz wziąć.
Cliff AB

@CliffAB Nie ma nic szczególnego w tym, że korzystam z zakresu, poza zdefiniowaniem równomiernego rozkładu przedziału, w którym leżą moje punkty. Zobacz zmiany.
Mike Flynn

1
Przyjrzę się temu później bardziej szczegółowo. Ale należy wziąć pod uwagę, że tak jakby x był zbiorem jednolitych RV, a następnie jako , range . Ale jeśli x jest zbiorem niedenegenerowanych normalnych RV, to jako , . n(x)1nrange(x)
Cliff AB

@CliffAB mogłeś mieć rację, myślę, że powodem było to, że granice całki nie zostały ustalone, więc wariancja estymatora nigdy się nie zbiegnie ...
Mike Flynn

Odpowiedzi:


13

Jest to najciekawsze pytanie, które dotyczy zagadnienia przybliżenia stałej normalizującej gęstości na podstawie wyjścia MCMC z tej samej gęstości . (Uwaga boczna jest taka, że ​​poprawnym założeniem jest to, że jest liczbą całkowitą, zejście do zera w nieskończoności nie jest wystarczające.)ggg

Moim zdaniem najbardziej odpowiedni wpis na ten temat w odniesieniu do twojej sugestii to artykuł Gelfanda i Deya (1994, JRSS B ), w którym autorzy opracowali bardzo podobne podejście do znalezienia przy generowaniu z . Jednym z rezultatów tego artykułu jest to, że dla dowolnej gęstości prawdopodobieństwa [jest to równoważne twojej ], tak że następująca tożsamość pokazuje, że próbka z może wytworzyć

Xg(x)dx
p(x)g(x)α(x)U(x)
{x;α(x)>0}{x;g(x)>0}
Xα(x)g(x)p(x)dx=Xα(x)Ndx=1N
pnieobciążony oceny od estymatora próbkowania znaczenie Oczywiście wydajność (szybkość zbieżności, istnienie wariancji i tc.) estymatora zależy od wyboru [ nawet jeśli jego oczekiwania nie]. W ramach bayesowskich opcją zalecaną przez Gelfanda i Deya jest przyjęcie , poprzedniej gęstości. Prowadzi to do gdzie jest funkcją prawdopodobieństwa, ponieważ1/N
η^=1ni=1nα(xi)g(xi)xiiidp(x)
η^αα=π
α(x)g(x)=1(x)
(x)g(x)=π(x)(x). Niestety, uzyskany estymator jest średnią harmoniczną estymator , zwany również najgorszym Monte Carlo estymator nigdy przez Radford Neal, z University of Toronto. Więc nie zawsze działa to dobrze. Lub nawet prawie nigdy.
N^=ni=1n1/(xi)

Twój pomysł użycia zakresu próbki i jednolitości w tym zakresie jest związany ze średnią średnią harmoniczną: estymator nie ma wariancji choćby dlatego, że z powodu pojawiający się w liczniku (podejrzewam, że zawsze może tak być w przypadku nieograniczonego wsparcia!), a zatem bardzo powoli zbliża się do stałej normalizującej. Na przykład, jeśli ponownie uruchomisz kod kilka razy, otrzymasz bardzo różne wartości liczbowe po 10 different iteracjach. Oznacza to, że nie możesz nawet ufać wielkości odpowiedzi.(min(xi),max(xi))exp{x2}

Ogólną poprawką tego nieskończonego problemu wariancji jest użycie dla bardziej skoncentrowanej gęstości, przy użyciu na przykład kwartyli z próbki , ponieważ następnie pozostaje niższy w tym przedziale.α(q.25(xi),q.75(xi))g

Podczas dostosowywania kodu do tej nowej gęstości przybliżenie jest znacznie bliższe :1/π

ys = rnorm(1e6, 0, 1/sqrt(2))
r = quantile(ys,.75) - quantile(ys,.25)
yc=ys[(ys>quantile(ys,.25))&(ys<quantile(ys,.75))]
sum(sapply(yc, function(x) 1/( r * exp(-x^2))))/length(ys)
## evaluates to 0.5649015. 1/sqrt(pi) = 0.5641896

Omawiamy tę metodę szczegółowo w dwóch artykułach z Darrenem Wraithem i Jean-Michelem Marinem .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.