[R] nls with some coefficients fixed

Keith Jewell k.jewell at campden.co.uk
Tue Jul 20 18:30:42 CEST 2010


<nashjc at uottawa.ca> wrote in message 
news:33466.129.6.253.2.1279634282.squirrel at webmail02.uottawa.ca...
> For nls, the fixing (or masking) of parameters is not, to my knowledge,
> possible.
>
> This is something I've been trying to get in such routines for over 2
> decades. Masks are
> available, but not yet well documented, in Rcgmin and Rvmmin packages.
> However, these use
> an optim() style approach, which is quite different from nls(). If there's
> sufficient
> interest and some collaboration, I'd be willing to have a go at providing
> such
> functionality, but it would take quite a bit of work to provide the full
> capability of nls().
>
> JN
>

Thanks for that. It would be burdensome to move away from nls, a lot of my 
functions depend on nls-like properties of fitted objects.

I'm considering 'fixing' nls by creating a 'wrapper' with the same name to:
a) if start is unspecified, call getInitial
b) call 'vanilla' nls with start restricted to 'non-fixed' terms,
something like...
-----------------
nls <- function(formula, data=parent.frame(), start, ...){
  if missing(start) start <- getInitial(formula, data)
  stats:::nls(formula, data, start=start[names(start) %in% 
all.vars(formula)], ...]
}
----------------------
The getInitial values will be calculated ignoring the fact that some 
parameters are 'fixed' (unless the particular 'initial' attribute is very 
clever!), but they shouldn't be too bad, and I don't really see a practical 
alternative way of getting the required starting values.

I think this will work, but I'm very doubtful if it will work reliably. 
Issues that concern me include:

a) How will 'data=parent.frame()' behave?
   I've had troubles before with scope and nls!

b) Will other callers of nls (e.g. nlme:::nlsList) call mine or the 
original?
   Search list is something like
   [1]".GlobalEnv"    [n]mine   [n+l]"package:nlme" [n+l+m]"package:stats"

Any comments?

Thanks in advance,

Keith J



More information about the R-help mailing list