[R] nls not accepting control parameter?
Peter Ehlers
ehlers at ucalgary.ca
Mon Oct 5 19:17:19 CEST 2009
Hi Rainer,
Sorry, I hadn't read your post quite carefully enough.
The problem appears to be with SSlogis. It seems that
control parameters are not being passed through SSlogis.
If you specify a start vector, minFactor can be set.
nls( y ~ Asym/(1+exp((xmid-x)/scal)), data = dat,
start=list(Asym=2e6, xmid=2005, scal=44),
control=list(minFactor=1e-12), trace=TRUE)
or even
nls( y ~ SSlogis(x, Asym, xmid, scal), data = dat,
start=list(Asym=2e6, xmid=2005, scal=44),
control=list(minFactor=1e-12), trace=TRUE)
or perhaps (but it still won't converge, of course)
nls( y ~ 1/(1+exp((xmid-x)/scal)), data = dat,
start=list(xmid=2005, scal=44), algorithm = "plinear",
control=list(minFactor=1e-12), trace=TRUE)
(I used start values obtained from a fit of dat[-c(1,2),].)
Try it with minFactor=1/4 and with 1/2^20.
-Peter Ehlers
Rainer M Krug wrote:
> On Fri, Oct 2, 2009 at 7:23 PM, Peter Ehlers <ehlers at ucalgary.ca> wrote:
>
>> Hello Rainer,
>>
>> I think that your problem is with trying to fit a logistic model to
>> data that don't support that model. Removing the first two points
>> from your data will work (but of course it may not represent reality).
>> The logistic function does not exhibit the kind of minimum that
>> your data suggest.
>>
>>
> Hi Peter
>
> partly - when I do as you suggest, it definitely works, but this does not
> change the behavioyur, that the error message always says:
>
> " step factor 0.000488281 reduced below 'minFactor' of 0.000976562"
>
> and it does not change to whichever value I try to set minFactor.
> So either I am misunderstanding what the control argument for nls is doing,
> or there is a bug in nls or in the error message.
>
> Rainer
>
>
>
>
>> -Peter Ehlers
>>
>>
>> Rainer M Krug wrote:
>>
>>> Hi
>>>
>>> I want to change a control parameter for an nls () as I am getting an
>>> error
>>> message "step factor 0.000488281 reduced below 'minFactor' of
>>> 0.000976562".
>>> Despite all tries, it seems that the control parameter of the nls, does
>>> not
>>> seem to get handed down to the function itself, or the error message is
>>> using a different one.
>>>
>>> Below system info and an example highlighting the problem.
>>>
>>> Thanks,
>>>
>>> Rainer
>>>
>>>
>>> version _
>>> platform i486-pc-linux-gnu
>>> arch i486
>>> os linux-gnu
>>> system i486, linux-gnu
>>> status
>>> major 2
>>> minor 9.2
>>> year 2009
>>> month 08
>>> day 24
>>> svn rev 49384
>>> language R
>>> version.string R version 2.9.2 (2009-08-24)
>>>
>>> sessionInfo()
>>> R version 2.9.2 (2009-08-24)
>>> i486-pc-linux-gnu
>>>
>>> locale:
>>>
>>> LC_CTYPE=en_ZA.UTF-8;LC_NUMERIC=C;LC_TIME=en_ZA.UTF-8;LC_COLLATE=en_ZA.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_ZA.UTF-8;LC_PAPER=en_ZA.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_ZA.UTF-8;LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats graphics grDevices utils datasets methods base
>>>
>>> other attached packages:
>>> [1] R.utils_1.2.0 R.oo_1.5.0 R.methodsS3_1.0.3 maptools_0.7-26
>>> [5] sp_0.9-44 foreign_0.8-37
>>>
>>> loaded via a namespace (and not attached):
>>> [1] grid_2.9.2 lattice_0.17-25
>>>
>>>
>>> #############################################
>>>
>>> EXAMPLE:
>>>
>>> dat <- data.frame(
>>> x = 2006:2037,
>>> y = c(143088, 140218, 137964,
>>> 138313, 140005, 141483, 142365,
>>> 144114, 145335, 146958, 148584,
>>> 149398, 151074, 152241, 153919,
>>> 155580, 157258, 158981, 160591,
>>> 162126, 163743, 165213, 166695,
>>> 168023, 169522, 170746, 172057,
>>> 173287, 173977, 175232, 176308,
>>> 177484)
>>> )
>>>
>>> nls( y ~ SSlogis(x, Asym, xmid, scal), data = dat, trace=TRUE)
>>>
>>> (newMinFactor <- 1/(4*1024))
>>> nls( y ~ SSlogis(x, Asym, xmid, scal), data = dat,
>>> control=nls.control(minFactor=newMinFactor), trace=TRUE)
>>> nls( y ~ SSlogis(x, Asym, xmid, scal), data = dat,
>>> control=c(minFactor=newMinFactor), trace=TRUE)
>>>
>>>
>>> (newMinFactor <- 4/1024)
>>> nls( y ~ SSlogis(x, Asym, xmid, scal), data = dat,
>>> control=nls.control(minFactor=newMinFactor), trace=TRUE)
>>> nls( y ~ SSlogis(x, Asym, xmid, scal), data = dat,
>>> control=c(minFactor=newMinFactor), trace=TRUE)
>>>
>>>
>>>
>>>
>
>
More information about the R-help
mailing list