R - loglikelihood和optim with conditional copula

时间:2013-07-25 17:26:56

标签: r

我的代码存在速度问题,我正试图解决它。我想对这些问题有你的意见/帮助我很抱歉,如果我的英语不如预期的那么好。 :P。

我是R语言的新手,我目前正在使用条件copula。我正在使用R studio编程和R版本2.15.3。我正在使用<copula>包,我正在尝试进行一些估算。

首先,我有一个长度为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&lt; = i&lt; = n

我的第一次尝试是使用'mapply'功能和'for'进行第二次尝试。但是,似乎mapply只是一种更好的方式来写一个for,哈哈。我需要能够提高logl(b)计算速度的东西。

我还尝试将函数“Vectorize”添加到dCopula,但它没有给我我需要的东西

0 个答案:

没有答案