Learn R Programming

CDM (version 8.2-6)

numerical_Hessian: Numerical Computation of the Hessian Matrix

Description

Computes numerically the Hessian matrix of a given function for all coordinates (numerical_Hessian), for a selected direction (numerical_Hessian_partial) or the gradient of a multivariate function (numerical_gradient).

Usage

numerical_Hessian(par, FUN, h=1e-05, gradient=FALSE,
       hessian=TRUE, diag_only=FALSE, ...)

numerical_Hessian_partial(par, FUN, h=1e-05, coordinate=1, ... )

numerical_gradient(par, FUN, h=1E-5, ...)

Value

Gradient vector or Hessian matrix or a list of both elements

Arguments

par

Parameter vector

FUN

Specified function with argument vector x

h

Numerical differentiation parameter. Can be also a vector. The increment in the numerical approximation of the derivative is defined as \(h_i \max ( 1, \theta_i)\) where \(\theta_i\) denotes the \(i\)th parameter.

gradient

Logical indicating whether the gradient should be calculated.

hessian

Logical indicating whether the Hessian matrix should be calculated.

diag_only

Logical indicating whether only the diagonal of the hessian should be computed.

...

Further arguments to be passed to FUN.

coordinate

Coordinate index for partial derivative

See Also

See the numDeriv package and the mirt::numerical_deriv function from the mirt package.

Examples

Run this code
#############################################################################
# EXAMPLE 1: Toy example for Hessian matrix
#############################################################################

# define function
f <- function(x){
     3*x[1]^3 - 4*x[2]^2 - 5*x[1]*x[2] + 10 * x[1] * x[3]^2 + 6*x[2]*sqrt(x[3])
}
# define point for evaluating partial derivatives
par <- c(3,8,4)

#--- compute gradient
CDM::numerical_Hessian( par=par, FUN=f, gradient=TRUE, hessian=FALSE)
if (FALSE) {
mirt::numerical_deriv(par=par, f=f, gradient=TRUE)

#--- compute Hessian matrix
CDM::numerical_Hessian( par=par, FUN=f )
mirt::numerical_deriv(par=par, f=f, gradient=FALSE)
numerical_Hessian( par=par, FUN=f, h=1E-4 )

#--- compute gradient and Hessian matrix
CDM::numerical_Hessian( par=par, FUN=f, gradient=TRUE, hessian=TRUE)
}

Run the code above in your browser using DataLab