Diagonalizations.jl: a package for multivariate linear filtering

I would like to announce Diagonalizations.jl, a new package for multivariate statistics/signal processing. Currently it implements the following linear filters:

Acronym Full Name Datasets ( m ) Observations ( k )
PCA Principal Component Analysis 1 1
Whitening Whitening (Sphering) 1 1
MCA Maximum Covariance Analysis 2 1
CCA Canonical Correlation Analysis 2 1
gMCA generalized MCA >1 1
gCCA generalized CCA >1 1
CSP Common Spatial Pattern 1 2
CSTP Common Spatio-Temporal Pattern 1 >1
AJD Approximate Joint Diagonalization 1 >1
mAJD multiple AJD >1 >1

It is thoroughly tested (for real data input for the moment being) and documented.

As compared to MultivariateStats.jl this package supports :

  • the dims keyword,
  • built-in shrinkage covariance matrix estimations throught the CovarianceEstimation package,
  • built-in average covariance estimations with metrics for the manifold of positive definite matrices throught the PosDefManifold package,
  • automatic procedures to set the subspace dimension upon construction,
  • approximate diagonalization procedures for the case m≥2 and k≥2 (see table above).

Also worth mentioning other existing efforts in the ecosystem like LowRankModels.jl, which generalizes some of these methods to work with other types of data like categorical data.

Quick question: did you contact the people in MultivariateStats.jl to discuss the possibility of adding the features you described above?

1 Like

I absolutely love what I’m seeing here and second @juliohm. Last I checked MultivariateStats.jl was working towards restructuring its type system and it would probably be beneficial for everyone if they (we) got perspectives from people with multiple use cases.


Hello @juliohm,

no, I didn’t. I arrived to Julia less then one year ago and i learnt about MultivariateStats.jl pretty late. In any case, the scope of Diagonalizations.jl is much more restricted as compared to the scope of MultivariateStats.jl. As per the overlapping with MultivariateStats.jl, it is limited to the PCA, Whitening and CCA, which are basic procedures. From there, the path of the two packages diverges. For the future, I guess the iterative solvers implemented in Diagonalizations.jl (more of them could be added later on) may be useful in MultivariateStats.jl, for example, to add more independent component analysis and blind source separation methods. I am actually interested in this if there is any plan.


just a note to correct what i said here above, since i added support for complex data input.

1 Like