fastICA  R Documentation 
This is an R and C code implementation of the FastICA algorithm of Aapo Hyvarinen et al. (https://www.cs.helsinki.fi/u/ahyvarin/) to perform Independent Component Analysis (ICA) and Projection Pursuit.
fastICA(X, n.comp, alg.typ = c("parallel","deflation"),
fun = c("logcosh","exp"), alpha = 1.0, method = c("R","C"),
row.norm = FALSE, maxit = 200, tol = 1e04, verbose = FALSE,
w.init = NULL)
X 
a data matrix with 
n.comp 
number of components to be extracted 
alg.typ 
if 
fun 
the functional form of the 
alpha 
constant in range [1, 2] used in approximation to
negentropy when 
method 
if 
row.norm 
a logical value indicating whether rows of the data
matrix 
maxit 
maximum number of iterations to perform. 
tol 
a positive scalar giving the tolerance at which the unmixing matrix is considered to have converged. 
verbose 
a logical value indicating the level of output as the algorithm runs. 
w.init 
Initial unmixing matrix of dimension

Independent Component Analysis (ICA)
The data matrix X is considered to be a linear combination of nonGaussian (independent) components i.e. X = SA where columns of S contain the independent components and A is a linear mixing matrix. In short ICA attempts to ‘unmix’ the data by estimating an unmixing matrix W where XW = S.
Under this generative model the measured ‘signals’ in X will tend to be ‘more Gaussian’ than the source components (in S) due to the Central Limit Theorem. Thus, in order to extract the independent components/sources we search for an unmixing matrix W that maximizes the nongaussianity of the sources.
In FastICA, nongaussianity is measured using approximations to
negentropy (J
) which are more robust than kurtosisbased
measures and fast to compute.
The approximation takes the form
J(y) = [E\{G(y)\}E\{G(v)\}]^2
where v
is a N(0,1) r.v.
The following choices of G are included as options
G(u)=\frac{1}{\alpha} \log \cosh (\alpha u)
and G(u)=\exp(u^2/2)
.
Algorithm
First, the data are centered by subtracting the mean of each column of the data matrix X.
The data matrix is then ‘whitened’ by projecting the data onto its principal component directions i.e. X > XK where K is a prewhitening matrix. The number of components can be specified by the user.
The ICA algorithm then estimates a matrix W s.t XKW = S . W is chosen to maximize the negentropy approximation under the constraints that W is an orthonormal matrix. This constraint ensures that the estimated components are uncorrelated. The algorithm is based on a fixedpoint iteration scheme for maximizing the negentropy.
Projection Pursuit
In the absence of a generative model for the data the algorithm can be used to find the projection pursuit directions. Projection pursuit is a technique for finding ‘interesting’ directions in multidimensional datasets. These projections and are useful for visualizing the dataset and in density estimation and regression. Interesting directions are those which show the least Gaussian distribution, which is what the FastICA algorithm does.
A list containing the following components
X 
preprocessed data matrix 
K 
prewhitening matrix that projects data onto the first 
W 
estimated unmixing matrix (see definition in details) 
A 
estimated mixing matrix 
S 
estimated source matrix 
J L Marchini and C Heaton
A. Hyvarinen and E. Oja (2000) Independent Component Analysis: Algorithms and Applications, Neural Networks, 13(45):411430
ica.R.def
, ica.R.par
#
#Example 1: unmixing two mixed independent uniforms
#
S < matrix(runif(10000), 5000, 2)
A < matrix(c(1, 1, 1, 3), 2, 2, byrow = TRUE)
X < S %*% A
a < fastICA(X, 2, alg.typ = "parallel", fun = "logcosh", alpha = 1,
method = "C", row.norm = FALSE, maxit = 200,
tol = 0.0001, verbose = TRUE)
par(mfrow = c(1, 3))
plot(a$X, main = "Preprocessed data")
plot(a$X %*% a$K, main = "PCA components")
plot(a$S, main = "ICA components")
#
#Example 2: unmixing two independent signals
#
S < cbind(sin((1:1000)/20), rep((((1:200)100)/100), 5))
A < matrix(c(0.291, 0.6557, 0.5439, 0.5572), 2, 2)
X < S %*% A
a < fastICA(X, 2, alg.typ = "parallel", fun = "logcosh", alpha = 1,
method = "R", row.norm = FALSE, maxit = 200,
tol = 0.0001, verbose = TRUE)
par(mfcol = c(2, 3))
plot(1:1000, S[,1 ], type = "l", main = "Original Signals",
xlab = "", ylab = "")
plot(1:1000, S[,2 ], type = "l", xlab = "", ylab = "")
plot(1:1000, X[,1 ], type = "l", main = "Mixed Signals",
xlab = "", ylab = "")
plot(1:1000, X[,2 ], type = "l", xlab = "", ylab = "")
plot(1:1000, a$S[,1 ], type = "l", main = "ICA source estimates",
xlab = "", ylab = "")
plot(1:1000, a$S[, 2], type = "l", xlab = "", ylab = "")
#
#Example 3: using FastICA to perform projection pursuit on a
# mixture of bivariate normal distributions
#
if(require(MASS)){
x < mvrnorm(n = 1000, mu = c(0, 0), Sigma = matrix(c(10, 3, 3, 1), 2, 2))
x1 < mvrnorm(n = 1000, mu = c(1, 2), Sigma = matrix(c(10, 3, 3, 1), 2, 2))
X < rbind(x, x1)
a < fastICA(X, 2, alg.typ = "deflation", fun = "logcosh", alpha = 1,
method = "R", row.norm = FALSE, maxit = 200,
tol = 0.0001, verbose = TRUE)
par(mfrow = c(1, 3))
plot(a$X, main = "Preprocessed data")
plot(a$X %*% a$K, main = "PCA components")
plot(a$S, main = "ICA components")
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.