On Fri, 8 Aug 2008, Keith Jewell wrote:

Dear Prof. Ripley,

Thank you for your helpful reply. I will download and try R-patched ASAP.

I take your point, I should have tried the latest version (R-patched) before
posting.

With respect to R-patched, would you recommend its use routinely, or only in
investigation of "unexpected behaviour"?

I use it routinely.

In this case I was not expecting this to be fixed, but just tried your example in my usual R-patched (when it worked) and then in 2.7.1 (to confirm I could reproduce it) -- I then had to figure out what fix also fixed this one -- as it was

    o   nls() was only finding its 'weights' argument in the case when
        all the variables in the formula were of the same length and
        hence that model.frame() could be used.

it would have been obvious to no one. Hence the advice to try R-patched (rather than just read about the changes) can pay off.


Thanks again,

Keith Jewell
-------------
"Prof Brian Ripley" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
Your example works in R-patched, as a consequence of investigations of a
different problem.  (See the comments in the posting guide about updating
your R and trying the very latest versions.)

Windows binaries for R-patched are available on CRAN.

On Tue, 5 Aug 2008, Keith Jewell wrote:

Hi All,

I've hit a problem using nls. I think it may be a restriction in the
applicability of nls and I may have found a fix, but I've been wrong
before.

This example is simplified to the essentials. My real application is much
more complicated.

Take a function of matrix 'x' with additional arguments:
matrix 'aMat' whose values are _not_ to be determined by nls
vector 'Coeffs' whose vales _are_ to be determined.
For simplicity, this isn't a selfStart function with an 'initial'
attribute,
but that doesn't change things.

Myfunc<-function(x, aMat, Coeffs)
{
#
# result = quadratic response in x with
# terms selected by aMat
#
aMat[aMat!=0] <- Coeffs
rowSums((x%*%aMat)%*%t(x))
}

If aMat is passed in by name (e.g. aMat = bMat) nls fails.
e.g.
#
# data frame with some noise
DF <- data.frame(x1 = runif(20, 1, 20), x2=runif(20, 1, 20))
DF$y <- 1 +DF$x1 +DF$x2 +DF$x1*DF$x2 +DF$x1^2 + DF$x2^2 + rnorm(20)
#
# matrix to pass in as aMat
bMat <- matrix(c(1,1,0,0), 2, 2)
#
# and nls fails
nls(y ~ Myfunc(cbind(x1, x2), bMat, aVec), DF, start=list(aVec=c(1,2)))
#
# pass in the same matrix other than by name and it works
nls(y ~ Myfunc(cbind(x1, x2), matrix(c(1,1,0,0), 2, 2), aVec), DF,
start=list(aVec=c(1,2)))

I think the problem lies in this line in nls

 for (var in varNames[!varIndex]) mf[[var]] <- eval(as.name(var), data,
env)

This adds values for some named arguments (bMat) as columns of the data
frame. The problem is that generally they don't have the same number of
rows. I've made it work for my example by replacing that line with this
line, which adds values for those arguments to the data frame as
parameters
rather than as a column

 attributes(mf)[["parameters"]] <-
c(attributes(mf)[["parameters"]],lapply(varNames[!varIndex],
function(var)
eval(as.name(var), data, env)) )

Problem is, I really don't know nls internals enough to be sure I haven't
broken something.
And anyway, if this is really an improvement I ought to share it, but
don't
know how.

Or I could have totally the wrong end of the stick...

Comments, corrections and advice are welcome.

Thanks in advance,

Keith Jewell
-----------------------
sessionInfo()
R version 2.7.0 (2008-04-22)
i386-pc-mingw32

locale:
LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United
Kingdom.1252;LC_MONETARY=English_United
Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252

attached base packages:
[1] stats     graphics  grDevices datasets  tcltk     utils     methods
base

other attached packages:
[1] xlsReadWrite_1.3.2 svSocket_0.9-5     svIO_0.9-5         R2HTML_1.58
[5] svMisc_0.9-5       svIDE_0.9-5

loaded via a namespace (and not attached):
[1] tools_2.7.0 VGAM_0.7-7

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


--
Brian D. Ripley,                  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

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


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


--
Brian D. Ripley,                  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

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

Reply via email to