Я пытаюсь использовать пакет nloptr, чтобы найти оптимальное значение x, которое максимизирует нелинейную функцию F=b0+b1*x+b2*x^2+b3*x^3.
Я использую следующий код с функцией apply(), чтобы пропустить его через каждую отдельную строку фрейма данных регрессии и получить оптимальное значение функции для каждой отдельной строки:
F <- function(x,b0,b1,b2,b3){return(b0+b1*x+b2*x^2+b3*x^3)}
Optimal <- apply(Regression,1,function(i){
nloptr( x0 <- c(0)
,eval_f <- F
,eval_g_ineq = NULL
,eval_g_eq = NULL
,eval_grad_f = NULL
,eval_jac_g_ineq = NULL
,eval_jac_g_eq = NULL
,lb <- c(-Inf)
,ub <- c(Inf)
,opts <- list( "algorithm" = "NLOPT_LD_AUGLAG",
"xtol_rel" = 1.0e-7,
"maxeval" = 1000)
,b0=Regression$b0[i]
,b1=Regression$b1[i]
,b2=Regression$b2[i]
,b3=Regression$b3[i])})
Фрейм данных регрессии, который код вызывает для значений b0, b1, b2, b3, имеет следующий формат:
Tag bo b1 b2 b3
A 5 6 1 3
B 8 8 7 3
C 9 2 7 5
D 1 6 1 3
E 3 6 2 1
.. .. .. .. ..
Я получаю следующую ошибку при запуске скрипта:
Error in is.nloptr(ret) : objective in x0 returns NA
In addition: Warning message:
In if (is.na(f0)) { :