W ciągu ostatnich kilku dni starałem się zrozumieć, jak działa Markov Chain Monte Carlo (MCMC). W szczególności starałem się zrozumieć i wdrożyć algorytm Metropolis-Hastings. Do tej pory myślę, że mam ogólne zrozumienie algorytmu, ale jest kilka rzeczy, które nie są dla mnie jeszcze jasne. Chcę użyć MCMC, aby dopasować niektóre modele do danych. Z tego powodu opiszę moje rozumienie algorytmu Metropolis-Hastings do dopasowywania linii prostej do niektórych obserwowanych danych :
1) dokonanie wstępnego odgadnięcia . Ustaw to jako nasz bieżący ( ). Dodaj na końcu łańcucha Markowa ( ).
2) Powtórz kroki poniżej kilka razy.
3) oceny aktualnego prawdopodobieństwa ( ) zawartych i .
4) Zaproponuj nowy ( ), próbkując z rozkładu normalnego za pomocą i . Na razie rozmiar jest stały.
5) ocena prawdopodobieństwa nowego ( ) zawartych i .
6) Jeśli jest większy niż , zaakceptuj jako nowy , dołącz go na końcu i przejdź do kroku 2.
7) Jeśli jest mniejszy niż wygeneruj liczbę ( ) w zakresie [0,1] z rozkładu równomiernego
8) Jeśli jest mniejsze niż różnica między dwoma prawdopodobieństwami ( - ), zaakceptuj jako nowy , dołącz go na końcu i przejdź do kroku 2.
9) Jeśli jest większe niż różnica między dwoma prawdopodobieństwami ( - ), na końcu , używaj tego samego , przejdź do kroku 2.
10) Koniec powtórzenia.
11) Usuń niektóre elementy z początku (faza wypalenia).
12) Teraz wziąć średnią z wartości w . Ta średnia jest szacowana .
Teraz mam pytania dotyczące powyższych kroków:
- Jak skonstruować funkcję prawdopodobieństwa dla ale także dla dowolnej funkcji dowolnej?
- Czy to poprawna implementacja algorytmu Metropolis-Hastings?
- W jaki sposób wybór metody generowania liczb losowych w kroku 7 może zmienić wyniki?
- Jak zmieni się ten algorytm, jeśli mam wiele parametrów modelu? Na przykład, gdybym miał model .
Uwagi / Kredyty: Główna struktura algorytmu opisanego powyżej oparta jest na kodzie z warsztatu Python MPIA.