Did you check the gradient? I don't think so. It's zero, so of course you end up where you start.
Try data.input= data.frame(state1 = (1:500), state2 = (201:700) ) err.th.scalar <- function(threshold, data){ state1 <- data$state1 state2 <- data$state2 op1l <- length(state1) op2l <- length(state2) op1.err <- sum(state1 <= threshold)/op1l op2.err <- sum(state2 >= threshold)/op2l total.err <- (op1.err + op2.err) return(total.err) } soln <- optim(par = 300, fn=err.th.scalar, data = data.input, method = "BFGS") soln require("numDeriv") gtest <- grad(err.th.scalar, x=300, data = data.input) gtest On 2018-02-09 09:05 AM, BARLAS Marios 247554 wrote: > data.input= data.frame(state1 = (1:500), state2 = (201:700) ) > > with data that partially overlap in terms of values. > > I want to minimize the assessment error of each state by using this function: > > err.th.scalar <- function(threshold, data){ > > state1 <- data$state1 > state2 <- data$state2 > > op1l <- length(state1) > op2l <- length(state2) > > op1.err <- sum(state1 <= threshold)/op1l > op2.err <- sum(state2 >= threshold)/op2l > > total.err <- (op1.err + op2.err) > > return(total.err) > } > > > SO I'm trying to minimize the total error. This Total Error should be a U > shape essentially. > > > I'm using optim as follows: > > optim(par = 300, fn=err.th.scalar, data = data.input, method = "BFGS") Maybe develop an analytic gradient if it is very small, as the numeric approximation can then be zero even when the true gradient is not. JN ______________________________________________ R-help@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.