Как более эффективно написать тройку вложенных для l oop для оптимизации в R? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть сложное уравнение максимального правдоподобия с тремя суммированиями. Код работает, но когда количество наблюдений увеличивается, требуется очень много времени. Как я могу изменить следующий код, чтобы сделать его более эффективным? Код ниже:

I <- 0:7
J <- 0:7
function(step_7) {
        abcd <- 0 
        for (t in 1:nrow(returns[[4]][,1])){ 
          abc <- 0 
          for (i in I){
            for (j in J){
              abc <- abc + (step_7[3]^i*(factorial(i))^-1*step_7[7]^j*(factorial(j))^-1*(sqrt((step_7[2]^2+i*step_7[4]^2)*(step_7[6]^2+j*step_7[8]^2)*(1-step_6A_eta[4]^2)))^-1*exp(-1*(2*(1-step_6A_eta[4]^2))^-1*(((as.numeric(returns[[4]][t,1])-step_7[1])^2*(step_7[2]^2+i*step_7[4]^2)^-1)-(2*step_6A_eta[4]*(as.numeric(returns[[4]][t,1])-step_7[1])*(as.numeric(returns[[4]][t,2])-step_7[5])*(sqrt((step_7[2]^2+i*step_7[4]^2)*(step_7[6]^2+j*step_7[8]^2)))^-1)+((as.numeric(returns[[4]][t,2])-step_7[5])^2*(step_7[6]^2+j*step_7[8]^2)^-1))))
            }
          }
          abcd  <- abcd + log(abc)
        } 
        abcd <- -abcd  + nrow(returns[[4]][,1])*log(2*pi) + nrow(returns[[4]][,1])*step_7[3] +nrow(returns[[4]][,1])*step_7[7] + 0.5*nrow(returns[[4]][,1])*log(1- step_6A_eta[4]^2)
        print(abcd)
        return(abcd)
      }

    step_7 <- optim( step_7 <- c(0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1),step_7, hessian = TRUE)

Любые случайные данные с двумя столбцами (значения от -1 до 1) могут использоваться вместо возвращаемых значений [[4]] [1,2] (нет НП ).

Я особенно заинтересован в том, чтобы изменить три цикла for более эффективным способом. Спасибо.

...