ica: ICA via FastICA, Infomax, or JADE

View source: R/ica.R

icaR Documentation

ICA via FastICA, Infomax, or JADE

Description

Computes ICA decomposition using Hyvarinen's (1999) FastICA algorithm, Bell and Sejnowski's (1995) Information-Maximization (Infomax) algorithm, or Cardoso and Souloumiac's (1993, 1996) Joint Approximate Diagonalization of Eigenmatrices (JADE) algorithm.

Usage

ica(X, nc, method = c("fast", "imax", "jade"), ...)

Arguments

X

Data matrix with n rows (samples) and p columns (variables).

nc

Number of components to extract.

method

Method for decomposition.

...

Additional arguments to be passed to other ICA functions (see Details).

Details

ICA Model The ICA model can be written as X = tcrossprod(S, M) + E, where S contains the source signals, M is the mixing matrix, and E contains the noise signals. Columns of X are assumed to have zero mean. The goal is to find the unmixing matrix W such that columns of S = tcrossprod(X, W) are independent as possible.

Whitening Without loss of generality, we can write M = P %*% R where P is a tall matrix and R is an orthogonal rotation matrix. Letting Q denote the pseudoinverse of P, we can whiten the data using Y = tcrossprod(X, Q). The goal is to find the orthongal rotation matrix R such that the source signal estimates S = Y %*% R are as independent as possible. Note that W = crossprod(R, Q).

Method This is a wrapper function for the functions icafast, icaimax, or icajade. See the corresponding function for details on the method, as well as the available arguments (handled by the ... argument).

Value

S

Matrix of source signal estimates (S = Y %*% R).

M

Estimated mixing matrix.

W

Estimated unmixing matrix (W = crossprod(R, Q)).

Y

Whitened data matrix.

Q

Whitening matrix.

R

Orthogonal rotation matrix.

vafs

Variance-accounted-for by each component.

iter

Number of algorithm iterations.

converged

Logical indicating if algorithm converged.

...

Other arguments (if method = "fast" or method = "imax").

Author(s)

Nathaniel E. Helwig <helwig@umn.edu>

References

Bell, A.J. & Sejnowski, T.J. (1995). An information-maximization approach to blind separation and blind deconvolution. Neural Computation, 7(6), 1129-1159. doi: 10.1162/neco.1995.7.6.1129

Cardoso, J.F., & Souloumiac, A. (1993). Blind beamforming for non-Gaussian signals. IEE Proceedings-F, 140(6), 362-370. doi: 10.1049/ip-f-2.1993.0054

Cardoso, J.F., & Souloumiac, A. (1996). Jacobi angles for simultaneous diagonalization. SIAM Journal on Matrix Analysis and Applications, 17(1), 161-164. doi: 10.1137/S0895479893259546

Helwig, N.E. & Hong, S. (2013). A critique of Tensor Probabilistic Independent Component Analysis: Implications and recommendations for multi-subject fMRI data analysis. Journal of Neuroscience Methods, 213(2), 263-273. doi: 10.1016/j.jneumeth.2012.12.009

Hyvarinen, A. (1999). Fast and robust fixed-point algorithms for independent component analysis. IEEE Transactions on Neural Networks, 10(3), 626-634. doi: 10.1109/72.761722

See Also

icafast for ICA via FastICA

icaimax for ICA via Infomax

icajade for ICA via JADE

Examples

##########   EXAMPLE 1   ##########

# generate noiseless data (p == r)
set.seed(123)
nobs <- 1000
Amat <- cbind(icasamp("a", "rnd", nobs), icasamp("b", "rnd", nobs))
Bmat <- matrix(2 * runif(4), nrow = 2, ncol = 2)
Xmat <- tcrossprod(Amat, Bmat)

# ICA via different algorithms
imod.fast <- ica(Xmat, nc = 2)
imod.imax <- ica(Xmat, nc = 2, method = "imax")
imod.jade <- ica(Xmat, nc = 2, method = "jade")

# compare mixing matrix recovery
acy(Bmat, imod.fast$M)
acy(Bmat, imod.imax$M)
acy(Bmat, imod.jade$M)

# compare source signal recovery
cor(Amat, imod.fast$S)
cor(Amat, imod.imax$S)
cor(Amat, imod.jade$S)


##########   EXAMPLE 2   ##########

# generate noiseless data (p != r)
set.seed(123)
nobs <- 1000
Amat <- cbind(icasamp("a", "rnd", nobs), icasamp("b", "rnd", nobs))
Bmat <- matrix(2 * runif(200), nrow = 100, ncol = 2)
Xmat <- tcrossprod(Amat, Bmat)

# ICA via different algorithms
imod.fast <- ica(Xmat, nc = 2)
imod.imax <- ica(Xmat, nc = 2, method = "imax")
imod.jade <- ica(Xmat, nc = 2, method = "jade")

# compare source signal recovery
cor(Amat, imod.fast$S)
cor(Amat, imod.imax$S)
cor(Amat, imod.jade$S)


##########   EXAMPLE 3   ##########

# generate noisy data (p != r)
set.seed(123)
nobs <- 1000
Amat <- cbind(icasamp("a", "rnd", nobs), icasamp("b", "rnd", nobs))
Bmat <- matrix(2 * runif(200), 100, 2)
Emat <- matrix(rnorm(10^5), nrow = 1000, ncol = 100)
Xmat <- tcrossprod(Amat,Bmat) + Emat

# ICA via different algorithms
imod.fast <- ica(Xmat, nc = 2)
imod.imax <- ica(Xmat, nc = 2, method = "imax")
imod.jade <- ica(Xmat, nc = 2, method = "jade")

# compare source signal recovery
cor(Amat, imod.fast$S)
cor(Amat, imod.imax$S)
cor(Amat, imod.jade$S)


ica documentation built on July 9, 2022, 1:07 a.m.

Related to ica in ica...