numerical_Hessian.Rd
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
).
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, ...)
Parameter vector
Specified function with argument vector x
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.
Logical indicating whether the gradient should be calculated.
Logical indicating whether the Hessian matrix should be calculated.
Logical indicating whether only the diagonal of the hessian should be computed.
Further arguments to be passed to FUN
.
Coordinate index for partial derivative
Gradient vector or Hessian matrix or a list of both elements
See the numDeriv package and the
mirt::numerical_deriv
function from the mirt package.
#############################################################################
# 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)
}