pdMean: Weighted Karcher mean of HPD matrices

Description Usage Arguments Note References See Also Examples

View source: R/meandist.R

Description

pdMean calculates an (approximate) weighted Karcher or Frechet mean of a sample of (d,d)-dimensional HPD matrices intrinsic to a user-specified metric. In the case of the affine-invariant Riemannian metric as detailed in e.g., \insertCiteB09pdSpecEst[Chapter 6] or \insertCitePFA05pdSpecEst, the weighted Karcher mean is either approximated via the fast recursive algorithm in \insertCiteH13pdSpecEst or computed via the slower, but more accurate, gradient descent algorithm in \insertCiteP06pdSpecEst. By default, the unweighted Karcher mean is computed.

Usage

1
2
pdMean(M, w, metric = "Riemannian", grad_desc = FALSE, maxit = 1000,
  reltol)

Arguments

M

a (d,d,S)-dimensional array corresponding to a sample of (d,d)-dimensional HPD matrices of size S.

w

an S-dimensional nonnegative weight vector, such that sum(w) = 1.

metric

the distance measure, one of 'Riemannian', 'logEuclidean', 'Cholesky', 'Euclidean' or 'rootEuclidean'. Defaults to 'Riemannian'.

grad_desc

if metric = "Riemannian", a logical value indicating if the gradient descent algorithm in \insertCiteP06pdSpecEst should be used, defaults to FALSE.

maxit

maximum number of iterations in gradient descent algorithm, only used if grad_desc = TRUE and metric = "Riemannian". Defaults to 1000

reltol

optional tolerance parameter in gradient descent algorithm, only used if grad_desc = TRUE and metric = "Riemannian". Defaults to 1E-10.

Note

The function does not check for positive definiteness of the input matrices, and (depending on the specified metric) may fail if matrices are close to being singular.

References

\insertAllCited

See Also

Mid, pdMedian

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
## Generate random sample of HPD matrices
m <- function(){
 X <- matrix(complex(real=rnorm(9), imaginary=rnorm(9)), nrow=3)
 t(Conj(X)) %*% X
}
M <- replicate(100, m())
z <- rnorm(100)
## Generate random weight vector
w <- abs(z)/sum(abs(z))
## Compute weighted (Riemannian) Karcher mean
pdMean(M, w)

pdSpecEst documentation built on Jan. 8, 2020, 5:08 p.m.