1

我的代码有速度问题,我正在尝试解决它。我想就这些问题获得您的意见/帮助,如果我的英语没有预期的那么好,我很抱歉。:P。

我是 R 语言的新手,我目前正在使用条件 copula。我正在使用 R studio 进行编程和 R 版本 2.15.3。我正在使用该<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”进行第二次尝试。但是,似乎 mapply 只是写 for 的一种更漂亮的方式,哈哈。我需要一些可以提高 logl(b) 计算速度的东西。

我还尝试了 dCopula 的“Vectorize”功能,但它没有给我我需要的东西

4

0 回答 0