infomaxICA: Estimates independent components via infomax

Description Usage Arguments Details Value Note Author(s) References Examples

Description

Estimate independent components using the infomax criteria, which is equivalent to maximum likelihood using the logistic density, exp(-S)/(1+exp(-S))^2.

Usage

1
2
infomaxICA(X, n.comp, W.list = NULL, whiten = FALSE, maxit = 500, eps = 1e-08, 
alpha.eps = 1e-08, verbose = FALSE, restarts=0) 

Arguments

X

the n x p data matrix

n.comp

number of components to be estimated

W.list

list of orthogonal matrices for initialization

whiten

Whitens the data before applying ICA, i.e., X%*%whitener = Z, where Z has mean zero and empirical covariance equal to the identity matrix, and Z is then used as the input.

maxit

maximum number of iterations

eps

algorithm terminates when the norm of the gradient is less than eps

alpha.eps

tolerance controlling the level of annealing: algorithm terminates with a warning if the learning parameter is less than alpha.eps

verbose

if TRUE, prints (1) the value of the infomax objective function at each iteration, (2) the norm of the gradient, and (3) current value of the learning parameter alpha.

restarts

An integer determining the number of initial matrices to use in estimating the ICA model. The objective function has local optima, so multiple starting values are recommended. If whiten=TRUE, then generates random orthogonal matrices. If whiten=FALSE, generate random matrices from rnorm(). See code for details.

Details

This is an R version of ICA using the infomax criteria that provides an alternative to Matlab code (ftp://ftp.cnl.salk.edu/pub/tony/sep96.public), but with a few modifications. First, we use the full data (the so-called offline algorithm) in each iteration rather than an online algorithm with batches. Secondly, we use an adaptive method to choose the step size (based upon Bernaards and Jennrich 2005), which speeds up convergence. We also omitted the bias term (intercept) included in the original formulation because we centered our data.

Value

S

the estimated independent components

W

if whiten=TRUE, returns the orthogonal unmixing matrix; no value is returned when whiten=FALSE

M

Returns the estimated mixing matrix for the model X = S M, where X is not pre-whitened (although X is centered)

f

the value of the objective function at the estimated S

Table

summarizes algorithm status at each iteration

convergence

1 if norm of the gradient is less than eps, 2 if the learning parameter was smaller than alpha.eps, which usually means the gradient is sufficiently small, 0 otherwise

Note

In contrast to most other ICA methods, W is not contrained to be orthogonal.

Author(s)

Benjamin Risk

References

Bell, A. & Sejnowski, T. An information-maximization approach to blind separation and blind deconvolution Neural computation, Neural computation, 1995, 7, 1129-1159.

Bernaards, C. A. and Jennrich, R. I. (2005) Gradient Projection Algorithms and Software for Arbitrary Rotation Criteria in Factor Analysis, Educational and Psychological Measurement 65, 676-696. <http://www.stat.ucla.edu/research/gpa>

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
## Example when p > d. The MD function and amari measures 
# are not defined for M. We can compare the 
# "true W inverse", which is the mixing matrix multiplied 
# by the whitening matrix; alternatively, we can use
# multidcov::frobICA. These two approaches are
# demonstrated below:

set.seed(999)
nObs <- 1024
nComp <- 3

# simulate from gamma distributions with
# varying amounts of skewness:
simS<-cbind(rgamma(nObs, shape = 1, scale = 2),
            rgamma(nObs, shape = 3, scale = 2),
            rgamma(nObs, shape = 9, scale = 0.5))

#standardize by expected value and variance:
simS[,1] = (simS[,1] - 1*2)/sqrt(1*2^2)
simS[,2] = (simS[,2] - 3*2)/sqrt(3*2^2)
simS[,3] = (simS[,3] - 9*0.5)/sqrt(9*0.5^2)

# slightly revised 'mixmat' function (from ProDenICA)
# for p>=d: uses fastICA and ProDenICA parameterization:
myMixmat <- function (p = 2, d = NULL) {
  if(is.null(d)) d = p
  a <- matrix(rnorm(d * p), d, p)
  sa <- La.svd(a)
  dL <- sort(runif(d) + 1)
  mat <- sa$u%*%(sa$vt*dL)
  attr(mat, "condition") <- dL[d]/dL[1]
  mat
}

simM <- myMixmat(p = 6, d = nComp)
xData <- simS%*%simM
xWhitened <- whitener(xData, n.comp = nComp)
#Define a 'true' W (uses the estimated whitening matrix):
W.true <- solve(simM%*%xWhitened$whitener)

estInfomax <- infomaxICA(X = xData, n.comp = nComp, whiten = TRUE, verbose = TRUE)

frobICA(estInfomax$M,simM)
library(JADE)
MD(t(estInfomax$W),t(solve(W.true)))
amari.error(t(estInfomax$W),t(solve(W.true)))

Example output

Loading required package: Rcpp
Loading required package: MASS
Loading required package: clue
Loading required package: combinat

Attaching package: 'combinat'

The following object is masked from 'package:utils':

    combn

iter: 1; newF: -4416.845894; log10||grad||: -1.059842; alpha: 2
iter: 2; newF: -4349.538901; log10||grad||: -1.193744; alpha: 4
iter: 3; newF: -4316.57333; log10||grad||: -1.866519; alpha: 2
iter: 4; newF: -4315.058557; log10||grad||: -1.757356; alpha: 4
iter: 5; newF: -4314.075226; log10||grad||: -1.639013; alpha: 4
iter: 6; newF: -4309.199036; log10||grad||: -1.998738; alpha: 2
iter: 7; newF: -4306.161831; log10||grad||: -1.954943; alpha: 4
iter: 8; newF: -4303.018115; log10||grad||: -1.614786; alpha: 8
iter: 9; newF: -4297.895403; log10||grad||: -1.978995; alpha: 2
iter: 10; newF: -4295.200099; log10||grad||: -1.940444; alpha: 4
iter: 11; newF: -4293.312979; log10||grad||: -1.855048; alpha: 4
iter: 12; newF: -4292.667846; log10||grad||: -1.722532; alpha: 4
iter: 13; newF: -4289.74446; log10||grad||: -2.119811; alpha: 2
iter: 14; newF: -4288.70826; log10||grad||: -2.061477; alpha: 4
iter: 15; newF: -4288.331644; log10||grad||: -1.933059; alpha: 4
iter: 16; newF: -4287.229329; log10||grad||: -2.310636; alpha: 2
iter: 17; newF: -4286.823324; log10||grad||: -2.247909; alpha: 4
iter: 18; newF: -4286.713287; log10||grad||: -2.11228; alpha: 4
iter: 19; newF: -4286.242831; log10||grad||: -2.509627; alpha: 2
iter: 20; newF: -4286.102464; log10||grad||: -2.432625; alpha: 4
iter: 21; newF: -4286.087117; log10||grad||: -2.283365; alpha: 4
iter: 22; newF: -4285.882887; log10||grad||: -2.699351; alpha: 2
iter: 23; newF: -4285.839592; log10||grad||: -2.598032; alpha: 4
iter: 24; newF: -4285.783824; log10||grad||: -2.915212; alpha: 2
iter: 25; newF: -4285.75343; log10||grad||: -2.876714; alpha: 4
iter: 26; newF: -4285.741996; log10||grad||: -2.750683; alpha: 4
iter: 27; newF: -4285.716439; log10||grad||: -3.109438; alpha: 2
iter: 28; newF: -4285.706535; log10||grad||: -3.039898; alpha: 4
iter: 29; newF: -4285.704729; log10||grad||: -2.891422; alpha: 4
iter: 30; newF: -4285.692235; log10||grad||: -3.288818; alpha: 2
iter: 31; newF: -4285.689197; log10||grad||: -3.187474; alpha: 4
iter: 32; newF: -4285.685479; log10||grad||: -3.49347; alpha: 2
iter: 33; newF: -4285.683344; log10||grad||: -3.451837; alpha: 4
iter: 34; newF: -4285.682526; log10||grad||: -3.322549; alpha: 4
iter: 35; newF: -4285.680694; log10||grad||: -3.673572; alpha: 2
iter: 36; newF: -4285.679957; log10||grad||: -3.599313; alpha: 4
iter: 37; newF: -4285.679816; log10||grad||: -3.44813; alpha: 4
iter: 38; newF: -4285.678853; log10||grad||: -3.836976; alpha: 2
iter: 39; newF: -4285.6786; log10||grad||: -3.733675; alpha: 4
iter: 40; newF: -4285.678296; log10||grad||: -4.027392; alpha: 2
iter: 41; newF: -4285.678105; log10||grad||: -3.984566; alpha: 4
iter: 42; newF: -4285.67802; log10||grad||: -3.858417; alpha: 4
iter: 43; newF: -4285.677859; log10||grad||: -4.186181; alpha: 2
iter: 44; newF: -4285.67778; log10||grad||: -4.119141; alpha: 4
iter: 45; newF: -4285.677752; log10||grad||: -3.976623; alpha: 4
iter: 46; newF: -4285.677664; log10||grad||: -4.330149; alpha: 2
iter: 47; newF: -4285.677628; log10||grad||: -4.244121; alpha: 4
iter: 48; newF: -4285.67762; log10||grad||: -4.090614; alpha: 4
iter: 49; newF: -4285.677569; log10||grad||: -4.462373; alpha: 2
iter: 50; newF: -4285.677552; log10||grad||: -4.362654; alpha: 4
iter: 51; newF: -4285.67755; log10||grad||: -4.202009; alpha: 4
iter: 52; newF: -4285.677521; log10||grad||: -4.586212; alpha: 2
iter: 53; newF: -4285.677512; log10||grad||: -4.477068; alpha: 4
iter: 54; newF: -4285.677512; log10||grad||: -4.311819; alpha: 4
iter: 55; newF: -4285.677494; log10||grad||: -4.704495; alpha: 2
iter: 56; newF: -4285.67749; log10||grad||: -4.588957; alpha: 4
iter: 57; newF: -4285.677484; log10||grad||: -4.868585; alpha: 2
iter: 58; newF: -4285.67748; log10||grad||: -4.819269; alpha: 4
iter: 59; newF: -4285.677477; log10||grad||: -4.699317; alpha: 4
iter: 60; newF: -4285.677474; log10||grad||: -4.985367; alpha: 2
iter: 61; newF: -4285.677471; log10||grad||: -4.931881; alpha: 4
iter: 62; newF: -4285.67747; log10||grad||: -4.808755; alpha: 4
iter: 63; newF: -4285.677468; log10||grad||: -5.099789; alpha: 2
iter: 64; newF: -4285.677466; log10||grad||: -5.04318; alpha: 4
iter: 65; newF: -4285.677465; log10||grad||: -4.917637; alpha: 4
iter: 66; newF: -4285.677464; log10||grad||: -5.212764; alpha: 2
iter: 67; newF: -4285.677463; log10||grad||: -5.153677; alpha: 4
iter: 68; newF: -4285.677463; log10||grad||: -5.026179; alpha: 4
iter: 69; newF: -4285.677462; log10||grad||: -5.324849; alpha: 2
iter: 70; newF: -4285.677462; log10||grad||: -5.263681; alpha: 4
iter: 71; newF: -4285.677461; log10||grad||: -5.134508; alpha: 4
iter: 72; newF: -4285.677461; log10||grad||: -5.436384; alpha: 2
iter: 73; newF: -4285.677461; log10||grad||: -5.373374; alpha: 4
iter: 74; newF: -4285.67746; log10||grad||: -5.242699; alpha: 4
iter: 75; newF: -4285.67746; log10||grad||: -5.54757; alpha: 2
iter: 76; newF: -4285.67746; log10||grad||: -5.482864; alpha: 4
iter: 77; newF: -4285.67746; log10||grad||: -5.350799; alpha: 4
iter: 78; newF: -4285.67746; log10||grad||: -5.65853; alpha: 2
iter: 79; newF: -4285.67746; log10||grad||: -5.592215; alpha: 4
iter: 80; newF: -4285.67746; log10||grad||: -5.458833; alpha: 4
iter: 81; newF: -4285.67746; log10||grad||: -5.769335; alpha: 2
iter: 82; newF: -4285.677459; log10||grad||: -5.701469; alpha: 4
iter: 83; newF: -4285.677459; log10||grad||: -5.56682; alpha: 4
iter: 84; newF: -4285.677459; log10||grad||: -5.880031; alpha: 2
iter: 85; newF: -4285.677459; log10||grad||: -5.810647; alpha: 4
iter: 86; newF: -4285.677459; log10||grad||: -5.674769; alpha: 4
iter: 87; newF: -4285.677459; log10||grad||: -5.990645; alpha: 2
iter: 88; newF: -4285.677459; log10||grad||: -5.919765; alpha: 4
iter: 89; newF: -4285.677459; log10||grad||: -5.782687; alpha: 4
iter: 90; newF: -4285.677459; log10||grad||: -6.101193; alpha: 2
iter: 91; newF: -4285.677459; log10||grad||: -6.028833; alpha: 4
iter: 92; newF: -4285.677459; log10||grad||: -5.890578; alpha: 4
iter: 93; newF: -4285.677459; log10||grad||: -6.211689; alpha: 2
iter: 94; newF: -4285.677459; log10||grad||: -6.137858; alpha: 4
iter: 95; newF: -4285.677459; log10||grad||: -5.998446; alpha: 4
iter: 96; newF: -4285.677459; log10||grad||: -6.322137; alpha: 2
iter: 97; newF: -4285.677459; log10||grad||: -6.246843; alpha: 4
iter: 98; newF: -4285.677459; log10||grad||: -6.106292; alpha: 4
iter: 99; newF: -4285.677459; log10||grad||: -6.432544; alpha: 2
iter: 100; newF: -4285.677459; log10||grad||: -6.355791; alpha: 4
iter: 101; newF: -4285.677459; log10||grad||: -6.214118; alpha: 4
iter: 102; newF: -4285.677459; log10||grad||: -6.542913; alpha: 2
iter: 103; newF: -4285.677459; log10||grad||: -6.464705; alpha: 4
iter: 104; newF: -4285.677459; log10||grad||: -6.321926; alpha: 4
iter: 105; newF: -4285.677459; log10||grad||: -6.653246; alpha: 2
iter: 106; newF: -4285.677459; log10||grad||: -6.573587; alpha: 4
iter: 107; newF: -4285.677459; log10||grad||: -6.429716; alpha: 4
iter: 108; newF: -4285.677459; log10||grad||: -6.763545; alpha: 2
iter: 109; newF: -4285.677459; log10||grad||: -6.682437; alpha: 4
iter: 110; newF: -4285.677459; log10||grad||: -6.537488; alpha: 4
iter: 111; newF: -4285.677459; log10||grad||: -6.873811; alpha: 2
iter: 112; newF: -4285.677459; log10||grad||: -6.791257; alpha: 4
iter: 113; newF: -4285.677459; log10||grad||: -6.645245; alpha: 4
iter: 114; newF: -4285.677459; log10||grad||: -6.984045; alpha: 2
iter: 115; newF: -4285.677459; log10||grad||: -6.900047; alpha: 4
iter: 116; newF: -4285.677459; log10||grad||: -6.752985; alpha: 4
iter: 117; newF: -4285.677459; log10||grad||: -7.094247; alpha: 2
iter: 118; newF: -4285.677459; log10||grad||: -7.008807; alpha: 4
iter: 119; newF: -4285.677459; log10||grad||: -6.86071; alpha: 4
iter: 120; newF: -4285.677459; log10||grad||: -7.204419; alpha: 2
iter: 121; newF: -4285.677459; log10||grad||: -7.11754; alpha: 4
iter: 122; newF: -4285.677459; log10||grad||: -6.96842; alpha: 4
iter: 123; newF: -4285.677459; log10||grad||: -7.31456; alpha: 2
iter: 124; newF: -4285.677459; log10||grad||: -7.226245; alpha: 4
iter: 125; newF: -4285.677459; log10||grad||: -7.076115; alpha: 4
iter: 126; newF: -4285.677459; log10||grad||: -7.424671; alpha: 2
iter: 127; newF: -4285.677459; log10||grad||: -7.334922; alpha: 4
iter: 128; newF: -4285.677459; log10||grad||: -7.183796; alpha: 4
iter: 129; newF: -4285.677459; log10||grad||: -7.534752; alpha: 2
iter: 130; newF: -4285.677459; log10||grad||: -7.443572; alpha: 4
iter: 131; newF: -4285.677459; log10||grad||: -7.291463; alpha: 4
iter: 132; newF: -4285.677459; log10||grad||: -7.644803; alpha: 2
iter: 133; newF: -4285.677459; log10||grad||: -7.552195; alpha: 4
iter: 134; newF: -4285.677459; log10||grad||: -7.399116; alpha: 4
iter: 135; newF: -4285.677459; log10||grad||: -7.754824; alpha: 2
iter: 136; newF: -4285.677459; log10||grad||: -7.660792; alpha: 4
iter: 137; newF: -4285.677459; log10||grad||: -7.506755; alpha: 4
iter: 138; newF: -4285.677459; log10||grad||: -7.864815; alpha: 2
iter: 139; newF: -4285.677459; log10||grad||: -7.769363; alpha: 4
iter: 140; newF: -4285.677459; log10||grad||: -7.614381; alpha: 4
iter: 141; newF: -4285.677459; log10||grad||: -7.974776; alpha: 2
iter: 142; newF: -4285.677459; log10||grad||: -7.877908; alpha: 4
iter: 143; newF: -4285.677459; log10||grad||: -7.721995; alpha: 4
iter: 144; newF: -4285.677459; log10||grad||: -8.084708; alpha: 2
[1] 0.0445615
[1] 0.06572981
[1] 0.03725169

steadyICA documentation built on May 2, 2019, 7:30 a.m.