The main purpose of minimum or maximum variance analysis (MVA) is to find an estimator for the direction normal
using Pkg; Pkg.add("MinimumVarianceAnalysis")
using MinimumVarianceAnalysis
using MinimumVarianceAnalysis: normal, normal_component_error
Bl = cosd.(0:30:180)
Bm = sind.(0:30:180)
Bn = 0.1 .* ones(7)
B = hcat(Bl, Bm, Bn) # rows are samples
F = mva_eigen(B; dim = 1) # MVAResult: values (λ₁ ≥ λ₂ ≥ λ₃), eigenvector columns `vectors`, mean, n, field
normal(F) # minimum-variance direction for magnetic-field MVA
issuccess(F) # normal well determined if |λ₂/λ₃| > r0 (default 5)
normal_component_error(F) # statistical error of ⟨B⟩·normal
mva(B; dim = 1) # rotate samples into variance frame
mva(B, F; dim = 1) # rotate any data (e.g. velocity) into F's frameFor electric-field maximum variance analysis, pass field = :E:
E = hcat(0.1 .* ones(7), 0.05 .* ones(7), cosd.(0:30:180))
F = mva_eigen(E; dim = 1, field = :E)
normal(F) # maximum-variance direction; issuccess uses |λ₁/λ₂|Containers that carry their times (DimArray, SpaceDataModel's DataVariable) default to their time dimension.
Unitful, DynamicQuantities and FlexUnits inputs are supported:
using Unitful
F = mva_eigen(B .* u"nT"; dim = 1)
F.values # eigenvalues carry squared field units
F.vectors # eigenvectors are dimensionless directions- Maximum Variance Analysis on Magnetic Field (MVAB)
- Constraint
$〈B₃〉 = 0$
- Constraint
- Maximum Variance Analysis on Electric Field (MVAE)
- Transformation to/from moving frame of reference
- Minimum Variance Analysis on Mass Flux (MVAρv)
- Application to 2-D Structures
- Anisotropic fluctuations have been shown to lead to larger errors in normal determinations.