I used hcubature for double integrals over two parameters inside a function that I defined but it runs forever . How I can solve this problem to get the result of the integral over the function "myFunction" that I created. The following is the code.
library(TailRank)
library(numDeriv)
library(cubature)
set.seed(8765)
obs=15
try=10
u=0.175
v=0.075
rbet=cbind(rbb(obs,try,u,v))
rbet
combinations=combn(rbet, 2)
combinationst=t(combinations)
pair=combinationst[sample(nrow(combinationst),size=25,replace=FALSE),]
pair
myFunction=function(parameter)
{
sumlog=sum(lchoose(try,rbet)+lbeta((parameter[1]*(1-parameter[2]))/parameter[2]+(rbet),(1-parameter[1])*(1-parameter[2])/parameter[2]+(try-rbet))-lbeta((parameter[1]*(1-parameter[2]))/parameter[2],(1-parameter[1])*(1-parameter[2])/parameter[2]))
z=0
for (i in 1:nrow(pair))
{
a1=pair[i,1]
logf1=lchoose(try,a1)+lbeta((parameter[1]*(1-parameter[2]))/parameter[2]+(a1),(1-parameter[1])*(1-parameter[2])/parameter[2]+(try-a1))-lbeta((parameter[1]*(1-parameter[2]))/parameter[2],(1-parameter[1])*(1-parameter[2])/parameter[2])
i1=seq(0,a1,1)
a2=pair[i,2]
logf2=lchoose(try,a2)+lbeta((parameter[1]*(1-parameter[2]))/parameter[2]+(a2),(1-parameter[1])*(1-parameter[2])/parameter[2]+(try-a2))-lbeta((parameter[1]*(1-parameter[2]))/parameter[2],(1-parameter[1])*(1-parameter[2])/parameter[2])
i2=seq(0,a2,1)
myFun=function(x)
{
f1=0
f1=sum(choose(try,i1)*beta((x[1]*(1-x[2]))/x[2]+i1,(1-x[1])*(1-x[2])/x[2]+(try-i1))/beta((x[1]*(1-x[2]))/x[2],(1-x[1])*(1-x[2])/x[2]))
f2=0
f2=sum(choose(try,i2)*beta((x[1]*(1-x[2]))/x[2]+i2,(1-x[1])*(1-x[2])/x[2]+(try-i2))/beta((x[1]*(1-x[2]))/x[2],(1-x[1])*(1-x[2])/x[2]))
return(c(f1,f2))
}
Rjac=jacobian(func=myFun,x=c(parameter[1],parameter[2]),method="Richardson")
labsdetjac=log(abs(det(Rjac)))
subtotal=sumlog+labsdetjac-(logf1+logf2)
total=z+subtotal
}
exptotal=exp(total)
return(exptotal)
}
out=hcubature(myFunction, c(0.001,0.001), c(0.7,0.8),tol=1e-4)
result=out$integral
print(result)