djd {JADE} | R Documentation

## Function for Joint Diagonalization of k Square Matrices in a Deflation Based Manner

### Description

This function jointly diagonalizes k real-valued square matrices by searching an orthogonal matrix in a deflation based manner.

### Usage

    djd(X, G = "max", r = 2, eps = 1e-06, maxiter = 500)

### Arguments

`X` | an array containing the k p times p real valued matrices of dimension c(p, p, k).
`G` | criterion function used for the the algorithm. Options are `max`, `pow` and `log`. See details.
`r` | power value used if `G="pow"` or `G="max"`. 0 is not meaningful for this value. See details.
`eps` | convergence tolerance.
`maxiter` | maximum number of iterations.

### Details

Denote the square matrices as A_i, i=1,...,k. This algorithm searches then an orthogonal matrix W so that D_i=W'A_iW is diagonal for all i. If the A_i commute then there is an exact solution. If not, the function will perform an approximate joint diagonalization by maximizing sum G(w_j' A_i w_j) where w_j are the orthogonal vectors in W.

The function G can be choosen to be of the form G(x) = |x|^r or G(x) = log(x). If `G="max"` is chosen, the function G is of the form G(x) = |x|^r, and the diagonalization criterion will be maximized globally at each stage by choosing an appropriate initial value from a set of random vectors. If `G="pow"` or `G="log"` are chosen, the initial values are the eigenvectors of A_1 which plays hence a special role.

### Value

The matrix W

### Author(s)

Klaus Nordhausen, Jari Miettinen

### References

Nordhausen, K., Gutch, H. W., Oja, H. and Theis, F.J. (2012): Joint Diagonalization of Several Scatter Matrices for ICA, in LVA/ICA 2012, LNCS 7191, pp. 172–179.

Miettinen, J., Nordhausen, K., Oja, H. and Taskinen, S. (2014), Deflation-based Separation of Uncorrelated Stationary Time Series, Journal of Multivariate Analysis, 123, 214–227.

Miettinen, J., Nordhausen, K. and Taskinen, S. (2017), Blind Source Separation Based on Joint Diagonalization in R: The Packages JADE and BSSasymp, Journal of Statistical Software, 76, 1–31, <doi:10.18637/jss.v076.i02>.

### Examples

    Z <- matrix(runif(9), ncol = 3)
    U <- eigen(Z %*% t(Z))$vectors
    D1 <- diag(runif(3))
    D2 <- diag(runif(3))
    D3 <- diag(runif(3))
    D4 <- diag(runif(3))

    X.matrix <- array(0, dim=c(3, 3, 4))
    X.matrix[,,1] <- t(U) %*% D1 %*% U
    X.matrix[,,2] <- t(U) %*% D2 %*% U
    X.matrix[,,3] <- t(U) %*% D3 %*% U
    X.matrix[,,4] <- t(U) %*% D4 %*% U

    W1 <- djd(X.matrix)
    round(U %*% W1, 4) # should be a signed permutation
                         # matrix if W1 is correct.

    W2 <- djd(X.matrix, r=1)
    round(U %*% W2, 4) # should be a signed permutation
                         # matrix if W2 is correct.

    W3 <- djd(X.matrix, G="l")
    round(U %*% W3, 4) # should be a signed permutation
                         # matrix if W3 is correct.

[Package JADE version 2.0-2 Index]