我的代码有速度问题,我正在尝试解决它。我想就这些问题获得您的意见/帮助,如果我的英语没有预期的那么好,我很抱歉。: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”功能,但它没有给我我需要的东西