Learn R Programming

scorematchingad (version 0.1.1)

FB: Estimate the Fisher-Bingham Distribution

Description

Estimates parameters for the Fisher-Bingham distribution using score-matching.

Usage

FB(Y, km = NULL, A = NULL)

Arguments

Y

A matrix of multivariate observations in Cartesian coordinates. Each row is a multivariate measurement (i.e. each row corresponds to an individual).

km

Optional. A vector of the same length as the dimension, representing the parameter vector for the von Mises-Fisher component (i.e. the \(\kappa \mu\) see vMF()). If supplied, the non-NA elements are fixed.

A

Optional. The Bingham matrix. If supplied the non-NA elements of the Bingham matrix are fixed. The final element of the diagonal of A must be NA as the software calculates this value to ensure the trace of the Bingham matrix is zero.

Warning: Slow Convergence with Sample Size

Score matching estimates of all elements of \(A\) and \(\kappa\mu\) converge slowly with sample size. Even with a million simulated measurements, the gradient of the score matching discrepancy at the true parameters can have size (L2 Euclidean norm) more than 0.001, which is substantially non-zero.

Details

The density of the Fisher-Bingham distribution is proportional to $$\exp(z^TAz + \kappa\mu^Tz),$$ where \(A\) is a matrix as in the Bingham distribution, and \(\kappa\) and \(\mu\) are the concentration and mean direction, respectively, as in the von Mises-Fisher distribution.

See Also

Other directional model estimators: Bingham(), vMF(), vMF_robust()

Examples

Run this code
p <- 3
A <- rsymmetricmatrix(p, -10, 10)
A[p,p] <- -sum(diag(A)[1:(p-1)]) #to satisfy the trace = 0 constraint
m <- runif(p, -10, 10)
m <- m / sqrt(sum(m^2))
if (requireNamespace("simdd")){
  Y <- simdd::rFisherBingham(1000, 2 * m, A)
  FB(Y)
}

Run the code above in your browser using DataLab