From: Joerg van den Hoff <j.van_den_hoff_at_fzd.de>

Date: Tue, 6 Nov 2007 21:55:05 +0100

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

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.
*