-----Original Message-----
From: Ravi Varadhan [mailto:rvaradhan at jhmi.edu]
Sent: Thursday, 14 October 2010 2:29 AM
To: 'Ravi Varadhan'; Troy Robertson; 'r-devel at R-project.org'
Subject: RE: [Rd] Wierd nlm behaviour in 2.10.1 and 2.12.0
[Sec=Unclassified]
Try this:
Myfunc2 <- function(rootM,Abund,Loss,OtherM) {
# I have scaled the function
(Loss/Abund - (rootM/(rootM+OtherM)*
(1-exp(-(rootM+OtherM)))))^2
}
nlm(myfunc2
,0.001,print.level=0,fscale=0, gradtol=1E-10, stepmax = 100.0
,Loss=FixedRemovals
,Abund=AbStageInitial
,OtherM=Rates)$estimate
This should work quite robustly under various R versions on
different platforms.
Ravi.
-----Original Message-----
From: r-devel-bounces at r-project.org
[mailto:r-devel-bounces at r-project.org]
On Behalf Of Ravi Varadhan
Sent: Wednesday, October 13, 2010 9:27 AM
To: 'Troy Robertson'; 'r-devel at R-project.org'
Subject: Re: [Rd] Wierd nlm behaviour in 2.10.1 and 2.12.0
[Sec=Unclassified]
Hi Troy,
I think that your problem is poorly scaled. You have
variables that vary over several orders of magnitude. This
means that any small changes (due to subtle differences
between R versions) could cause a big difference in the
convergence behavior of the algorithms. So, you are asking
for trouble and you got it. I would scale the problem such
that the parameters, function and its gradient are
essentially of the same magnitude.
To paraphrase John Nash, who paraphrased Richard Varga, "It
is all about scaling".
Furthermore, I would specify the analytic gradient, which
should be very easy to derive.
Ravi.
-----Original Message-----
From: r-devel-bounces at r-project.org
[mailto:r-devel-bounces at r-project.org]
On Behalf Of Troy Robertson
Sent: Wednesday, October 13, 2010 1:51 AM
To: 'r-devel at R-project.org'
Subject: [Rd] Wierd nlm behaviour in 2.10.1 and 2.12.0
[Sec=Unclassified]
Hi all,
When upgrading to 2.11.1 recently I noticed different results
being produced by my code. After MUCH digging into my code I
have finally narrowed it to a call to nlm(). The problem
actually occurs in 2.10.1 and 2.12.0.
This can be replicated by trying the code below in some
different versions of R:
FixedRemovals<-1836180125888
AbStageInitial<-2223033830403
Rates<- 0.3102445
myfunc<-function(rootM,Abund,Loss,OtherM)
{(Loss-(rootM/(rootM+OtherM)*
(1-exp(-(rootM+OtherM)))*
Abund))^2}
nlm(myfunc
,0.001,print.level=0,fscale=0, gradtol=1E-10, stepmax = 100.0
,Loss=FixedRemovals
,Abund=AbStageInitial
,OtherM=Rates)
nlm(myfunc
,0.001,print.level=0,fscale=0, gradtol=1E-10, stepmax = 100.0
,Loss=FixedRemovals
,Abund=AbStageInitial
,OtherM=Rates)$estimate
Why would I be seeing a different value of 'estimate' (or any
of the other returned list items)? Originally I thought it
was 2.11.1 that was giving me the grief with different output
but now I see that in 2.11.1 I get the same value to each
returned list item both ways. Can anyone explain this?
Thanks
Troy