Я ищу совет о том, как включить код C или С++ в свой R-код, чтобы ускорить программу MCMC, используя алгоритм Metropolis-Hastings. Я использую подход MCMC для моделирования вероятности, учитывая различные ковариаты, что индивидууму будет назначаться определенный ранг в иерархии социального статуса третьей стороной (судьей): каждый судья (приблизительно 80 человек в 4 деревнях) был задан ранжировать группу лиц (примерно 80, в 4 деревнях) на основе их оценки каждого отдельного социального статуса. Поэтому для каждого судьи у меня есть вектор рангов, соответствующий их суждению о каждой отдельной позиции в иерархии.
Чтобы моделировать это, я предполагаю, что при присвоении рангов судьи основывают свои решения на относительном значении некоторой скрытой меры отдельной утилиты u. Учитывая это, тогда можно предположить, что вектор рангов r, созданный данным судьей, является функцией ненаблюдаемого вектора u, описывающего полезность индивидуумов, в которых индивидууму с k-м наивысшим значением u будет присвоен k-й ранг. Я моделирую u, используя интересующие ковариации, как многомерную нормально распределенную переменную, а затем определяю вероятность наблюдаемых рангов, учитывая распределение u, сгенерированное моделью.
В дополнение к оценке влияния не более 5 ковариаций я также оцениваю гиперпараметры, описывающие отклонения между судьями и предметами. Поэтому для каждой итерации цепи я оцениваю многомерную нормальную плотность примерно в 8-10 раз. В результате 5000 итераций могут занять до 14 часов. Очевидно, что мне нужно запустить его более чем на 5000 запусков, и поэтому мне нужно средство для резкого ускорения процесса. Учитывая это, мои вопросы таковы:
(i) Правильно ли я предполагаю, что лучшие выигрыши в скорости будут выполняться при запуске некоторой, если не всей моей цепочки на C или С++?
(ii) при условии, что ответ на вопрос 1 да, как мне это сделать? Например, есть ли способ сохранить все мои R-функции, но просто выполнить цикл в C или С++: например, можно ли вызвать мои R-функции из C, а затем сделать цикл?
(iii) Я предполагаю, что я действительно хочу знать, как лучше всего подойти к включению кода C или С++ в мою программу.