Quantcast

Use of optim to fit two curves at the same time ?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Use of optim to fit two curves at the same time ?

arnaud Mosnier-2
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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Use of optim to fit two curves at the same time ?

arnaud Mosnier-2
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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Use of optim to fit two curves at the same time ?

glsnow
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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Use of optim to fit two curves at the same time ?

arnaud Mosnier-2
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]
>
        [[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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Use of optim to fit two curves at the same time ?

Marc Schwartz-3
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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Use of optim to fit two curves at the same time ?

arnaud Mosnier-2
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
>
>
        [[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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Use of optim to fit two curves at the same time ?

Rolf Turner-3
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.
Loading...