[R] nls question

Chong Gu chong at stat.purdue.edu
Fri Apr 27 17:21:18 CEST 2001


   On Fri, 27 Apr 2001, Bill Simpson wrote:

   > I have a question about passing arguments to the function f that nlm
   > minimizes.
   >
   > I have no problems if I do this:
   > x<-seq(0,1,.1)
   > y<-1.1*x + (1-1.1) + rnorm(length(x),0,.1)
   > fn<-function(p)
   > 	{
   > 	yhat<-p*x+(1-p)
   > 	sum((y-yhat)^2)
   > 	}
   > out<-nlm(fn,p=1.5,hessian=TRUE)
   >
   > But I would like to define
   > fn<-function(x,y,p)
   >         {
   >         yhat<-p*x+(1-p)
   >         sum((y-yhat)^2)
   >         }
   > so that I can pass the x and y variables along, doing something like
   > out<-nlm(fn,x=this, y=that,p=1.5,hessian=TRUE)
   > This version doesn't work of course. I have looked at the examples and
   > can't figure out how to do what I want. Is it possible?
   >
   > Thanks very much for any help.
   >
   > (BTW I know nls() can be used for nonlinear least squares fitting. It
   > choked on this problem.)
   >
   > Bill Simpson
   >
   > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
   > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
   > Send "info", "help", or "[un]subscribe"
   > (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
   > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
   >


I had to do similar things within a function and this is how I do it:

task <- function(...)
{
    ...
    y <- ...
    p <- ...
    fn <- function(x) {
        yhat<-p*x+(1-p)
        assign("y",y+1,inherit=TRUE)
        sum((y-yhat)^2)
    }
    nlm(fn,x)
    ...
}

When R needs y and p within fn, it'll trace through the nested
environments to find them, and since they are not within nlm, the y and p
in task gets used; they can also be provided through the arguments of
task.  

The assign(...) line allows me to update y from within fn.  My
particular application involves a certain Newton iteration within fn,
and I have to update the starting value for that Newton iteration.

Hope this helps.

Chong
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list