Понимание Metropolis-Hastings с асимметричным распределением предложений

14

Я пытался понять алгоритм Метрополиса-Гастингса, чтобы написать код для оценки параметров модели (т.е. е(Икс)знак равноa*Икс ). Согласно библиографии алгоритм Метрополиса-Гастингса имеет следующие этапы:

  • Сгенерировать YT~Q(Y|ИксT)
  • ИксT+1знак равно{YT,с вероятностьюρ(ИксT,YT),ИксT,с вероятностью1-ρ(ИксT,YT),

где ρ(Икс,Y)знак равномин(е(Y)е(Икс)*Q(Икс|Y)Q(Y|Икс),1)

Как я хотел бы задать несколько вопросов:

  • Библиография утверждает, что если - симметричное распределение, отношение q ( x | y ) / q ( y | x ) становится равным 1, и алгоритм называется Metropolis. Это верно? Единственная разница между Метрополисом и Метрополисом-Гастингсом заключается в том, что в первом используется симметричное распределение? А как насчет "Случайной прогулки" Метрополис (-Хастингс)? Чем он отличается от двух других?QQ(Икс|Y)/Q(Y|Икс)
  • Большая часть примера кода, который я нахожу в Интернете, использует гауссово распределение предложений и, таким образом, ρ ( x , y ) = min ( f ( y ) / f ( x ) , 1 ) где f ( y ) / f ( x )Qρ(Икс,Y)знак равномин(е(Y)/е(Икс),1)е(Y)/е(Икс)это отношение правдоподобия. Что если распределение предложений является распределением Пуассона? Я думаю, что понимаю рационально, почему это соотношение не становится равным 1 при использовании асимметричного распределения, но я не совсем уверен, понимаем ли это математически или как реализовать его с помощью кода. Может ли кто-нибудь дать мне простой пример кода (C, python, R, псевдокод или что-то другое) алгоритма Метрополиса-Гастингса, использующего несимметричное распределение предложений?
эстрона
источник
1
Я только что вспомнил отличное сообщение в блоге по связанной теме, может быть, это поможет: darrenjw.wordpress.com/2012/06/04/…
joint_p

Ответы:

20

Библиография утверждает, что если q - симметричное распределение, отношение q (x | y) / q (y | x) становится равным 1, и алгоритм называется Metropolis. Это верно?

Да, это правильно. Алгоритм Метрополиса является частным случаем алгоритма MH.

А как насчет "Случайной прогулки" Метрополис (-Хастингс)? Чем он отличается от двух других?

При случайном обходе распределение предложения перецентрируется после каждого шага в значение, которое было сгенерировано последней цепочкой. Как правило, при случайном блуждании распределение предложений является гауссовым, и в этом случае это случайное блуждание удовлетворяет требованию симметрии, а алгоритм является мегаполисом. Я полагаю, что вы можете выполнить «псевдо» случайное блуждание с асимметричным распределением, которое приведет к тому, что предложения будут слишком дрейфовать в противоположном направлении перекоса (левое наклонное распределение будет благоприятствовать предложениям вправо). Я не уверен, почему вы это сделаете, но вы могли бы, и это был бы алгоритм метрополии Гастингса (то есть, требуется дополнительный коэффициент отношения).

Чем он отличается от двух других?

В алгоритме неслучайного блуждания распределения предложений фиксированы. В варианте случайного обхода центр распределения предложения меняется на каждой итерации.

Что если распределение предложений является распределением Пуассона?

Тогда вам нужно использовать MH вместо просто мегаполиса. Предположительно это будет сделано для дискретного распределения, иначе вы не захотите использовать дискретную функцию для генерации ваших предложений.

В любом случае, если распределение выборки урезано или вы уже знаете о его перекосе, вы, вероятно, захотите использовать асимметричное распределение выборки и, следовательно, должны использовать метрополис-гастингс.

Может ли кто-нибудь дать мне простой пример кода (C, Python, R, псевдокод или как вы предпочитаете)?

Вот мегаполис:

Metropolis <- function(F_sample # distribution we want to sample
                      , F_prop  # proposal distribution 
                      , I=1e5   # iterations
               ){
  y = rep(NA,T)
  y[1] = 0    # starting location for random walk
  accepted = c(1)

  for(t in 2:I)    {
    #y.prop <- rnorm(1, y[t-1], sqrt(sigma2) ) # random walk proposal
    y.prop <- F_prop(y[t-1]) # implementation assumes a random walk. 
                             # discard this input for a fixed proposal distribution

    # We work with the log-likelihoods for numeric stability.
    logR = sum(log(F_sample(y.prop))) -
           sum(log(F_sample(y[t-1])))    

    R = exp(logR)

    u <- runif(1)        ## uniform variable to determine acceptance
    if(u < R){           ## accept the new value
      y[t] = y.prop
      accepted = c(accepted,1)
    }    
    else{
      y[t] = y[t-1]      ## reject the new value
      accepted = c(accepted,0)
    }    
  }
  return(list(y, accepted))
}

Давайте попробуем использовать это для демонстрации бимодального распределения. Во-первых, давайте посмотрим, что произойдет, если мы используем случайную прогулку для нашего propsal:

set.seed(100)

test = function(x){dnorm(x,-5,1)+dnorm(x,7,3)}

# random walk
response1 <- Metropolis(F_sample = test
                       ,F_prop = function(x){rnorm(1, x, sqrt(0.5) )}
                      ,I=1e5
                       )
y_trace1 = response1[[1]]; accpt_1 = response1[[2]]
mean(accpt_1) # acceptance rate without considering burn-in
# 0.85585   not bad

# looks about how we'd expect
plot(density(y_trace1))
abline(v=-5);abline(v=7) # Highlight the approximate modes of the true distribution

введите описание изображения здесь

Теперь давайте попробуем выполнить выборку с использованием фиксированного распределения предложений и посмотрим, что произойдет:

response2 <- Metropolis(F_sample = test
                            ,F_prop = function(x){rnorm(1, -5, sqrt(0.5) )}
                            ,I=1e5
                       )

y_trace2 = response2[[1]]; accpt_2 = response2[[2]]
mean(accpt_2) # .871, not bad

Сначала это выглядит нормально, но если мы посмотрим на заднюю плотность ...

plot(density(y_trace2))

введите описание изображения здесь

мы увидим, что он полностью застрял на локальном максимуме. Это не совсем удивительно, так как мы фактически сосредоточили свое распространение там. То же самое происходит, если мы центрируем это в другом режиме:

response2b <- Metropolis(F_sample = test
                        ,F_prop = function(x){rnorm(1, 7, sqrt(10) )}
                        ,I=1e5
)

plot(density(response2b[[1]]))

Мы можем попытаться отбросить наше предложение между двумя режимами, но нам нужно будет установить очень высокую дисперсию, чтобы иметь возможность исследовать любой из них.

response3 <- Metropolis(F_sample = test
                        ,F_prop = function(x){rnorm(1, -2, sqrt(10) )}
                        ,I=1e5
)
y_trace3 = response3[[1]]; accpt_3 = response3[[2]]
mean(accpt_3) # .3958! 

Обратите внимание, как выбор центра распространения нашего предложения оказывает существенное влияние на скорость принятия нашего пробоотборника.

plot(density(y_trace3))

введите описание изображения здесь

plot(y_trace3) # we really need to set the variance pretty high to catch 
               # the mode at +7. We're still just barely exploring it

Мы все еще застряли в ближе двух режимов. Давайте попробуем сбросить это прямо между двумя режимами.

response4 <- Metropolis(F_sample = test
                        ,F_prop = function(x){rnorm(1, 1, sqrt(10) )}
                        ,I=1e5
)
y_trace4 = response4[[1]]; accpt_4 = response4[[2]]

plot(density(y_trace1))
lines(density(y_trace4), col='red')

введите описание изображения здесь

Наконец, мы приближаемся к тому, что искали. Теоретически, если мы позволим сэмплеру работать достаточно долго, мы сможем получить репрезентативную выборку из любого из этих распределений предложений, но случайное блуждание произвело пригодную для использования выборку очень быстро, и нам пришлось воспользоваться нашими знаниями о том, как предполагался апостериорный попытаться настроить распределения фиксированной выборки, чтобы получить пригодный для использования результат (который, честно говоря, у нас пока нет y_trace4).

Попробую позже обновить пример мегаполиса Гастингса. Вы должны довольно легко увидеть, как изменить приведенный выше код для создания алгоритма мегаполиса Гастингса (подсказка: вам просто нужно добавить дополнительное соотношение в logRрасчет).

Дэвид Маркс
источник
Отличный ответ! Спасибо огромное! В моем случае у меня есть модель с 6-7 параметрами, и я понятия не имею, как может выглядеть апостериорное распределение (но оно может быть бимодальным), потому что мои наборы данных иногда совершенно разные. Исходя из того, что вы сказали, я могу либо использовать Metropolis (-Hastings), используя огромную дисперсию в распределении предложений, либо использовать Random Walk Metropolis (-Hastings) с меньшей дисперсией в распределении предложений. Ни при каких особых обстоятельствах второе решение не должно сходиться быстрее к целевому распределению. Правильно?
AstrOne
Теперь, связанный с кодом Метрополиса-Гастингса, я подумал заменить его R=exp(logR)следующим образом: R=exp(logR)*(dnorm(y[t-1],y.prop,my_sigma)/dnorm(y.prop,y[t-1],my_sigma))для случайных и неслучайных прогулок MH. Это верно?
AstrOne
1
В основном, но, как я упоминаю в коде метрополии: вы хотите выполнять свои вычисления в лог-пространстве. Расчеты правдоподобия, как правило, работают с очень маленькими значениями, поэтому вы, как правило, получаете намного лучшие результаты, добавляя логарифмы и возводя в степень свои результаты, чем умножая необработанные значения вместе.
Дэвид Маркс
1
Вам не нужно беспокоиться о текущем состоянии цепочки (т.е. YT-1) когда вы используете фиксированное распределение предложений, потому что: Q(YT|YT-1)знак равноQ(YT), Фиксированное распределение предложений генерирует независимые предложения. Мы принимаемYT-1во внимание в метрополии.
Дэвид Маркс
1
Вы утверждаете: «В алгоритме неслучайного обхода распределения предложений фиксированы. В варианте случайного обхода центр распределения предложений меняется на каждой итерации», что неверно. Версии MH, которые не являются случайными блужданиями, в основном имеют предложения, которые зависят от текущего состояния цепочки Маркова, иногда даже с центром в этом состоянии. Главный пример - алгоритм MCMC Ланжевена. Когда предложение зафиксировано, это независимый алгоритм MH .
Сиань