Я новичок в исследованиях Байесовской статистики. Я слышал от исследователей, что байесовские исследователи лучше внедряют MCMC, а не используют такие инструменты, как JAGS / Stan. Могу ли я спросить, в чем состоит преимущество реализации алгоритма MCMC самостоятельно (на «не совсем быстрых» языках, таких как R), кроме как для целей обучения?
13
Ответы:
В общем, я бы настоятельно рекомендовал не кодировать свой собственный MCMC для реального прикладного байесовского анализа. Это как много работы и времени , и очень вероятно , вводить ошибки в коде. Сэмплеры Blackbox, такие как Stan, уже используют очень сложные сэмплеры. Поверьте мне, вы не будете кодировать пробоотборник этого калибра только для одного анализа!
Существуют особые случаи, в которых этого будет недостаточно. Например, если вам нужно было провести анализ в режиме реального времени (т.е. компьютерное решение на основе входящих данных), эти программы не будут хорошей идеей. Это потому, что Stan требует компиляции кода C ++, что может занять значительно больше времени, чем просто запуск уже подготовленного сэмплера для относительно простых моделей. В этом случае вы можете написать свой собственный код. Кроме того, я полагаю, что есть особые случаи, когда пакеты, такие как Stan, работают очень плохо, такие как негауссовы модели пространства состояний (полное раскрытие: я считаю, что Stan работает плохо в этом случае, но не знает). В этом случае, возможно, стоит реализовать собственный MCMC. Но это исключение, а не правило!
Честно говоря, я думаю, что большинство исследователей, которые пишут сэмплеры для одного анализа (и я видел это), делают это потому, что им нравится писать свои собственные сэмплеры. По крайней мере, я могу сказать, что подпадаю под эту категорию (т.е. я разочарован тем, что написание собственного сэмплера не лучший способ сделать что-то).
Кроме того, хотя нет смысла писать свой собственный сэмплер для одного анализа , может иметь смысл написать собственный код для класса анализа., Поскольку JAG, Stan и т. Д. Являются сэмплерами черного ящика, вы всегда можете ускорить процесс, специализируясь на конкретной модели, хотя количество улучшений зависит от модели. Но написание чрезвычайно эффективного сэмплера с нуля - это, возможно, 10-1000 часов работы, в зависимости от опыта, сложности модели и т. Д. Если вы проводите исследования в области байесовских методов или пишете статистическое программное обеспечение, это нормально; это твоя работа Но если ваш начальник скажет: «Эй, вы можете проанализировать этот набор данных повторных измерений?» и вы потратите 250 часов на написание эффективного сэмплера, ваш босс, вероятно, будет расстроен. Напротив, вы могли бы написать эту модель в Stan, скажем, за 2 часа, и у вас было бы 2 минуты времени работы вместо 1 минуты времени, достигнутого эффективным пробоотборником.
источник
Этот вопрос прежде всего основан на мнении, но я думаю, что здесь достаточно написать ответ. Там может быть много причин, чтобы написать собственный пробник для исследовательской задачи. Вот некоторые из них
Предложение: Как предлагает fcop в своем комментарии, если выборка MH, то кодирование вашего собственного сэмплера позволяет вам поэкспериментировать с распределениями предложений, чтобы получить лучший микшерный сэмплер.
Гибкость: встроенные программы могут не дать вам необходимой гибкости. Возможно, вы захотите начать с определенного случайного значения или использовать конкретную начальную структуру.
Понимание: кодирование вашего собственного сэмплера помогает вам понять поведение сэмплера, давая представление о процессе цепочки Маркова. Это полезно для исследователя, работающего над проблемой.
Бремя: если данные, по которым я делаю все мои байесовские выводы, получены из программы, которую я не кодировал, то бремя вывода больше не лежит на мне. Как исследователь, я хотел бы взять на себя полную ответственность за методы / результаты, которые я представляю. Использование встроенных методов не позволяет вам сделать это.
Возможно, есть и другие причины, но именно эти четыре заставляют меня писать собственные сэмплеры.
источник
Я дал +1 к ответу Клиффа АБ. Чтобы добавить один маленький кусочек, если вы хотите работать на более низком уровне, но не на уровне кода «все для себя», вы должны поискать поискать пакет LaplacesDemon . Первоначальный автор был великолепен, но, кажется, выпал из сетки, и пакет был перехвачен кем-то другим. (Это на Github, я верю.)
Он реализует впечатляющее количество алгоритмов, используемых в MCMC, и включенные виньетки стоят того, чтобы их прочитать, даже если вы не используете пакет. Практически любой сэмплер, о котором вы читали. Вы кодируете иначе, чем BUGS / JAGS или Stan, и все это на R, но часто это настолько эффективно, что оно конкурентоспособно.
источник
LaplacesDemon
, если вы знакомы с этим. Рад слышать и оnimble
. Я по крайней мере, скачать его. (Хотя несколько виньеток LaplacesDemon могут стоить загрузки, даже если вы используете шустрый.) ... Оооо, просто пошел на страницу. Если его SMC прост в использовании, я стану большим поклонником. Единственный пакет R, который я видел, который делает SMC, ужасно сложен.nimble
сайта это впечатляет. Почему я никогда не слышал об этом? Это похоже на отличный вариант для людей, привыкших к языку моделирования BUGS / JAGS. Конечно, они сделают самые лучшие сравнения на сайте, но мне все еще нравится это. (За исключением того, что сrstanarm
иbrms
, который использует Стэна под капотом, чемпионом по простоте использования в R будет Стэн.)