"Gabor Grothendieck" <ggrothendi...@gmail.com> wrote in message news:aanlktilszaicycu3lz2f5d_bxq1g8m8f7jsjsbj2l...@mail.gmail.com... > On Tue, Jul 20, 2010 at 9:58 AM, <nas...@uottawa.ca> wrote: >> 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(). >> > > You can optimize over b while fixing m like this: > > m <- 1 > nls(demand ~ m + b * Time, BOD, start = c(b = 1)) > Thanks Gabor,
I'd recognised that approach in my original post starting this thread (19 July) where I'd used the example: #-------------------------------- # fix parameter and use explicit start values works fine nls(density ~ SSgompertz(log(conc), Asym, b2, b3=0.8), data = DNase.1, start=list(Asym=3, b2=2)) #--------------------------- I'm fitting many different models so I need a more generic approach. I'd appreciate any comments on the suggestion in my 20 July post? (repeated here with some typo's corrected) ----------------- 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)], ...) } ---------------------- I see it breaks nls for non-selfStart functions; e.g. omitting the explicit start from your example nls(demand ~ m + b * Time, BOD) works fine with vanilla nls (albeit with a warning) # No starting values specified for some parameters. # Intializing 'b' to '1.'. # Consider specifying 'start' or using a selfStart model but my wrapper breaks it altogether. # Error in getInitial.default(func, data, mCall = as.list(match.call(func, : # no 'getInitial' method found for "function" objects I think that's OK in my application - I either use selfStart functions or explicit start lists - but I don't really want to remove existing functionality. I guess I could (!?!) dive into nls and implement the same kind of approach internally, but that's very deep water for me :-{ Best regards, Keith J ______________________________________________ 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.