[Rd] strange `nls' behaviour

From: Joerg van den Hoff <j.van_den_hoff_at_fzd.de>
Date: Tue, 6 Nov 2007 21:55:05 +0100


dear list,

I stumbled over the follwing strange behaviour/error when using `nls' which I'm tempted (despite the implied "dangers") to call a bug:

I've written a driver for `nls' which allows specifying the model and the data vectors using arbitrary symbols. these are internally mapped to consistent names, which poses a slight complication when using `deriv' to provide analytic derivatives. the following fragment gives the idea:
#-----------------------------------------
f <- function(n = 4) {

   x <- 1:n

   y <- 2 * exp(-1*x) + 2;
   y <- rnorm(y,y, 0.01*y)

   model <- y ~ a * exp (-b*x) + c

   fitfunc <- deriv(model[[3]], c("a", "b", "c"), c("a", "b", "c", "x"))    res1 <- nls(y ~ fitfunc(a, b, c, x), start = c(a=1, b=1, c=1))

   call.fitfunc <-
   c(list(fitfunc), as.name("a"), as.name("b"), as.name("c"), as.name("x"))    call.fitfunc <- as.call(call.fitfunc)    frml <- as.formula("y ~ eval(call.fitfunc)")    res2 <- nls(frml, start = c(a=1, b=1, c=1))

   list(res1 = res1, res2 = res2)
}
#-----------------------------------------

the first call to `nls' is the standard way of calling `nls' when knowing all the names. the second call (yielding `res2') uses a constructed formula in `frml' (which in this example is of course not necessary, but in the general case 'a,b,c,x,y' are not a priori known names).

here is the problem: the call

f(4)

using 4 data points
runs fine/consistently, as does every call with n > 5.

BUT: for n = 5 (i.e. issuing f(5))
the second fit leads to the error message:

"Error in model.frame(formula, rownames, variables, varnames, extras, extranames, :

        invalid type (language) for variable 'call.fitfunc'"

I cornered this to a spot in `nls' where a model frame is constructed in variable `mf'. the parsing/constructing here seems simply to be messed up for n = 5: `call.fitfunc' is interpreted as variable.

I, moreover, empirically noted that the problem occurs when the total number of parameters plus dependent/independent variables equals the number of data points (in the present example a,b,c,x,y).

so it is not the 'magic' number of 5 but rather the identity of data vector length and number of variables in the model which leads to the problem.

this is with 2.5.0 (which hopefully is not considered ancient) and MacOSX 10.4.10.

any ideas?

thanks

joerg



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 06 Nov 2007 - 21:10:42 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 06 Nov 2007 - 21:30:15 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.