Я пытался понять алгоритм Метрополиса-Гастингса, чтобы написать код для оценки параметров модели (т.е. ). Согласно библиографии алгоритм Метрополиса-Гастингса имеет следующие этапы:
- Сгенерировать
где
Как я хотел бы задать несколько вопросов:
- Библиография утверждает, что если - симметричное распределение, отношение q ( x | y ) / q ( y | x ) становится равным 1, и алгоритм называется Metropolis. Это верно? Единственная разница между Метрополисом и Метрополисом-Гастингсом заключается в том, что в первом используется симметричное распределение? А как насчет "Случайной прогулки" Метрополис (-Хастингс)? Чем он отличается от двух других?
- Большая часть примера кода, который я нахожу в Интернете, использует гауссово распределение предложений и, таким образом, ρ ( x , y ) = min ( f ( y ) / f ( x ) , 1 ) где f ( y ) / f ( x )это отношение правдоподобия. Что если распределение предложений является распределением Пуассона? Я думаю, что понимаю рационально, почему это соотношение не становится равным 1 при использовании асимметричного распределения, но я не совсем уверен, понимаем ли это математически или как реализовать его с помощью кода. Может ли кто-нибудь дать мне простой пример кода (C, python, R, псевдокод или что-то другое) алгоритма Метрополиса-Гастингса, использующего несимметричное распределение предложений?
mcmc
metropolis-hastings
эстрона
источник
источник
Ответы:
Да, это правильно. Алгоритм Метрополиса является частным случаем алгоритма MH.
При случайном обходе распределение предложения перецентрируется после каждого шага в значение, которое было сгенерировано последней цепочкой. Как правило, при случайном блуждании распределение предложений является гауссовым, и в этом случае это случайное блуждание удовлетворяет требованию симметрии, а алгоритм является мегаполисом. Я полагаю, что вы можете выполнить «псевдо» случайное блуждание с асимметричным распределением, которое приведет к тому, что предложения будут слишком дрейфовать в противоположном направлении перекоса (левое наклонное распределение будет благоприятствовать предложениям вправо). Я не уверен, почему вы это сделаете, но вы могли бы, и это был бы алгоритм метрополии Гастингса (то есть, требуется дополнительный коэффициент отношения).
В алгоритме неслучайного блуждания распределения предложений фиксированы. В варианте случайного обхода центр распределения предложения меняется на каждой итерации.
Тогда вам нужно использовать MH вместо просто мегаполиса. Предположительно это будет сделано для дискретного распределения, иначе вы не захотите использовать дискретную функцию для генерации ваших предложений.
В любом случае, если распределение выборки урезано или вы уже знаете о его перекосе, вы, вероятно, захотите использовать асимметричное распределение выборки и, следовательно, должны использовать метрополис-гастингс.
Вот мегаполис:
Давайте попробуем использовать это для демонстрации бимодального распределения. Во-первых, давайте посмотрим, что произойдет, если мы используем случайную прогулку для нашего propsal:
Теперь давайте попробуем выполнить выборку с использованием фиксированного распределения предложений и посмотрим, что произойдет:
Сначала это выглядит нормально, но если мы посмотрим на заднюю плотность ...
мы увидим, что он полностью застрял на локальном максимуме. Это не совсем удивительно, так как мы фактически сосредоточили свое распространение там. То же самое происходит, если мы центрируем это в другом режиме:
Мы можем попытаться отбросить наше предложение между двумя режимами, но нам нужно будет установить очень высокую дисперсию, чтобы иметь возможность исследовать любой из них.
Обратите внимание, как выбор центра распространения нашего предложения оказывает существенное влияние на скорость принятия нашего пробоотборника.
Мы все еще застряли в ближе двух режимов. Давайте попробуем сбросить это прямо между двумя режимами.
Наконец, мы приближаемся к тому, что искали. Теоретически, если мы позволим сэмплеру работать достаточно долго, мы сможем получить репрезентативную выборку из любого из этих распределений предложений, но случайное блуждание произвело пригодную для использования выборку очень быстро, и нам пришлось воспользоваться нашими знаниями о том, как предполагался апостериорный попытаться настроить распределения фиксированной выборки, чтобы получить пригодный для использования результат (который, честно говоря, у нас пока нет
y_trace4
).Попробую позже обновить пример мегаполиса Гастингса. Вы должны довольно легко увидеть, как изменить приведенный выше код для создания алгоритма мегаполиса Гастингса (подсказка: вам просто нужно добавить дополнительное соотношение в
logR
расчет).источник
R=exp(logR)
следующим образом:R=exp(logR)*(dnorm(y[t-1],y.prop,my_sigma)/dnorm(y.prop,y[t-1],my_sigma))
для случайных и неслучайных прогулок MH. Это верно?