[R] Optimization function producing negative parameter values

Bill Dunlap w||||@mwdun|@p @end|ng |rom gm@||@com
Sun Mar 21 18:50:05 CET 2021


Does optim go out of bounds when you specify hessian=FALSE?
hessian=TRUE causes some out-of-bounds evaluations of f.

> optim(c(X=1,Y=1), function(XY){print(unname(XY));(XY[["X"]]+1)^4+(XY[["Y"]]-2)^4}, method= "L-BFGS-B", lower=c(0.001,0.001), upper=c(1.5,1.5), hessian=TRUE)
[1] 1 1
[1] 1.001 1.000
[1] 0.999 1.000
[1] 1.000 1.001
[1] 1.000 0.999
[1] 0.001 1.500
[1] 0.002 1.500
[1] 0.001 1.500
[1] 0.001 1.500
[1] 0.001 1.499
[1] 0.003 1.500
[1] 0.001 1.500
[1] 0.002 1.501
[1] 0.002 1.499
[1] 0.001 1.500
[1] -0.001  1.500
[1] 0.000 1.501
[1] 0.000 1.499
[1] 0.002 1.501
[1] 0.000 1.501
[1] 0.001 1.502
[1] 0.001 1.500
[1] 0.002 1.499
[1] 0.000 1.499
[1] 0.001 1.500
[1] 0.001 1.498
$par
    X     Y
0.001 1.500

$value
[1] 1.066506

On Sun, Mar 21, 2021 at 10:22 AM Shah Alam <dr.alamsolangi using gmail.com> wrote:
>
> Dear all,
>
> I am using optim() to estimate unknown parameters by minimizing the
> residual sums of squares. I created a function with the model. The model is
> working fine. The optim function is producing negative parameter values, even
> I have introduced upper and lower bounds (given in code). Therefore,
> the model produces *NAs*.
>
> Following is my code.
>
> param <<- c(0.002,0.002, 0.14,0.012,0.01,0.02, 0.03, 0.001)# initial
> > parameter values
> > opt <- optim(param, fn= f.opt, obsdata =obsdata_10000, method= "L-BFGS-B",
> > lower = c(0.001, 0.001, 0.08,0.008, 0.009, 0.008, 0.009, 0.001),
>
> upper = c(0.00375, 0.002, 0.2, 0.018, 0.08, 0.08, 0.08, 0.01),
> > control=list(maxit=10), hessian = T)
>
>
> Error:
>
> *"NAs producedError in if (rnd_1 < liferisk) { : missing value where
> TRUE/FALSE needed "*
>
> The model function which produces NA due to negative parameter values
>
> liferisk <- rnorm(n = 1, mean =
> (calib_para[which(names(calib_para)=="r_mu")]),sd =
> (calib_para[which(names(calib_para)=="r_sd")]))
>
>   rnd_1 <- runif(1, 0, 1)
>
>   if (rnd_1 < liferisk) { ca_case <- 1} else {ca_case <- 0}
>
>
> How to design/ modify optim() function, and upper-lower bounds to stop
> producing negative values during parameter search?
> Thanks
>
> Best regards,
> Shah
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list