# [R] deriv for psigamma

Martin Maechler maechler at stat.math.ethz.ch
Wed Aug 1 09:52:45 CEST 2007

```>>>>> "UweL" == Uwe Ligges <ligges at statistik.uni-dortmund.de>
>>>>>     on Tue, 31 Jul 2007 12:13:45 +0200 writes:

UweL> francogrex wrote:
>> Hi, 2 questions:

[....]

>> Question 2:
>>
>>> deriv(~gamma(x),"x")
>>
>> expression({
>> .expr1 <- gamma(x)
>> .value <- .expr1
>> .grad <- array(0, c(length(.value), 1), list(NULL, c("x")))
>> .grad[, "x"] <- .expr1 * psigamma(x)
>> attr(.value, "gradient") <- .grad
>> .value
>> })
>>
>> BUT
>>
>>> deriv3(~gamma(x),"x")
>> Error in deriv3.formula(~gamma(x), "x") : Function 'psigamma' is not in the
>> derivatives table
>>

>> What I want is the expression for the second derivative (which I believe is
>> trigamma(x), or psigamma(x,1)), how can I obtain that?

UweL> By using some algebraic software (rather than a numeric one) or
UweL> contributing complete derivatives tables for the next R release.

Yes, but for the present case, one could argue that
the R internal code which "knows"
d/dx lgamma(x) = psi(x) = digamma(x) = psigamma(x,0)
should easily be enhanced to also "know"

d/dx psigamma(x, n) = psigamma(x, n+1)

and consequently (but maybe with an extra clause)

d/dx psigamma(x) = psigamma(x, 1)

The code is in  R*/src/main/deriv.c
and patches which implement the above and (there are few more
'FIXME's there ... ;-) against
https://svn.r-project.org/R/trunk/src/main/deriv.c
are welcome - after useR!2007

Martin Maechler, ETH Zurich

```

More information about the R-help mailing list