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).

12 Likes

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.

2 Likes

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.

4 Likes

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

1 Like