## Diagonalizations.jl

Diagonalization procedures for Julia (PCA, Whitening, MCA, gMCA, CCA, gCCA, CSP, CSTP, AJD, mAJD)
Author Marco-Congedo
Popularity
30 Stars
Updated Last
1 Year Ago
Started In
January 2020

# Diagonalizations.jl

Documentation

Diagonalizations.jl is a Julia signal processing package implementing several closed form and iterative diagonalization procedures for both real and complex data input:

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

For example the MCA diagonalizes a cross-covariance matrix, like in this figure:

As compared to MultivariateStats.jl this package supports :

• the `dims` keyword like in the StatsBase.jl package
• shrinkage covariance matrix estimations throught package CovarianceEstimation
• average covariance estimations using metrics for the manifold of positive definite matrices using the PosDefManifold package
• facilities to set the subspace dimension upon construction
• diagonalization procedures for the case m≥2 and k≥2.

This package implements state-of-the-art approximate joint diagonalization algorithms. For some benchmarking see here.

## Installation

To install the package execute the following command in Julia's REPL:

``````]add CovarianceEstimation PosDefManifold Diagonalizations
``````

## Examples

``````
using Diagonalizations, PosDefManifold, Test

n, t=10, 100

# generate an nxt data matrix
X=genDataMatrix(n, t)

# principal component analysis
pX=pca(X)

# the following is an equivalent constructor taking the covariance matrix as input
pC=pca(Symmetric((X*X')/t))

@test pX==pC # the output of the two constructors above is equivalent

@test C≈pC.F*pC.D*pC.F'

# get only the first p eigenvectors, where p is the smallest integer
# explaining at least 75% of the variance
pX=pca(X; eVar=0.75)

Y=genDataMatrix(n, t)

# maximum covariance analysis
mXY=mca(X, Y)

# canonical correlation analysis
cXY=cca(X, Y)

# approximate joint diagonalization
Xset=randP(5, 20)
aXset=ajd(Xset; algorithm=:LogLike)

# etc., etc.

``````