[R] Fix for nls bug???

Keith Jewell k.jewell at campden.co.uk
Fri Aug 8 12:50:45 CEST 2008


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"?

Thanks again,

Keith Jewell
-------------
"Prof Brian Ripley" <ripley at stats.ox.ac.uk> wrote in message 
news:alpine.LFD.1.10.0808070651030.14363 at gannet.stats.ox.ac.uk...
> 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 at 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,                  ripley at stats.ox.ac.uk
> 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 at 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.
>



More information about the R-help mailing list