Metropolis-Hastings アルゴリズムを使用して、C または C++ コードを R コードに組み込み、MCMC プログラムを高速化する方法についてアドバイスを求めています。私は MCMC アプローチを使用して、さまざまな共変量が与えられた場合に、個人が第三者 (裁判官) によって社会的地位階層の特定のランクに割り当てられる可能性をモデル化しています。各個人の社会的地位の評価に基づいて、個人のグループ (4 つの村にまたがる約 80 人) をランク付けします。したがって、各裁判官に対して、階層内の各個人の位置の判断に対応するランクのベクトルがあります。
これをモデル化するために、ランクを割り当てるとき、裁判官は個人の効用の潜在的な尺度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++ コードを自分のプログラムに組み込むための最善の方法だと思います。