У меня есть сложное уравнение максимального правдоподобия с тремя суммированиями. Код работает, но когда количество наблюдений увеличивается, требуется очень много времени. Как я могу изменить следующий код, чтобы сделать его более эффективным? Код ниже:
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 более эффективным способом. Спасибо.