[R] Tracing gradient during optimization
Ravi Varadhan
RVaradhan at jhmi.edu
Tue Feb 24 16:25:58 CET 2009
Hi Shimrit,
Make sure that you set maximize=TRUE in the control settings (since you have
fnscale = -1 in your optim() call).
A nice feature of spg() is that the entire code is in R, and can be readily
seen by just typing the function name at the R prompt. On smaller problems
(with only a few parameters), it is usually slower than optim() or nlminb(),
since much of the computing is performed in C and/or Fortran. But the
difference in speed is not that important in small problems, anyway.
However, it is faster on large-scale problems.
Best,
Ravi.
----------------------------------------------------------------------------
-------
Ravi Varadhan, Ph.D.
Assistant Professor, The Center on Aging and Health
Division of Geriatric Medicine and Gerontology
Johns Hopkins University
Ph: (410) 502-2619
Fax: (410) 614-9625
Email: rvaradhan at jhmi.edu
Webpage: http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html
----------------------------------------------------------------------------
--------
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Shimrit Abraham
Sent: Tuesday, February 24, 2009 10:15 AM
To: Ravi Varadhan
Cc: r-help at r-project.org
Subject: Re: [R] Tracing gradient during optimization
Hi Ravi,
Thanks for your great suggestion, it does exactly what I need as it provides
more insight into what is going on in the 'black box'. In addition, it's
much faster than optim(). I will use this function in the future.
Kind Regards,
Shimrit
On Tue, Feb 24, 2009 at 2:33 PM, Ravi Varadhan <RVaradhan at jhmi.edu> wrote:
> Hi,
>
> If you look at the source code for optim() in the optim.c file, you
> will see the following lines for "BFGS":
>
> if (trace && (iter % nREPORT == 0))
> Rprintf("iter%4d value %f\n", iter, f);
>
> This means that "BFGS" does not output gradient values when you
> "trace" the iterations. Let us look at the code for "L-BFGS-B":
>
> if(trace == 1 && (iter % nREPORT == 0)) {
> Rprintf("iter %4d value %f\n", iter, f);
>
> So, it seems like even "L-BFGS-B" algorithm is also not going to be
> useful to you.
>
>
> You can use the spg() function in the "BB" package. Its usage is very
> similar to that of optim(). When you specify trace=TRUE, it will give
> you both function and (projected) gradient information. You can use
> the "triter" parameter to control the frequency of output, i.e. settig
> triter=1, will give you the fn and gr values at each iteration.
>
> library(BB)
> ?spg
>
> Hope this helps,
> Ravi.
>
>
>
>
> ----------------------------------------------------------------------
> ------
> -------
>
> Ravi Varadhan, Ph.D.
>
> Assistant Professor, The Center on Aging and Health
>
> Division of Geriatric Medicine and Gerontology
>
> Johns Hopkins University
>
> Ph: (410) 502-2619
>
> Fax: (410) 614-9625
>
> Email: rvaradhan at jhmi.edu
>
> Webpage:
> http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html
>
>
>
>
> ----------------------------------------------------------------------
> ------
> --------
>
>
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org]
> On
> Behalf Of Shimrit Abraham
> Sent: Tuesday, February 24, 2009 9:00 AM
> To: r-help at r-project.org
> Subject: [R] Tracing gradient during optimization
>
> Hi everyone,
>
> I am currently using the function optim() to maximize/minimize
> functions and I would like to see more output of the optimization
> procedure, in particular the numerical gradient of the parameter
> vector during each iteration.
> The documentation of optim() describes that the trace parameter should
> allow one to trace the progress of the optimization.
> I use the following command:
>
> optim(par = vPar,
> fn = calcLogLik,
> method = "BFGS",
> control = list(trace = TRUE, fnscale = -1, maxit = 2000));
>
> which gives very little information:
>
> initial value 3.056998
> final value 2.978351
> converged
>
> Specifying trace >1, for instance trace = 20, does not result in more
> information. Is there a way to view more details of the progress
> perhaps by using another optimizer?
>
> Thanks,
>
> Shimrit Abraham
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>
>
[[alternative HTML version deleted]]
______________________________________________
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