[R] numericDeriv
(Ted Harding)
Ted.Harding at nessie.mcc.ac.uk
Wed Nov 16 14:11:51 CET 2005
On 16-Nov-05 Florent Bresson wrote:
> I have to compute some standard errors using the delta
> method and so have to use the command "numericDeriv"
> to get the desired gradient. Befor using it on my
> complicated function, I've done a try with a simple
> exemple :
>
> x <- 1:5
> numericDeriv(quote(x^2),"x")
>
> and i get :
>
> [1] 1 8 27 64 125 216
> attr(,"gradient")
> [,1] [,2] [,3] [,4] [,5] [,6]
> [1,] Inf 0 0 NaN 0 0
> [2,] 0 0 0 NaN 0 0
> [3,] 0 Inf 0 NaN 0 0
> [4,] 0 0 0 NaN 0 0
> [5,] 0 0 Inf NaN 0 0
> [6,] 0 0 0 NaN 0 0
>
> I don't understand the result. I thought I will get :
>
> [1] 1 8 27 64 125 216
> attr(,"gradient")
> [,1]
> [1,] 1
> [2,] 4
> [3,] 6
> [4,] 8
> [5,] 10
> [6,] 12
>
> The derivative of x^2 is still 2x, isn't it ?
The trap you've fallen into is that "x <- 1:5" makes x of
integer type, and (believe it or not) you cannot differentiate
when the support of a function is the integers. Wrong topology
(though I'm not sure that this is quite how R thinks about it).
So give x a bit of elbow-room ("numeric" type has "continous"
-- well, nearly -- topology):
> x <- as.numeric(1:5)
> numericDeriv(quote(x^2),"x")
[1] 1 4 9 16 25
attr(,"gradient")
[,1] [,2] [,3] [,4] [,5]
[1,] 2 0 0 0 0
[2,] 0 4 0 0 0
[3,] 0 0 6 0 0
[4,] 0 0 0 8 0
[5,] 0 0 0 0 10
Cheers,
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 16-Nov-05 Time: 13:11:49
------------------------------ XFMail ------------------------------
More information about the R-help
mailing list