# R_using non linear regression with constraints

9 messages
Open this post in threaded view
|
Report Content as Inappropriate

## R_using non linear regression with constraints

 I am using nlsLM {minpack.lm} to find the values of parameters a and b of function myfun which give the best fit for the data set, mydata. mydata=data.frame(x=c(0,5,9,13,17,20),y = c(0,11,20,29,38,45)) myfun=function(a,b,r,t){   prd=a*b*(1-exp(-b*r*t))   return(prd)} and using nlsLM myfit=nlsLM(y~myfun(a,b,r=2,t=x),data=mydata,start=list(a=2000,b=0.05),                   lower = c(1000,0), upper = c(3000,1)) It works. But now I would like to introduce a constraint which is a*b<1000. I had a look at the option available in nlsLM to set constraint via nls.lm.control. But it's not much of help. can somebody help me here or suggest a different method to to this?         [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: R_using non linear regression with constraints

 > On Jun 18, 2017, at 6:24 AM, Manoranjan Muthusamy <[hidden email]> wrote: > > I am using nlsLM {minpack.lm} to find the values of parameters a and b of > function myfun which give the best fit for the data set, mydata. > > mydata=data.frame(x=c(0,5,9,13,17,20),y = c(0,11,20,29,38,45)) > > myfun=function(a,b,r,t){ >  prd=a*b*(1-exp(-b*r*t)) >  return(prd)} > > and using nlsLM > > myfit=nlsLM(y~myfun(a,b,r=2,t=x),data=mydata,start=list(a=2000,b=0.05), >                  lower = c(1000,0), upper = c(3000,1)) > > It works. But now I would like to introduce a constraint which is a*b<1000. At the moment your coefficients do satisfy that constraint so that dataset is not suitable for testing. A slight modification of the objective function to include the logical constraint as an additional factor does not "break" that particular solution.: myfun2=function(a,b,r,t){     prd=a*b*(1-exp(-b*r*t))*(a*b<1000)     return(prd)} myfit=nlsLM(y~myfun2(a,b,r=2,t=x),data=mydata,start=list(a=2000,b=0.05),             lower = c(1000,0), upper = c(3000,1)) #------------------ myfit Nonlinear regression model   model: y ~ myfun2(a, b, r = 2, t = x)    data: mydata         a         b 3.000e+03 2.288e-02  residual sum-of-squares: 38.02 Number of iterations to convergence: 8 Achieved convergence tolerance: 1.49e-08 #-- prod(coef(myfit)) #[1] 68.64909  Same as original result. How nlsLM will handle more difficult problems is not something I have experience with, but obviously one would need to keep the starting values within the feasible domain. However, if your goal was to also remove the upper and lower constraints on a and b, This problem would not be suitably solved by the a*b product without relaxation of the default maxiter: > myfit=nlsLM(y~myfun2(a,b,r=2,t=x),data=mydata,start=list(a=2000,b=0.05), +             lower = c(0,0), upper = c(9000,1)) > prod(coef(myfit)) [1] 110.4382 > coef(myfit)            a            b 9.000000e+03 1.227091e-02 >  myfit=nlsLM(y~myfun2(a,b,r=2,t=x),data=mydata,start=list(a=2000,b=0.05), +              lower = c(0,0), upper = c(10^6,1)) Warning message: In nls.lm(par = start, fn = FCT, jac = jac, control = control, lower = lower,  :   lmdif: info = -1. Number of iterations has reached `maxiter' == 50. #---------  myfit=nlsLM(y~myfun2(a,b,r=2,t=x),data=mydata,start=list(a=2000,b=0.05),              lower = c(0,0), upper = c(10^6,1), control=list(maxiter=100))  prod(coef(myfit))  coef(myfit) #============ >  prod(coef(myfit)) [1] 780.6732  Significantly different than the solution at default maxiter of 50. > >  coef(myfit)            a            b 5.319664e+05 1.467524e-03 > > -- David. > I had a look at the option available in nlsLM to set constraint via > nls.lm.control. But it's not much of help. can somebody help me here or > suggest a different method to to this? > > [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] 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. David Winsemius Alameda, CA, USA ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: R_using non linear regression with constraints

Open this post in threaded view
|
Report Content as Inappropriate

## Re: R_using non linear regression with constraints

Open this post in threaded view
|
Report Content as Inappropriate

## Re: R_using non linear regression with constraints

Open this post in threaded view
|
Report Content as Inappropriate

## Re: R_using non linear regression with constraints

Open this post in threaded view
|
Report Content as Inappropriate

## Re: R_using non linear regression with constraints

Open this post in threaded view
|
Report Content as Inappropriate