как включить код C или C ++ в мой код R для ускорения программы MCMC, используя алгоритм Метрополиса-Гастингса

Мне нужен совет о том, как включить код C или C ++ в мой код R, чтобы ускорить программу MCMC, используя алгоритм Метрополиса-Гастингса. Я использую подход MCMC для моделирования вероятности, с учетом различных ковариат, того, что человеку будет присвоен определенный ранг в иерархии социального статуса третьей стороной (судьей): каждому судье (примерно 80, в 4 деревнях) был задан вопрос. ранжировать группу людей (около 80 человек в 4 деревнях) на основе их оценки социального статуса каждого человека. Поэтому для каждого судьи у меня есть вектор рангов, соответствующий их оценке положения каждого человека в иерархии.

Чтобы смоделировать это, я предполагаю, что при присвоении рангов судьи основывают свои решения на относительной ценности некоторой скрытой меры полезности человека, u . Учитывая это, тогда можно предположить, что вектор рангов, r , созданный данным судьей, является функцией ненаблюдаемого вектора, u , описывающего полезность индивидов, являющихся ранжированный, где человеку с k-м наибольшим значением u будет присвоен k-й ранг.Я моделирую u , используя интересующие ковариаты, как многомерную нормально распределенную переменную, а затем определяю вероятность наблюдаемых рангов, учитывая распределение u , сгенерированное моделью.

В дополнение к оценке эффекта не более 5 ковариат, я также оцениваю гиперпараметры, описывающие различия между оценками и заданиями. Поэтому для каждой итерации цепочки я оцениваю многомерную нормальную плотность примерно в 8-10 раз. В результате 5000 итераций могут занять до 14 часов. Очевидно, мне нужно запустить его для более чем 5000 запусков, поэтому мне нужны средства для значительного ускорения процесса. Учитывая это, мои вопросы заключаются в следующем:

(i) Правильно ли я предполагаю, что лучший прирост скорости будет достигнут при запуске некоторых, если не всей моей цепочки на C или C ++?

(ii) предполагая ответ на вопрос 1 - да, как мне это сделать? Например, есть ли способ сохранить все мои функции R, но просто выполнить цикл на C или C ++: т.е. могу ли я вызвать свои функции R из C, а затем выполнить цикл?

(iii) Я догадываюсь, что я действительно хочу знать, как лучше всего подойти к включению кода C или C ++ в мою программу.

10
задан Paul Hiemstra 10 February 2012 в 14:18
поделиться