在r

时间:2018-12-01 05:34:45

标签: r for-loop apply

我正在尝试使用梯形积分,因此使用下面的代码对对数正态分布的混合函数的生存函数(1-F(x))进行积分:

for(i in 1: nrow(mydf)){
mydf$Ex[i]<- trapzfun(function(x){(1-pnorm((log(x)-mydf$mu1[i])/mydf$sd1[i]))*mydf$pmix1[i]+(1-pnorm((log(x)-mydf$mu2[i])/mydf$sd2[i]))*mydf$pmix2[i]},a=0,b=1)

mu1sd1pmix1是我的平均数,以对数刻度表示。 pmix1pmix2是混合比例。

虽然运行良好,但大约需要3-5个小时的运行时间。 我猜“ for循环”不是一个好方法,我对R来说还很陌生。我确实尝试过使用apply函数:

mixture<- function(x){
  trapzfun(function(x){(1-plnorm(x,mydf$mu1,mydf$sd1))*mydf$pmix1+(1-plnorm(x,mydf$mu2,mydf$sd2))*mydf$pmix2},a=0,b=1)
}

[请注意与plnorm和使用我应用的变换的pnorm相似]

mydf$Ex_1<- apply(mydf,1,mixture)

它正在返回list(value = c(0.055257000747731, 0.055257000747731, 0.00.....

您能帮我解决这个问题吗!

0 个答案:

没有答案