Хит и запустить MCMC

16

Я пытаюсь реализовать алгоритм запуска и запуска MCMC, но у меня возникли проблемы с пониманием, как это сделать. Общая идея заключается в следующем:

Чтобы сгенерировать скачок предложения в MH, мы:

  • Создать направление из распределения на поверхности единичной сферы OdO
  • Генерируйте расстояние вдоль ограниченного пространства.λ

Тем не менее, я понятия не имею, как мне следует реализовать это в R (или любом другом языке).

У кого-нибудь есть фрагмент кода, который укажет мне правильное направление?

Кстати, я не настолько заинтересован в библиотеке, которая делает этот метод, я хочу попробовать и сам ее кодировать.

Большое спасибо.

csgillespie
источник
1
Никогда раньше не слышал об этом алгоритме, но он звучит довольно интересно. Не могли бы вы предоставить ссылку на пояснительный источник? Спасибо !
Штеффен
@steffen Вот ссылка на оригинальный документ - ну, на самом деле, технический отчет. Я никогда не использовал эту процедуру.
csgillespie
1
В чем преимущество использования MCMC для запуска и запуска по сравнению с другими методами? Скорость сходимости?
RockScience
@fRed: Вот почему я предложил награду. Я читал про Хит и беги, но не знаю, при каких обстоятельствах это будет полезно.
csgillespie
3
Ссылка теперь не работает.
17

Ответы:

11

Я не смотрел на бумагу, которую ты поставил, но все равно дай мне попробовать:

ппространство параметров вы можете генерировать случайное направление d равномерно распределены по поверхности единичной сферы с

x <- rnorm(p)
d <- x/sqrt(sum(x^2))

(см. вики ).

Затем используйте это для генерации предложений по d для отбраковки (если вы действительно можете оценить распределение для d).

Предполагая, что вы начинаете в позиции Икс и приняли d, сгенерировать предложение Y с

 lambda <- r<SOMEDISTRIBUTION>(foo, bar)
 y <- x + lambda * d

и сделайте Метрополис-Гастингс-Степ, чтобы решить, следует ли переехать в Y или не.

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


Добавлено для пользы @ csgillespie:

From what I was able to gather by some googling, hit-and-run MCMC is useful primarily for fast mixing if you have a (multivariate) target that has arbitrary bounded but not necessarily connected support, because it enables you to move from any point in the support to any other in one step. More here and here.

fabians
источник
1
If this answer is not satisfactory, could you explain why?
John Salvatier
I'm not sure about @fred, but when I offered the bounty I suppose I was wanting a bit more insight into hit-and-run MCMC. For example, what types of problems would it be best suited for. Of course, if there are no other answers, then this question would win the bounty.
csgillespie
3
@csgillespie: I edited my answer to better accomodate your interest. Let it not be said that I was undeserving of the bounty. ;)
fabians
2
Many thanks for the link. One of the reasons I placed the bounty was that my google searches turned up a few mathematical discussions of the method, but little in the way of practical applications. Please don't take it as a slight if I wait another 48 hours before awarding the bounty (it is a particularly generous bounty!)
csgillespie
4

I came across your question when I was looking for the original reference for Hit-and-Run. Thanks for that! I just put together a proof-of-concept implementation of hit-and-run for PyMC at the end of this recent blog.

Abraham Flaxman
источник