| icafast {ica} | R Documentation |
Computes ICA decomposition using Hyvarinen's (1999) FastICA algorithm with various options.
icafast(X,nc,center=TRUE,maxit=100,tol=1e-6,Rmat=diag(nc),
alg=c("par","def"),fun=c("logcosh","exp","kur"),alpha=1)
X |
Data matrix with |
nc |
Number of components to extract. |
center |
If |
maxit |
Maximum number of algorithm iterations to allow. |
tol |
Convergence tolerance. |
Rmat |
Initial estimate of the |
alg |
Algorithm to use: |
fun |
Contrast function to use for negentropy approximation. |
alpha |
Tuning parameter for "logcosh" contrast function (1 <= |
ICA Model
The ICA model can be written as X=tcrossprod(S,M)+E, where columns of S contain the source signals, M is the mixing matrix, and columns of E contain 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).
FastICA
The FastICA algorithm finds the orthogonal rotation matrix R that (approximately) maximizes the negentropy of the estimated source signals. Negentropy is approximated using
J(s) = [E\{G(s)\}-E\{G(z)\} ]^2
where E denotes the expectation, G is the contrast function, and z is a standard normal variable. See Hyvarinen (1999) for specifics of fixed-point algorithm.
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. |
alg |
Algorithm used (same as input). |
fun |
Contrast function (same as input). |
alpha |
Tuning parameter (same as input). |
Nathaniel E. Helwig <helwig@umn.edu>
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, 263-273.
Hyvarinen, A. (1999). Fast and robust fixed-point algorithms for independent component analysis. IEEE Transactions on Neural Networks, 10, 626-634.
########## 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),2,2)
Xmat <- tcrossprod(Amat,Bmat)
# ICA via FastICA with 2 components
imod <- icafast(Xmat,2)
acy(Bmat,imod$M)
congru(Amat,imod$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),100,2)
Xmat <- tcrossprod(Amat,Bmat)
# ICA via FastICA with 2 components
imod <- icafast(Xmat,2)
congru(Amat,imod$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),1000,100)
Xmat <- tcrossprod(Amat,Bmat)+Emat
# ICA via FastICA with 2 components
imod <- icafast(Xmat,2)
congru(Amat,imod$S)