Я пытаюсь использовать трапециевидную интеграцию и в результате интегрирую функцию выживания (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)
mu1
, sd1
, pmix1
- мое среднее значение, стандартная шкала в логах.pmix1
и pmix2
- это пропорции смешивания.
Пока все работает хорошо, время выполнения занимает около 3-5 часов.Я предполагаю, что «для циклов» не очень хороший метод, и я довольно плохо знаком с 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, используя преобразование Iприменяется]
mydf$Ex_1<- apply(mydf,1,mixture)
возвращается list(value = c(0.055257000747731, 0.055257000747731, 0.00.....
Можете ли вы помочь мне в этой проблеме!