Someone might be able to come up with a neat expression, but my own
approach would be to write a residual function to create the vector res
from the parameters, for which core line would be

res<-
 D1/(p1*((E/(p2-E))^(1/p3)))+D2/(p6*((E/(p2-E))^(1/p4)))
+(p5*D1*D2)/(p1*p6*((E/(p2-E))^(0.5/p3+0.5/p4)))-1

and use either package nlmrt function nlfb or package minpack.lm
function nls.lm.

Note that if you can provide a Jacobian function (nls does this
internally, which is why it is nice), you will generally get much better
results and more quickly. Writing the residuals this way round helps
avoid sign errors in the derivatives.

You can also minimize the sum of squares -- I've examples of this in my
new book "Nonlinear parameter optimization using R tools" from Wiley.
For information, I'll be giving a tutorial on this topic at UseR 2014. I
believe this year the tutorials are included in conference registration.

Let me know off-list of your progress.

JN



On 14-05-14 06:00 AM, r-help-requ...@r-project.org wrote:
> Message: 29
> Date: Tue, 13 May 2014 13:20:01 -0700 (PDT)
> From: Andras Farkas <motyoc...@yahoo.com>
> To: "r-help@r-project.org" <r-help@r-project.org>
> Subject: [R] nls() help please
> Message-ID:
>       <1400012401.98480.yahoomail...@web161605.mail.bf1.yahoo.com>
> Content-Type: text/plain
> 
> Dear All,
>  
> please help with writing the function for the following:
>  
> we have data frame "raw"
>  
> D1 <-c(2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 
> 50, 50, 50, 50, 50)
> D2 <-c(0.2, 0.5, 1, 2, 5, 0.2, 0.5, 1, 2, 5, 0.2, 0.5, 1, 2, 5, 0.2, 0.5, 1, 
> 2, 5, 0.2, 0.5, 1, 2, 5)
> E <-c(76.3, 48.8, 44.5, 15.5, 3.21, 56.7, 47.5, 26.8, 16.9, 3.25, 46.7, 35.6, 
> 21.5, 11.1, 2.94, 24.8, 21.6, 17.3, 7.78, 1.84, 13.6, 11.1, 6.43, 3.34, 0.89)
>  
> raw <-data.frame(D1,D2,E)
>  
> reasonable starting parameters for nls (to the best of my knowledge):
>  
> start <-c(p1=8,p2=80,p3=-0.7,p4=-2.5,p5=0.3,p6=0.7)
>  
> I would like to fit this model:
>  
> 1 = 
> D1/(p1*((E/(p2-E))^(1/p3)))+D2/(p6*((E/(p2-E))^(1/p4)))+(p5*D1*D2)/(p1*p6*((E/(p2-E))^(0.5/p3+0.5/p4)))
>  
>  
> to the data in "raw" using nls(). The weighting of the fit in this case 
> should be done using the inverse of the variance of raw$E. Having the model 
> equal to 1 makes it quiet difficult for me to see or understand how this can 
> be done (versus the "usual" nls(y~p1*x+p2,...)) using the software.
>  
> As always, your help is greatly appreciated.  
>  
> Sincerely,
>  
> Andras 
> 
>       [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org 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 via email to