Learn R Programming

OpenMx (version 2.21.13)

mxComputeNumericDeriv: Numerically estimate Hessian using Richardson extrapolation

Description

For N free parameters, Richardson extrapolation requires (iterations * (N^2 + N)) function evaluations. The implementation is closely based on the numDeriv R package.

Usage

mxComputeNumericDeriv(
  freeSet = NA_character_,
  ...,
  fitfunction = "fitfunction",
  parallel = TRUE,
  stepSize = imxAutoOptionValue("Gradient step size"),
  iterations = 4L,
  verbose = 0L,
  knownHessian = NULL,
  checkGradient = TRUE,
  hessian = TRUE,
  analytic = TRUE
)

Arguments

freeSet

names of matrices containing free variables

...

Not used. Forces remaining arguments to be specified by name.

fitfunction

name of the fitfunction (defaults to 'fitfunction')

parallel

whether to evaluate the fitfunction in parallel (defaults to TRUE)

stepSize

starting set size (defaults to 0.0001)

iterations

number of Richardson extrapolation iterations (defaults to 4L)

verbose

integer. Level of run-time diagnostic output. Set to zero to disable

knownHessian

an optional matrix of known Hessian entries

checkGradient

whether to check the first order convergence criterion (gradient is near zero)

hessian

whether to estimate the Hessian. If FALSE then only the gradient is estimated.

analytic

Use the analytic Hessian, if available.

Details

In addition to an estimate of the Hessian, forward, central, and backward estimates of the gradient are made available in this compute plan's output slot.

When checkGradient=TRUE, the central difference estimate of the gradient is used to determine whether the first order convergence criterion is met. In addition, the forward and backward difference estimates of the gradient are compared for symmetry. When sufficient asymmetry is detected, the standard error is flagged. In the case, profile likelihood confidence intervals should be used for inference instead of standard errors (see mxComputeConfidenceInterval).

If provided, the square matrix knownHessian should have dimnames set to the names of some subset of the free parameters. Entries of the matrix set to NA will be estimated numerically while entries containing finite values will be copied to the Hessian result.

Examples

Run this code
library(OpenMx)
data(demoOneFactor)
factorModel <- mxModel(name ="One Factor",
	mxMatrix(type = "Full", nrow = 5, ncol = 1, free = FALSE, values = .2, name = "A"),
	mxMatrix(type = "Symm", nrow = 1, ncol = 1, free = FALSE, values = 1 , name = "L"),
	mxMatrix(type = "Diag", nrow = 5, ncol = 5, free = TRUE , values = 1 , name = "U"),
	mxAlgebra(A %*% L %*% t(A) + U, name = "R"),
	mxExpectationNormal(covariance = "R", dimnames = names(demoOneFactor)),
	mxFitFunctionML(),
	mxData(cov(demoOneFactor), type = "cov", numObs = 500),
	mxComputeSequence(
		list(mxComputeNumericDeriv(), mxComputeReportDeriv())
	)
)
factorModelFit <- mxRun(factorModel)
factorModelFit$output$hessian

Run the code above in your browser using DataLab