我正在寻求有关如何使用 Metropolis-Hastings 算法将 C 或 C++ 代码合并到我的 R 代码中以加速 MCMC 程序的建议。在给定各种协变量的情况下,我正在使用 MCMC 方法来模拟个人将被第三方(法官)在社会地位等级中分配特定等级的可能性:询问每位法官(约 80 名,跨越 4 个村庄)根据他们对每个人的社会地位的评估,对一组人(约 80 人,跨越 4 个村庄)进行排名。因此,对于每个法官,我都有一个等级向量,对应于他们对每个人在层次结构中的位置的判断。
为了对此建模,我假设在分配等级时,法官的决定是基于个人效用的某种潜在衡量标准u的相对价值。鉴于此,可以假设给定法官产生的等级向量r是未观察到的向量u的函数,它描述了被排名的个人的效用,其中u的第 k 个最高值的个人将被分配第k 个等级。我使用感兴趣的协变量对u进行建模,将其作为多元正态分布变量,然后在给定模型生成的u分布的情况下确定观察到的等级的可能性。
除了估计最多 5 个协变量的影响之外,我还估计了描述评委和项目之间差异的超参数。因此,对于链的每次迭代,我估计多元正态密度大约为 8-10 次。因此,5000 次迭代可能需要长达 14 小时。显然,我需要运行它超过 5000 次,所以我需要一种方法来显着加快这个过程。鉴于此,我的问题如下:
(i) 我是否正确地假设通过在 C 或 C++ 中运行一些(如果不是全部)我的链可以获得最佳速度增益?
(ii) 假设问题 1 的答案是肯定的,我该怎么做?例如,有没有办法让我保留我所有的 R 函数,但只需在 C 或 C++ 中执行循环:即我可以从 C 调用我的 R 函数然后执行循环吗?
(iii) 我想我真正想知道的是如何最好地将 C 或 C++ 代码合并到我的程序中。