1

コードに速度の問題があり、解決しようとしています。これらの問題についてあなたの意見/助けを求めたいのですが、もし私の英語が期待したほど良くなかったら申し訳ありません. :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」も試しましたが、必要なものが得られませんでした

4

0 に答える 0