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