Skip to content

JuliaSpacePhysics/MinimumVarianceAnalysis.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MinimumVarianceAnalysis

The main purpose of minimum or maximum variance analysis (MVA) is to find an estimator for the direction normal $\hat{𝐧}$ to one-dimensional structure, by minimisation of

$$ σ^2=\frac{1}{M} ∑_{m=1}^M | (𝐁^{(m)}-⟨𝐁⟩) · \hat{𝐧}|^2. $$

Quickstart

using Pkg; Pkg.add("MinimumVarianceAnalysis")
using MinimumVarianceAnalysis
using MinimumVarianceAnalysis: normal

Bl = cosd.(0:30:180)
Bm = sind.(0:30:180)
Bn = 0.1 .* ones(7)
B = hcat(Bl, Bm, Bn)

F = mva_eigen(B)
normal(F)          # minimum-variance direction for magnetic-field MVA
mva(B)             # rotate samples into variance frame

For 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; field = :E)
normal(F; field = :E)

Unitful, DynamicQuantities, FlexUnits, and DimensionalData inputs are supported:

using Unitful

F = mva_eigen(B .* u"nT")
F.values    # eigenvalues carry squared field units
F.vectors   # eigenvectors are dimensionless directions

See SPEDAS for more details. See SPEDAS validation for comparison with a Python implementation (pyspedas).

Documentation: Dev

Reference

Features and Roadmap

  • Maximum Variance Analysis on Magnetic Field (MVAB)
    • Constraint $〈B₃〉 = 0$
  • 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

Notes

  • Anisotropic fluctuations have been shown to lead to larger errors in normal determinations.

Status

DOI version

Build Status Coverage Aqua