|
Dear list,
Here is a small example code that use optim and optimize in order to fit two functions. Is it possible to fit two functions (like those two for example) at the same time using optim ... or another function in R ? Thanks Arnaud ###################################################################### ## function 1 x1 <- 1:100 y1 <- 5.468 * x + 3 # + rnorm(100,0, 10) dfxy <- cbind(x1,y1) # Objective function optfunc <- function(x, dfxy){ a <- x[1] b <- x[2] xtest <- dfxy[,1] yobs <- dfxy[,2] ysim <- a*xtest + b sum((ysim - yobs)^2) } out<- optim(par=c(0.2,5), fn=function(x){optfunc(x, dfxy)}, method = "Nelder-Mead", hessian = F) ## function 2 x2 <- seq(0.01, 0.1, length=100) y2 <- exp(30*x2) dfxy2 <- cbind(x2,y2) # objective function optfunc2 <- function(x, dfxy){ a <- x[1] xtest <- dfxy[,1] yobs <- dfxy[,2] ysim <- exp(a*xtest) sum((ysim - yobs)^2) } out<- optimize(f=function(x){optfunc2(x, dfxy2)}, interval=c(0,500)) ###################################################################### [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list 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. |
|
Dear list,
In order to find a solution to my problem, I created a third objective function including both calculations done in the previous cases. This function return a value (i.e. the value to be minimize by optim) equal to the sum of the two sum of squares, but it does not work (see the code added at the end of my previous script). Any suggestion ? Arnaud Dear list, > > Here is a small example code that use optim and optimize in order to fit > two functions. > Is it possible to fit two functions (like those two for example) at the > same time using optim ... or another function in R ? > > Thanks > > Arnaud > > ###################################################################### > ## function 1 > x1 <- 1:100 > y1 <- 5.468 * x + 3 # + rnorm(100,0, 10) > dfxy <- cbind(x1,y1) > > # Objective function > optfunc <- function(x, dfxy){ > a <- x[1] > b <- x[2] > xtest <- dfxy[,1] > yobs <- dfxy[,2] > ysim <- a*xtest + b > sum((ysim - yobs)^2) > } > > out<- optim(par=c(0.2,5), fn=function(x){optfunc(x, dfxy)}, method = > "Nelder-Mead", hessian = F) > > > ## function 2 > > x2 <- seq(0.01, 0.1, length=100) > y2 <- exp(30*x2) > dfxy2 <- cbind(x2,y2) > > # objective function > optfunc2 <- function(x, dfxy){ > a <- x[1] > xtest <- dfxy[,1] > yobs <- dfxy[,2] > ysim <- exp(a*xtest) > sum((ysim - yobs)^2) > } > > out<- optimize(f=function(x){optfunc2(x, dfxy2)}, interval=c(0,500)) > > ###################################################################### > > optfunc3 <- function(x, dfxy, dfxy2){ a <- x[1] b <- x[2] xtest <- dfxy[,1] yobs <- dfxy[,2] ysim <- a*xtest + b obj1 <- sum((ysim - yobs)^2) c <- x[3] xtest2 <- dfxy2[,1] yobs2 <- dfxy2[,2] ysim2 <- exp(c*xtest2) obj2 <- sum((ysim2 - yobs2)^2) obj1 + obj2 } out3<- optim(par=c(0.2,5, 500), fn=function(x){optfunc3(x, dfxy, dfxy2)}, method = "Nelder-Mead", hessian = F) [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list 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. |
|
The phrase "does not work" is not very helpful, it can mean quit a few
things including: * Your computer exploded. * No explosion, but smoke is pouring out the back and microsoft's "NoSmoke" utility is not compatible with your power supply. * The computer stopped working. * The computer sits around on the couch all day eating chips and watching talk shows. * The computer has started picketing your house shouting catchy slogans and demanding better working conditions and an increase in memory. * Everything went dark and you cannot check the cables on the back of the computer because the lights are off due to the power outage. * R crashed, but the other programs are still working. * R gave an error message and stopped processing your code after running for a while. * R gave an error message without running any of your code (and is waiting for your next command). * R is still running your code and the time has exceeded your patience so you think it has hung. * R completed and returned a result, but also gave warnings. * R completed your command, but gave an incorrect answer. * R completed your command but the answer is different from what you expect (but is correct according to the documentation) There are probably others. Running your code I think the answer is the last one. The criteria for optim finishing is a small improvement relative to previous improvements, not a guarantee of an exactly correct answer. Since your starting points were very different from the "True" values this means that what appears to be a good improvement can still be far from the answer that you know to be true. There are various arguments that you can give to optim to improve the fitting process, but sometimes the easiest thing to do is to just run optim again using the previous results as the new starting values. Try running the following: out4 <- optim( par=out3$par, fn=function(x){optfunc3(x,dfxy,dfxy2)}) (out4 <- optim( par=out4$par, fn=function(x){optfunc3(x,dfxy,dfxy2)})) and see if it "works". Run the last line a couple more times to see how well it works (at least it worked for me, if this does not work for you, tell us what "does not work" means). On Wed, Apr 25, 2012 at 6:57 AM, Arnaud Mosnier <[hidden email]> wrote: > Dear list, > > In order to find a solution to my problem, I created a third objective > function including both calculations done in the previous cases. This > function return a value (i.e. the value to be minimize by optim) equal to > the sum of the two sum of squares, but it does not work (see the code added > at the end of my previous script). > > Any suggestion ? > > Arnaud > > > Dear list, >> >> Here is a small example code that use optim and optimize in order to fit >> two functions. >> Is it possible to fit two functions (like those two for example) at the >> same time using optim ... or another function in R ? >> >> Thanks >> >> Arnaud >> >> ###################################################################### >> ## function 1 >> x1 <- 1:100 >> y1 <- 5.468 * x + 3 # + rnorm(100,0, 10) >> dfxy <- cbind(x1,y1) >> >> # Objective function >> optfunc <- function(x, dfxy){ >> a <- x[1] >> b <- x[2] >> xtest <- dfxy[,1] >> yobs <- dfxy[,2] >> ysim <- a*xtest + b >> sum((ysim - yobs)^2) >> } >> >> out<- optim(par=c(0.2,5), fn=function(x){optfunc(x, dfxy)}, method = >> "Nelder-Mead", hessian = F) >> >> >> ## function 2 >> >> x2 <- seq(0.01, 0.1, length=100) >> y2 <- exp(30*x2) >> dfxy2 <- cbind(x2,y2) >> >> # objective function >> optfunc2 <- function(x, dfxy){ >> a <- x[1] >> xtest <- dfxy[,1] >> yobs <- dfxy[,2] >> ysim <- exp(a*xtest) >> sum((ysim - yobs)^2) >> } >> >> out<- optimize(f=function(x){optfunc2(x, dfxy2)}, interval=c(0,500)) >> >> ###################################################################### >> >> > > optfunc3 <- function(x, dfxy, dfxy2){ > > a <- x[1] > b <- x[2] > xtest <- dfxy[,1] > yobs <- dfxy[,2] > ysim <- a*xtest + b > obj1 <- sum((ysim - yobs)^2) > > c <- x[3] > xtest2 <- dfxy2[,1] > yobs2 <- dfxy2[,2] > ysim2 <- exp(c*xtest2) > obj2 <- sum((ysim2 - yobs2)^2) > > obj1 + obj2 > } > > out3<- optim(par=c(0.2,5, 500), fn=function(x){optfunc3(x, dfxy, dfxy2)}, > method = "Nelder-Mead", hessian = F) > > [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] mailing list > 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. -- Gregory (Greg) L. Snow Ph.D. [hidden email] ______________________________________________ [hidden email] mailing list 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. |
|
Nice, thank you !
I particularly appreciated the list of possible explanations for "it does not work" ! :-) Arnaud Le 26 avril 2012 13:49, Greg Snow <[hidden email]> a écrit : > The phrase "does not work" is not very helpful, it can mean quit a few > things including: > > * Your computer exploded. > * No explosion, but smoke is pouring out the back and microsoft's > "NoSmoke" utility is not compatible with your power supply. > * The computer stopped working. > * The computer sits around on the couch all day eating chips and > watching talk shows. > * The computer has started picketing your house shouting catchy > slogans and demanding better working conditions and an increase in > memory. > * Everything went dark and you cannot check the cables on the back of > the computer because the lights are off due to the power outage. > * R crashed, but the other programs are still working. > * R gave an error message and stopped processing your code after > running for a while. > * R gave an error message without running any of your code (and is > waiting for your next command). > * R is still running your code and the time has exceeded your patience > so you think it has hung. > * R completed and returned a result, but also gave warnings. > * R completed your command, but gave an incorrect answer. > * R completed your command but the answer is different from what you > expect (but is correct according to the documentation) > > There are probably others. > > Running your code I think the answer is the last one. The criteria > for optim finishing is a small improvement relative to previous > improvements, not a guarantee of an exactly correct answer. Since > your starting points were very different from the "True" values this > means that what appears to be a good improvement can still be far from > the answer that you know to be true. There are various arguments that > you can give to optim to improve the fitting process, but sometimes > the easiest thing to do is to just run optim again using the previous > results as the new starting values. Try running the following: > > out4 <- optim( par=out3$par, fn=function(x){optfunc3(x,dfxy,dfxy2)}) > (out4 <- optim( par=out4$par, fn=function(x){optfunc3(x,dfxy,dfxy2)})) > > and see if it "works". Run the last line a couple more times to see > how well it works (at least it worked for me, if this does not work > for you, tell us what "does not work" means). > > On Wed, Apr 25, 2012 at 6:57 AM, Arnaud Mosnier <[hidden email]> > wrote: > > Dear list, > > > > In order to find a solution to my problem, I created a third objective > > function including both calculations done in the previous cases. This > > function return a value (i.e. the value to be minimize by optim) equal to > > the sum of the two sum of squares, but it does not work (see the code > added > > at the end of my previous script). > > > > Any suggestion ? > > > > Arnaud > > > > > > Dear list, > >> > >> Here is a small example code that use optim and optimize in order to fit > >> two functions. > >> Is it possible to fit two functions (like those two for example) at the > >> same time using optim ... or another function in R ? > >> > >> Thanks > >> > >> Arnaud > >> > >> ###################################################################### > >> ## function 1 > >> x1 <- 1:100 > >> y1 <- 5.468 * x + 3 # + rnorm(100,0, 10) > >> dfxy <- cbind(x1,y1) > >> > >> # Objective function > >> optfunc <- function(x, dfxy){ > >> a <- x[1] > >> b <- x[2] > >> xtest <- dfxy[,1] > >> yobs <- dfxy[,2] > >> ysim <- a*xtest + b > >> sum((ysim - yobs)^2) > >> } > >> > >> out<- optim(par=c(0.2,5), fn=function(x){optfunc(x, dfxy)}, method = > >> "Nelder-Mead", hessian = F) > >> > >> > >> ## function 2 > >> > >> x2 <- seq(0.01, 0.1, length=100) > >> y2 <- exp(30*x2) > >> dfxy2 <- cbind(x2,y2) > >> > >> # objective function > >> optfunc2 <- function(x, dfxy){ > >> a <- x[1] > >> xtest <- dfxy[,1] > >> yobs <- dfxy[,2] > >> ysim <- exp(a*xtest) > >> sum((ysim - yobs)^2) > >> } > >> > >> out<- optimize(f=function(x){optfunc2(x, dfxy2)}, interval=c(0,500)) > >> > >> ###################################################################### > >> > >> > > > > optfunc3 <- function(x, dfxy, dfxy2){ > > > > a <- x[1] > > b <- x[2] > > xtest <- dfxy[,1] > > yobs <- dfxy[,2] > > ysim <- a*xtest + b > > obj1 <- sum((ysim - yobs)^2) > > > > c <- x[3] > > xtest2 <- dfxy2[,1] > > yobs2 <- dfxy2[,2] > > ysim2 <- exp(c*xtest2) > > obj2 <- sum((ysim2 - yobs2)^2) > > > > obj1 + obj2 > > } > > > > out3<- optim(par=c(0.2,5, 500), fn=function(x){optfunc3(x, dfxy, dfxy2)}, > > method = "Nelder-Mead", hessian = F) > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > [hidden email] mailing list > > 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. > > > > -- > Gregory (Greg) L. Snow Ph.D. > [hidden email] > ______________________________________________ [hidden email] mailing list 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. |
|
In reply to this post by glsnow
On Apr 26, 2012, at 12:49 PM, Greg Snow wrote: > The phrase "does not work" is not very helpful, it can mean quit a few > things including: > > * Your computer exploded. > * No explosion, but smoke is pouring out the back and microsoft's > "NoSmoke" utility is not compatible with your power supply. > * The computer stopped working. > * The computer sits around on the couch all day eating chips and > watching talk shows. > * The computer has started picketing your house shouting catchy > slogans and demanding better working conditions and an increase in > memory. > * Everything went dark and you cannot check the cables on the back of > the computer because the lights are off due to the power outage. > * R crashed, but the other programs are still working. > * R gave an error message and stopped processing your code after > running for a while. > * R gave an error message without running any of your code (and is > waiting for your next command). > * R is still running your code and the time has exceeded your patience > so you think it has hung. > * R completed and returned a result, but also gave warnings. > * R completed your command, but gave an incorrect answer. > * R completed your command but the answer is different from what you > expect (but is correct according to the documentation) > > There are probably others. <snip> Since Greg has kindly raised the fortunes package today, I propose that the above be captured as an R Classic. Regards, Marc Schwartz ______________________________________________ [hidden email] mailing list 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. |
|
I second the proposition !
Thanks to let me discover that absolutely essential library !! :-) Arnaud Le 26 avril 2012 15:30, Marc Schwartz <[hidden email]> a écrit : > > On Apr 26, 2012, at 12:49 PM, Greg Snow wrote: > > > The phrase "does not work" is not very helpful, it can mean quit a few > > things including: > > > > * Your computer exploded. > > * No explosion, but smoke is pouring out the back and microsoft's > > "NoSmoke" utility is not compatible with your power supply. > > * The computer stopped working. > > * The computer sits around on the couch all day eating chips and > > watching talk shows. > > * The computer has started picketing your house shouting catchy > > slogans and demanding better working conditions and an increase in > > memory. > > * Everything went dark and you cannot check the cables on the back of > > the computer because the lights are off due to the power outage. > > * R crashed, but the other programs are still working. > > * R gave an error message and stopped processing your code after > > running for a while. > > * R gave an error message without running any of your code (and is > > waiting for your next command). > > * R is still running your code and the time has exceeded your patience > > so you think it has hung. > > * R completed and returned a result, but also gave warnings. > > * R completed your command, but gave an incorrect answer. > > * R completed your command but the answer is different from what you > > expect (but is correct according to the documentation) > > > > There are probably others. > > > <snip> > > Since Greg has kindly raised the fortunes package today, I propose that > the above be captured as an R Classic. > > Regards, > > Marc Schwartz > > ______________________________________________ [hidden email] mailing list 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. |
|
In reply to this post by glsnow
On 27/04/12 05:49, Greg Snow wrote:
> The phrase "does not work" is not very helpful, it can mean quit a few > things including: > > * Your computer exploded. > * No explosion, but smoke is pouring out the back and microsoft's > "NoSmoke" utility is not compatible with your power supply. > * The computer stopped working. > * The computer sits around on the couch all day eating chips and > watching talk shows. > * The computer has started picketing your house shouting catchy > slogans and demanding better working conditions and an increase in > memory. > * Everything went dark and you cannot check the cables on the back of > the computer because the lights are off due to the power outage. > * R crashed, but the other programs are still working. > * R gave an error message and stopped processing your code after > running for a while. > * R gave an error message without running any of your code (and is > waiting for your next command). > * R is still running your code and the time has exceeded your patience > so you think it has hung. > * R completed and returned a result, but also gave warnings. > * R completed your command, but gave an incorrect answer. > * R completed your command but the answer is different from what you > expect (but is correct according to the documentation) > > There are probably others. > > Running your code I think the answer is the last one. The foregoing is so priceless that I think it ought to be a fortune, irrespective of its length. cheers, Rolf Turner ______________________________________________ [hidden email] mailing list 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. |
| Powered by Nabble | Edit this page |
