[R] Automatic differentiation in R

Ben Bolker bolker at ufl.edu
Thu Jul 23 17:07:02 CEST 2009




nashjc wrote:
> 
>  >> Gabor G. wrote
>  >>  "R does not currently have AD (except for the Ryacas package
>  >>  which can do true AD for certain simple one line functions, i..e.
>  >>  input the function and output a function representing its
>  >>  derivative); however, for specific problems one can get close
>  >>  using deriv and associated functions or the approach explained
>  >>  below using rSymPy:
>  >> ...
> 
> As the instigator of Finlay's participation in this work, I probably 
> didn't express clearly enough the contribution Gabor has made to get as 
> far as he has with Ryacas and rSympy, which may show another pathway for 
> AD/Symbolic diff. development. At UseR all conversations seemed more 
> rushed than I'd like.
> 
> Gabor showed Ravi Varadhan and I a way to get some derivatives via his 
> tools that "worked". We need to play with this a bit more to see how 
> general it could be -- Gabor is very fair in his post that some work is 
> needed for each instance. On the other hand, if analytic gradients were 
> straightforward, we wouldn't be exchanging posts about them.
> 
> The clear issue in my mind is that users who need gradients/Jacobians 
> for R want to be able to send a function X to some process that will 
> return another function gradX or JacX that computes analytic 
> derivatives. This has to be "easy", which implies a very simple command 
> or GUI interface. I am pretty certain the users have almost no interest 
> in the mechanism, as long as it works. Currently, most use numerical 
> derivatives, not realizing the very large time penalty and quite large 
> loss in accuracy that can compromise some optimization and differential 
> equation codes. I'll try to prepare a few examples to illustrate this 
> and post them somewhere in the next few weeks. Time, as always, ...
> 
> However, the topic does appear to be on the table.
> 
> JN
> 
> 

On my wish list for the bbmle package (providing "mle2", which extends
stats:::mle
in various ways) is symbolic (not automatic) differentiation in the subset
of cases
where users specify the model as a formula (and the guts of the formula are
susceptible to simple differentiation by deriv()).  For example, if someone
specifies

  mle2(cover~dbeta(shape1=exp(a*rain),shape2=exp(b*rain)),
start=list(a=1,b=1))

(I'm not sure this actually makes much sense as a statistical model,
but whatever) and I have provided information to R about the formula
for the Beta distribution in terms of shape1 and shape2, then it is
"straightforward"
(i.e. it would take me a while to write some non-horrible code, but I'm sure
it's
doable) to use the chain rule to generate a function that computes the
derivatives
symbolically (still not as efficient as auto-differentiation, but a lot
better than
finite differences ...)

 Ben Bolker

-- 
View this message in context: http://www.nabble.com/Automatic-differentiation-in-R-tp24602805p24627910.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list