ica | R Documentation |
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.
ica(X, nc, method = c("fast", "imax", "jade"), ...)
X |
Data matrix with |
nc |
Number of components to extract. |
method |
Method for decomposition. |
... |
Additional arguments to be passed to other ICA functions (see 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).
S |
Matrix of source signal estimates ( |
M |
Estimated mixing matrix. |
W |
Estimated unmixing matrix ( |
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 |
Nathaniel E. Helwig <helwig@umn.edu>
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
icafast
for ICA via FastICA
icaimax
for ICA via Infomax
icajade
for ICA via JADE
########## 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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.