Re: [R] Optim function returning always initial value for parameter to be optimized
On 02/10/2018 06:00 AM, r-help-requ...@r-project.org wrote: 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 I think this function is not smooth, and not even continuous. Gradient methods require differentiable (smooth) functions. A numerical approximation will be zero unless you are right near a jump point, so you are unlikely to move from your initial guess. Paul 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.
Re: [R] Optim function returning always initial value for parameter to be optimized
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.
[R] Optim function returning always initial value for parameter to be optimized
Hello, I'm trying to fminimize the following problem: You have a data frame with 2 columns. 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") For some reason that's driving me crazy, in the first trial it worked but right now the output of optim for the parameter to get optimized is EXACTLY the same as the initial estimate whatever the initial estimate value is. Please, any ideas why ? I can't see the error at this moment. Thanks in advance, Marios Barlas __ 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.