Re: [R] Gradient problem in nlm

From: Spencer Graves <>
Date: Sat 14 Oct 2006 - 18:21:29 GMT

      Because of the lack of a self-contained, reproducible example, I can only guess. If it were my problem, I might try the following:

  1. Try 'nlm' with 'print.level=2'. This should provide more detail about the circumstances under which it failed. If that didn't provide adequate detail, I might modify my objective function to print more detailed trace information each time it's called.
  2. Compare the gradient with that computed numerically, e.g., using 'grad' in library(numDeriv), especially for combinations of values apparently tested by 'nlm'.
  3. Work through all the examples on the 'nlm' help page and demo(nlm), making sure I understood those in full detail. Doing so might identify something I was doing wrong, etc.
  4. If I can't solve the problem after all of the above, I might try to develop the simplest, self-contained example I can find that still exhibits the problem. This often leads me to the problem. If it doesn't, I then have a simple, self-contained example that I can then post to this list; including such an example on average tends to increase the speed and quality of responses (and sometimes even the quantity).
      Hope this helps. 
      Spencer Graves

singyee ling wrote:
> Hello everyone!
> I am having some trouble supplying the gradient function to nlm in R for
> windows version 2.2.1.
> What follows are the R-code I use:
> fredcs39<-function(a1,b1,b2,x){return(a1+exp(b1+b2*x))}
> loglikcs39<-function(theta,len){
> value<-sum(mcs39[1:len]*fredcs39(theta[1],theta[2],theta[3],c(8:(7+len))) -
> pcs39[1:len] * log(fredcs39(theta[1],theta[2],theta[3],c(8:(7+len)))))
> a1<-theta[1]; b1<-theta[2]; b2<-theta[3]
> df.a1<-sum(-mcs39[1:len] + pcs39[1:len]/(a1+exp(b1+b2*c(8:(7+len)))))
> df.b1<-sum( -mcs39[1:len] * exp(b1+b2*c(8:(7+len))) + (pcs39[1:len] *
> exp(b1+b2*c(8:(7+len))) ) /(a1+exp(b1+b2*c(8:(7+len)))))
> df.b2<- sum(-mcs39[1:len] * exp(b1+b2*c(8:(7+len))) * c(8:(7+len)) +
> (pcs39[1:len] * exp(b1+b2*c(8:(7+len))) * c(8:(7+len)) )
> /(a1+exp(b1+b2*c(8:(7+len)))) )
> attr(value,"gradient")<-c(df.a1,df.b1,df.b2)
> return(value)
> }
> theta.start<-c(0.01 ,-1.20, -0.0005)
> outcs39<-nlm(loglikcs39,theta.start,len=50)
> Error in nlm(loglikcs39, theta.start, len = 50) :
> probable coding error in analytic gradient
> Any light that can be shed on this would be highly appreciated.
> Many thanks
> Singyee Ling
> [[alternative HTML version deleted]]
> ______________________________________________
> mailing list
> PLEASE do read the posting guide
> and provide commented, minimal, self-contained, reproducible code.
> mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Sun Oct 15 04:26:15 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 14 Oct 2006 - 19:30:10 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.