adapt_fICA: Adaptive Deflation-based FastICA Method for Independent...

Description Usage Arguments Details Value Author(s) References See Also Examples

View source: R/adapt_fICA.R

Description

The adaptive deflation-based FastICA method for the independent component problem. The function estimates the unmixing matrix by finding, for each component separately, the best nonlinearity from a set of nonlinearities.

Usage

1
2
adapt_fICA(X, gs=gf, dgs=dgf, name=gnames, kj=0, inR=TRUE, 
           eps=1e-06, maxiter=100)

Arguments

X

a numeric data matrix. Missing values are not allowed.

gs

a list of functions containing the nonlinearities.

dgs

a list of functions containing the first derivatives of the nonlinearities.

name

a list of strings containing the names of the nonlinearities.

kj

defines the initial estimate of the unmixing matrix, see details.

inR

a logical which indicates whether R or C is used for computations. If FALSE, the default set of nonlinearities gf is used.

eps

convergence tolerance.

maxiter

maximum number of iterations.

Details

The algorithm first finds initial estimates of the sources. The method to find the estimates is decided by the choice of the argument kj. If the value of kj is an integer between 1 and number of the sources, then the method is kj-JADE, otherwise it is FOBI. For the meaning of the value kj used as kj-JADE, see the help for k_JADE.

Value

A list with class 'bss' containing the following components:

W

estimated unmixing matrix.

gs

nonlinearities that were available.

used_gs

nonlinearities, in order of appearance, that were used. The last row of the unmixing matrix follows directly from the other rows, and hence no nonlinearity is connected to it.

alphas

the statistics for the choice of the nonlinearities.

init_est

method that was used for the initial estimate (FOBI or k-JADE).

S

estimated source components standardized to have mean 0 and unit variances.

Author(s)

Jari Miettinen

References

Hyvarinen, A. and Oja, E. (1997), A fast fixed-point algorithm for independent component analysis, Neural Computation, vol. 9, 1483–1492.

Nordhausen, K., Ilmonen, P., Mandal, A., Oja, H. and Ollila, E. (2011), Deflation-based FastICA reloaded, in Proc. "19th European Signal Processing Conference 2011 (EUSIPCO 2011)", Barcelona, 1854–1858.

Miettinen, J., Nordhausen, K., Oja, H. and Taskinen, S. (2014), Deflation-based FastICA with adaptive choices of nonlinearities, IEEE Transactions on Signal Processing, 62(21), 5716–5724.

See Also

fICA, nonlinearities, FOBI, k_JADE

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
A <- matrix(rnorm(9),3,3)
s1 <- rt(1000,6)
s2 <- rexp(1000,1)
s3 <- runif(1000)

S <- cbind(s1,s2,s3)
X <- S %*% t(A)

res1<-adapt_fICA(X, inR=FALSE)
res1
coef(res1)
plot(res1) 

require(JADE)
MD(coef(res1),A)

# changing the set of candidate nonlinearities

?nonlinearities
g <- function(x){x^2}
dg <- function(x){2*x}
gf_new <- c(gf[-c(5,8,10)],g)
dgf_new <- c(dgf[-c(5,8,10)],g)
gnames_new <- c(gnames[-c(5,8,10)],"skew")

res2<-adapt_fICA(X, gs=gf_new, dgs=dgf_new, name=gnames_new)
res2
MD(coef(res2),A)

# reloaded FastICA using tanh

res3<-adapt_fICA(X, gs=gf[2], dgs=dgf[2], name=gnames[2])
res3
MD(coef(res3),A)

Example output

W :
             [,1]       [,2]      [,3]
[1,]  1.965751821  0.8593998 1.8771397
[2,] -0.006599323  0.1799098 1.6277043
[3,]  0.167839648 -0.3673192 0.5268767

gs :
 [1] "pow3"  "tanh"  "gaus"  "lt0.6" "rt0.6" "bt"    "bt0.2" "bt0.4" "bt0.6"
[10] "bt0.8" "bt1.0" "bt1.2" "bt1.4" "bt1.6"

used_gs :
[1] "bt1.4" "lt0.6"

alphas :
         comp 1    comp 2    comp 3
pow3  0.6252194 3.6174308  7.519113
tanh  1.0412404 2.7588144  4.624521
gaus  1.0825141 3.1015144  5.053815
lt0.6 2.8875637 0.4493405 18.254252
rt0.6 2.0068585 1.9723875 14.633941
bt    0.8863231 2.9314945  5.382017
bt0.2 0.8590170 2.8595016  5.416907
bt0.4 0.7767836 2.6941177  5.636684
bt0.6 0.6561328 2.5585345  5.933521
bt0.8 0.5337060 2.5112930  6.306461
bt1.0 0.4357417 2.6814981  6.686034
bt1.2 0.3600973 3.0441593  7.226032
bt1.4 0.2952558 3.5244530  7.879067
bt1.6 0.3526961 4.0822708  8.642559

init_est :
[1] "FOBI"

             [,1]       [,2]      [,3]
[1,]  1.965751821  0.8593998 1.8771397
[2,] -0.006599323  0.1799098 1.6277043
[3,]  0.167839648 -0.3673192 0.5268767
Loading required package: JADE
[1] 0.07710839
nonlinearities              package:fICA               R Documentation

_S_e_t _o_f _N_o_n_l_i_n_e_a_r_i_t_i_e_s _f_o_r _A_d_a_p_t_i_v_e _D_e_f_l_a_t_i_o_n-_b_a_s_e_d _F_a_s_t_I_C_A _M_e_t_h_o_d

_D_e_s_c_r_i_p_t_i_o_n:

     The default set of nonlinearities with their first derivatives and
     names used in 'adapt_fICA'.

_U_s_a_g_e:

     gf
     
     dgf
     
     Gf
     
     gnames
     
_D_e_t_a_i_l_s:

     The set of nonlinearities includes both well-known functions
     (_pow3_, _tanh_ and _gaus_) and the ones suggested in Miettinen et
     al. (2014).

     The object 'gf' contains the nonlinearities which are:

       gf[[1]]   pow3   x^3                     
       gf[[2]]   tanh   tanh(x)                 
       gf[[3]]   gaus   exp(-(x)^2/2)           
       gf[[4]]   lt0.6  (x+0.6)_-^2             
       gf[[5]]   rt0.6  (x-0.6)_+^2             
       gf[[6]]   bt     (x)_+^2-(x)_-^2         
       gf[[7]]   bt0.2  (x-0.2)_+^2-(x+0.2)_-^2 
       gf[[8]]   bt0.4  (x-0.4)_+^2-(x+0.4)_-^2 
       gf[[9]]   bt0.6  (x-0.6)_+^2-(x+0.6)_-^2 
       gf[[10]]  bt0.8  (x-0.8)_+^2-(x+0.8)_-^2 
       gf[[11]]  bt1.0  (x-1.0)_+^2-(x+1.0)_-^2 
       gf[[12]]  bt1.2  (x-1.2)_+^2-(x+1.2)_-^2 
       gf[[13]]  bt1.4  (x-1.4)_+^2-(x+1.4)_-^2 
       gf[[14]]  bt1.6  (x-1.6)_+^2-(x+1.6)_-^2 
      
     The objects 'dgf', 'Gf' and 'gnames' contain the corresponding
     first derivatives, integrals and names in the same order.

     For skew sources _lt0.6_ and _rt0.6_ combined are more efficient
     than the commonly used _skew_. The rest of the functions are
     useful for example for sources with multimodal density functions.

     The user can easily submit a own set or modify the set suggested
     here. See the example below and the examples in 'adapt_fICA'.

_A_u_t_h_o_r(_s):

     Jari Miettinen

_R_e_f_e_r_e_n_c_e_s:

     Hyvarinen, A. and Oja, E. (1997), A fast fixed-point algorithm for
     independent component analysis, _Neural Computation_, vol. 9,
     1483-1492.

     Miettinen, J., Nordhausen, K., Oja, H. and Taskinen, S. (2014),
     Deflation-based FastICA with adaptive choices of nonlinearities,
     _IEEE Transactions on Signal Processing_, 62(21), 5716-5724.

_S_e_e _A_l_s_o:

     adapt_fICA

_E_x_a_m_p_l_e_s:

     # leaving out functions from the default set and adding a new function  
     g <- function(x){x^2}
     dg <- function(x){2*x}
     G <- function(x){x^3/3}
     
     gf_new <- c(gf[-c(6,8,10)],g)
     dgf_new <- c(dgf[-c(6,8,10)],dg)
     Gf_new <- c(Gf[-c(6,8,10)],G)
     gnames_new <- c(gnames[-c(6,8,10)],"skew")
     

W :
             [,1]       [,2]      [,3]
[1,]  1.965751824  0.8593998 1.8771398
[2,] -0.006599413  0.1799098 1.6277043
[3,]  0.167839606 -0.3673192 0.5268767

gs :
 [1] "pow3"  "tanh"  "gaus"  "lt0.6" "bt"    "bt0.2" "bt0.6" "bt1.0" "bt1.2"
[10] "bt1.4" "bt1.6" "skew" 

used_gs :
[1] "bt1.4" "lt0.6"

alphas :
         comp 1    comp 2    comp 3
pow3  0.6252194 3.6174308  7.519113
tanh  1.0412404 2.7588144  4.624521
gaus  1.0825141 3.1015144  5.053815
lt0.6 2.8875637 0.4493405 18.254252
bt    0.8863231 2.9314945  5.382017
bt0.2 0.8590170 2.8595016  5.416907
bt0.6 0.6561328 2.5585345  5.933521
bt1.0 0.4357417 2.6814981  6.686034
bt1.2 0.3600973 3.0441593  7.226032
bt1.4 0.2952558 3.5244530  7.879067
bt1.6 0.3526961 4.0822708  8.642559
skew  0.8315143 4.3416583  5.748428

init_est :
[1] "FOBI"

[1] 0.07710849
W :
              [,1]       [,2]      [,3]
[1,]  1.9695969557  0.8483238 1.8837848
[2,] -0.0002756543  0.1906800 1.6267659
[3,]  0.1143751536 -0.3871005 0.5056299

gs :
[1] "tanh"

used_gs :
[1] "tanh" "tanh"

alphas :
      comp 1   comp 2   comp 3
tanh 1.04124 2.758814 4.624521

init_est :
[1] "FOBI"

[1] 0.0949084

fICA documentation built on Dec. 11, 2021, 9:58 a.m.