Statistics
Manifolds.AbstractEstimationMethod — TypeAbstractEstimationMethodAbstract type for defining statistical estimation methods.
Manifolds.CyclicProximalPointEstimation — TypeCyclicProximalPointEstimation <: AbstractEstimationMethodMethod for estimation using the cyclic proximal point technique.
Manifolds.GeodesicInterpolation — TypeGeodesicInterpolation <: AbstractEstimationMethodRepeated weighted geodesic interpolation method for estimating the Riemannian center of mass.
The algorithm proceeds with the following simple online update:
where $x_k$ are points, $w_k$ are weights, $μ_k$ is the $k$th estimate of the mean, and $γ_x(y; t)$ is the point at time $t$ along the shortest_geodesic between points $x,y ∈ \mathcal M$. The algorithm terminates when all $x_k$ have been considered. In the Euclidean case, this exactly computes the weighted mean.
The algorithm has been shown to converge asymptotically with the sample size for the following manifolds equipped with their default metrics when all sampled points are in an open geodesic ball about the mean with corresponding radius (see GeodesicInterpolationWithinRadius):
- All simply connected complete Riemannian manifolds with non-positive sectional curvature at radius $∞$ [Cheng2016], in particular:
- Other manifolds:
Sphere: $\frac{π}{2}$ [Salehian2015]Grassmann: $\frac{π}{4}$ [Chakraborty2015]Stiefel/Rotations: $\frac{π}{2 \sqrt 2}$ [Chakraborty2019]
For online variance computation, the algorithm additionally uses an analogous recursion to the weighted Welford algorithm [West1979].
Manifolds.GeodesicInterpolationWithinRadius — TypeGeodesicInterpolationWithinRadius{T} <: AbstractEstimationMethodEstimation of Riemannian center of mass using GeodesicInterpolation with fallback to GradientDescentEstimation if any points are outside of a geodesic ball of specified radius around the mean.
Constructor
GeodesicInterpolationWithinRadius(radius)Manifolds.GradientDescentEstimation — TypeGradientDescentEstimation <: AbstractEstimationMethodMethod for estimation using gradient descent.
Statistics.mean! — Methodmean!(M::Manifold, y, x::AbstractVector[, w::AbstractWeights]; kwargs...)
mean!(
M::Manifold,
y,
x::AbstractVector,
[w::AbstractWeights,]
method::AbstractEstimationMethod;
kwargs...,
)Compute the mean in-place in y.
Statistics.mean — Methodmean(
M::Manifold,
x::AbstractVector,
[w::AbstractWeights,]
method::GeodesicInterpolationWithinRadius;
kwargs...,
)Estimate the Riemannian center of mass of x using GeodesicInterpolationWithinRadius.
See mean for a description of kwargs.
Statistics.mean — Methodmean(
M::Manifold,
x::AbstractVector,
[w::AbstractWeights,]
method::GeodesicInterpolation;
shuffle_rng=nothing,
retraction::AbstractRetractionMethod = ExponentialRetraction(),
inverse_retraction::AbstractInverseRetractionMethod = LogarithmicInverseRetraction(),
kwargs...,
)Estimate the Riemannian center of mass of x in an online fashion using repeated weighted geodesic interpolation. See GeodesicInterpolation for details.
If shuffle_rng is provided, it is used to shuffle the order in which the points are considered for computing the mean.
Optionally, pass retraction and inverse_retraction method types to specify the (inverse) retraction.
Statistics.mean — Methodmean(M::Manifold, x::AbstractVector[, w::AbstractWeights]; kwargs...)Compute the (optionally weighted) Riemannian center of mass also known as Karcher mean of the vector x of points on the Manifold M, defined as the point that satisfies the minimizer
where $\mathrm{d}_{\mathcal M}$ denotes the Riemannian distance.
In the general case, the GradientDescentEstimation is used to compute the mean. However, this default may be overloaded for specific manifolds.
mean(
M::Manifold,
x::AbstractVector,
[w::AbstractWeights,]
method::AbstractEstimationMethod;
kwargs...,
)Compute the mean using the specified method.
mean(
M::Manifold,
x::AbstractVector,
[w::AbstractWeights,]
method::GradientDescentEstimation;
p0=x[1],
stop_iter=100,
retraction::AbstractRetractionMethod = ExponentialRetraction(),
inverse_retraction::AbstractInverseRetractionMethod = LogarithmicInverseRetraction(),
kwargs...,
)Compute the mean using the gradient descent scheme GradientDescentEstimation.
Optionally, provide p0, the starting point (by default set to the first data point). stop_iter denotes the maximal number of iterations to perform and the kwargs... are passed to isapprox to stop, when the minimal change between two iterates is small. For more stopping criteria check the Manopt.jl package and use a solver therefrom.
Optionally, pass retraction and inverse_retraction method types to specify the (inverse) retraction.
The algorithm is further described in [Afsari2013].
Statistics.median! — Methodmedian!(M::Manifold, y, x::AbstractVector[, w::AbstractWeights]; kwargs...)
median!(
M::Manifold,
y,
x::AbstractVector,
[w::AbstractWeights,]
method::AbstractEstimationMethod;
kwargs...,
)computes the median in-place in y.
Statistics.median — Methodmedian(M::Manifold, x::AbstractVector[, w::AbstractWeights]; kwargs...)Compute the (optionally weighted) Riemannian median of the vector x of points on the Manifold M, defined as the point that satisfies the minimizer
where $\mathrm{d}_{\mathcal M}$ denotes the Riemannian distance. This function is nonsmooth (i.e nondifferentiable).
In the general case, the CyclicProximalPointEstimation is used to compute the median. However, this default may be overloaded for specific manifolds.
median(
M::Manifold,
x::AbstractVector,
[w::AbstractWeights,]
method::AbstractEstimationMethod;
kwargs...,
)Compute the median using the specified method.
median(
M::Manifold,
x::AbstractVector,
[w::AbstractWeights,]
method::CyclicProximalPointEstimation;
p0=x[1],
stop_iter=1000000,
retraction::AbstractRetractionMethod = ExponentialRetraction(),
inverse_retraction::AbstractInverseRetractionMethod = LogarithmicInverseRetraction(),
kwargs...,
)Compute the median using CyclicProximalPointEstimation.
Optionally, provide p0, the starting point (by default set to the first data point). stop_iter denotes the maximal number of iterations to perform and the kwargs... are passed to isapprox to stop, when the minimal change between two iterates is small. For more stopping criteria check the Manopt.jl package and use a solver therefrom.
Optionally, pass retraction and inverse_retraction method types to specify the (inverse) retraction.
The algorithm is further described in [Bačák2014].
Statistics.std — Methodstd(M, x, m=mean(M, x); corrected=true, kwargs...)
std(M, x, w::AbstractWeights, m=mean(M, x, w); corrected=false, kwargs...)compute the optionally weighted standard deviation of a Vector x of n data points on the Manifold M, i.e.
where c is a correction term, see Statistics.std. The mean of x can be specified as m, and the corrected variance can be activated by setting corrected=true.
Statistics.var — Methodvar(M, x, m=mean(M, x); corrected=true, kwargs...)
var(M, x, w::AbstractWeights, m=mean(M, x, w); corrected=false, kwargs...)compute the (optionally weighted) variance of a Vector x of n data points on the Manifold M, i.e.
where c is a correction term, see Statistics.var. The mean of x can be specified as m, and the corrected variance can be activated by setting corrected=true. All further kwargs... are passed to the computation of the mean (if that is not provided).
StatsBase.kurtosis — Methodkurtosis(M::Manifold, x::AbstractVector, k::Int[, w::AbstractWeights], m=mean(M, x[, w]))Compute the excess kurtosis of points in x on manifold M. Optionally provide weights w and/or a precomputed mean m.
StatsBase.mean_and_std — Methodmean_and_std(M::Manifold, x::AbstractVector[, w::AbstractWeights]; kwargs...) -> (mean, std)Compute the mean and the standard deviation std simultaneously.
mean_and_std(
M::Manifold,
x::AbstractVector
[w::AbstractWeights,]
method::AbstractEstimationMethod;
kwargs...,
) -> (mean, var)Use the method for simultaneously computing the mean and standard deviation. To use a mean-specific method, call mean and then std.
StatsBase.mean_and_var — Methodmean_and_var(
M::Manifold,
x::AbstractVector
[w::AbstractWeights,]
method::GeodesicInterpolationWithinRadius;
kwargs...,
) -> (mean, var)Use repeated weighted geodesic interpolation to estimate the mean. Simultaneously, use a Welford-like recursion to estimate the variance.
See GeodesicInterpolationWithinRadius and mean_and_var for more information.
StatsBase.mean_and_var — Methodmean_and_var(
M::Manifold,
x::AbstractVector
[w::AbstractWeights,]
method::GeodesicInterpolation;
shuffle_rng::Union{AbstractRNG,Nothing} = nothing,
retraction::AbstractRetractionMethod = ExponentialRetraction(),
inverse_retraction::AbstractInverseRetractionMethod = LogarithmicInverseRetraction(),
kwargs...,
) -> (mean, var)Use the repeated weighted geodesic interpolation to estimate the mean. Simultaneously, use a Welford-like recursion to estimate the variance.
If shuffle_rng is provided, it is used to shuffle the order in which the points are considered. Optionally, pass retraction and inverse_retraction method types to specify the (inverse) retraction.
See GeodesicInterpolation for details on the geodesic interpolation method.
The Welford algorithm for the variance is experimental and is not guaranteed to give accurate results except on Euclidean.
StatsBase.mean_and_var — Methodmean_and_var(M::Manifold, x::AbstractVector[, w::AbstractWeights]; kwargs...) -> (mean, var)Compute the mean and the variance simultaneously. See those functions for a description of the arguments.
mean_and_var(
M::Manifold,
x::AbstractVector
[w::AbstractWeights,]
method::AbstractEstimationMethod;
kwargs...,
) -> (mean, var)Use the method for simultaneously computing the mean and variance. To use a mean-specific method, call mean and then var.
StatsBase.moment — Functionmoment(M::Manifold, x::AbstractVector, k::Int[, w::AbstractWeights], m=mean(M, x[, w]))Compute the kth central moment of points in x on manifold M. Optionally provide weights w and/or a precomputed mean.
StatsBase.skewness — Methodskewness(M::Manifold, x::AbstractVector, k::Int[, w::AbstractWeights], m=mean(M, x[, w]))Compute the standardized skewness of points in x on manifold M. Optionally provide weights w and/or a precomputed mean m.
Literature
- Ho2013
Ho J.; Cheng G.; Salehian H.; Vemuri B. C.; Recursive Karcher expectation estimators and geometric law of large numbers. Proceedings of the 16th International Conference on Artificial Intelligence and Statistics (2013), pp. 325–332. pdf.
- Salehian2015
Salehian H.; Chakraborty R.; Ofori E.; Vaillancourt D.; An efficient recursive estimator of the Fréchet mean on a hypersphere with applications to Medical Image Analysis. Mathematical Foundations of Computational Anatomy (2015). pdf.
- Chakraborty2015
Chakraborty R.; Vemuri B. C.; Recursive Fréchet Mean Computation on the Grassmannian and Its Applications to Computer Vision. Proceedings of the IEEE International Conference on Computer Vision (ICCV) (2015), pp. 4229-4237. doi: 10.1109/ICCV.2015.481, link.
- Cheng2016
Cheng G.; Ho J.; Salehian H.; Vemuri B. C.; Recursive Computation of the Fréchet Mean on Non-positively Curved Riemannian Manifolds with Applications. Riemannian Computing in Computer Vision. Springer, Cham (2016), pp. 21-43. doi: 10.1007/978-3-319-22957-7_2, pdf.
- Chakraborty2019
Chakraborty R.; Vemuri B. C.; Statistics on the (compact) Stiefel manifold: Theory and Applications. The Annals of Statistics (2019), 47(1), pp. 415-438. doi: 10.1214/18-AOS1692, arxiv: 1708.00045.
- West1979
West D. H. D.; Updating Mean and Variance Estimates: An Improved Method. Communications of the ACM (1979), 22(9), pp. 532–535. doi: 10.1145/359146.359153.
- Afsari2013
Afsari, B; Tron, R.; Vidal, R.: On the Convergence of Gradient Descent for Finding the Riemannian Center of Mass, SIAM Journal on Control and Optimization (2013), 51(3), pp. 2230–2260, doi: 10.1137/12086282X, arxiv: 1201.0925
- Bačák2014
Bačák, M: Computing Medians and Means in Hadamard Spaces. SIAM Journal on Optimization (2014), 24(3), pp. 1542–1566, doi: 10.1137/140953393, arxiv: 1210.2145