Использование apply вместо цикла for в r - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь использовать трапециевидную интеграцию и в результате интегрирую функцию выживания (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.....

Можете ли вы помочь мне в этой проблеме!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...