From Troy.Robertson at aad.gov.au  Thu Oct 14 03:08:33 2010
From: Troy.Robertson at aad.gov.au (Troy Robertson)
Date: Thu, 14 Oct 2010 12:08:33 +1100
Subject: [Rd] Wierd nlm behaviour in 2.10.1 and 2.12.0 [Sec=Unclassified]
In-Reply-To: <003601cb6aeb$56e66670$04b33350$@edu>
Message-ID: <42C7503E0B99F248B06BC65E7D2B4E020187DD725C72@EX2K7-CCR.AAD.GOV.AU>

Thanks heaps Ravi,

I will have to take the modified function to my modeller/statistician and get him to check it out as I am only a general programmer and do not understand the significance of your suggested changes.  Your changes do look to produce consistent results though and as John Nash pointed out in an email, the returned 'code' value was originally 5, indicating a failure.  So it looks like the code I have been using has always been producing erroneous output data :-(

Still not sure why there is a difference between:
nlm(...)$estimate
AND
a<-nlm(...)
a$estimate
in R2.10.1 and R2.12.0beta though but not R2.11.1?
Even if nlm() is failing it should show consistent output I would have thought?

Thanks again for your suggestions Ravi.

Troy



> -----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
> ______________________________________________________________
> _____________
>
>     Australian Antarctic Division - Commonwealth of Australia
> IMPORTANT: This transmission is intended for the addressee
> only. If you are not the intended recipient, you are notified
> that use or dissemination of this communication is strictly
> prohibited by Commonwealth law. If you have received this
> transmission in error, please notify the sender immediately
> by e-mail or by telephoning +61 3 6232 3209 and DELETE the message.
>         Visit our web site at http://www.antarctica.gov.au/
> ______________________________________________________________
> _____________
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
___________________________________________________________________________

    Australian Antarctic Division - Commonwealth of Australia
IMPORTANT: This transmission is intended for the addressee only. If you are not the
intended recipient, you are notified that use or dissemination of this communication is
strictly prohibited by Commonwealth law. If you have received this transmission in error,
please notify the sender immediately by e-mail or by telephoning +61 3 6232 3209 and
DELETE the message.
        Visit our web site at http://www.antarctica.gov.au/
___________________________________________________________________________



[Rd] Wierd nlm behaviour in 2.10.1 and 2.12.0 [Sec=Unclassified]
Troy Robertson