コードに速度の問題があり、解決しようとしています。これらの問題についてあなたの意見/助けを求めたいのですが、もし私の英語が期待したほど良くなかったら申し訳ありません. :P。
私はR言語が初めてで、現在条件付きコピュラを扱っています。私はプログラミングとRバージョン2.15.3にRスタジオを使用しています。私は<copula>
パッケージを使用しており、mle の見積もりを実行しようとしています。
まず、長さ n = 250 の二変量ベクトル u = [u_1, u_2] があります。次のような関数があります。
logl = function(u,x,xcentre)
{
function(b){
thetaList = thetax(xcentre,b)
#Try 1
#vectD = mapply(function(t1,t2, theta) (dCopula(c(t1,t2), frankCopula(theta),
#log = TRUE)), u[,1], u[,2], thetaList)
#return (-1/n*sum(vectD))
#Try 2
vectD = 0
for (i in 1:n)
{
vectD = vectD + dCopula(u[i,], frankCopula(thetaListe[i]), log = TRUE)
}
return (-1/n*(vectD))
}
}
(1) x は長さ n = 250 のデータ付きベクトルです。xcentre はスカラー (x = 1 など)
(2)thetax(xcentre,b) は長さ n = 250 のパラメーター theta のリストを返し、それを thetalist に入れます
関数 dCopula を関数 f(u,v) に置き換えることができます。ここで、u = [u_1, u_2] で、v はスカラーです。
だから私がやろうとしていることはこれです:
b : 2 つのパラメーターのベクトル logl (b) = -1/n * sum [ log( f(u,v) ] ここで、合計はすべての (u_i, v_i) 1 <= i <= n
私の最初の試みは、「mapply」関数と「for」を 2 回目の試行に使用することでした。でも、mapply の方が for の書き方が綺麗なだけみたいです(笑)。logl(b) の計算速度を上げるものが必要です。
dCopula に対して関数「Vectorize」も試しましたが、必要なものが得られませんでした