calculating the Gradient and the Hessian in R

A S picture A S · Jan 28, 2015 · Viewed 15.5k times · Source

As you know, the Gradient of a function is the following vector:

the Gradient

and the Hessian is the following matrix:

the Hessian

Now, I wonder, is there any way to calculate these in R for a user defined function at a given point?

First, I've found a package named numDeriv, which seems to have the necessary functions grad and hessian but now I can't get the correct results... Thus, here's my workflow:

Let's say that we are given the function f(x,y) = x^2 * x^3, and we need to calculate the Gradient and the Hessian at the point (x=1, y=2).

That's been said, I define this function within R:

dummy <- function(x,y) {
  rez <- (z^2)*(y^3)
  rez
}

and then use grad the following way:

grad(func=dummy, x=1, y=2)

which gives me result 16 -- and the problem is that this only the first value from a gradient vector, the correct version of which is

[16, 12]

Same goes with the hessian:

hessian(func=dummy, x=1, y=2)

which gives my 1x1 matrix with the value 16 instead of the 2x2 matrix

     [,1] [,2]
[1,]   16   24
[2,]   24   12

So, the question is what am I doing wrong?

Thank you.

Answer

user3710546 picture user3710546 · Jan 28, 2015

You can use the pracma library, such as:

library(pracma)

dummy <- function(x) {
  z <- x[1]; y <- x[2]
  rez <- (z^2)*(y^3)
  rez
}

grad(dummy, c(1,2))
[1] 16 12

hessian(dummy, c(1,2))
     [,1] [,2]
[1,]   16   24
[2,]   24   12