An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120920/bcaeb958/attachment.pl>
optim and "the function should not" advice
2 messages · Gildas Mazo, Brian Ripley
On 20/09/2012 09:24, Gildas Mazo wrote:
Dear R users,
I'm using optim to optimize a pretty complicated function. This function takes the parameter vector "theta" and within its body I use instructions like
sigma<-theta[a:b]; computations with sigma...
out<-c()
for (i in 1:d){
a<-theta[(3*d+i):c]
out[i]<-evaluation of an expression involving 'a' (I use symbolic differentiation)
}
Unfortunately for certain problems 'optim' returns a parameter vector which didn't move at all from the initial parameters, and the output says that although the function has been evaluated a high number of times, the gradient (which I fed the function with) has been evaluated only one time. I used the BFGS method.
On face value that means it is unable to find a small step that goes downhill consistent with the gradient, and usually indicates an error in the gradient function or using numerical derivatives on a non-differentiable function.
By chance I looked at the help and I read "The parameter vector passed to fn has special semantics and may be shared between calls: the function should not change or copy it" . Could the instructions above be the cause of the failure? If so, how to deal with symbolic differentation?
None of the code you show us changes 'theta'. It would be a very unusual thing to do, but has happened in error when people have used compiled code.
Thanks in advance, Gildas
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