Date: 2026-05-11

# 2. Multimodal Independent Component Analysis (MICA) and Group Independent Component Analysis (GroupICA)

#### Koki Tsuyuzaki

#### 2026-05-11

# Introduction

In this vignette we consider approximating multiple data matrices as a product of multiple low-rank matrices (a.k.a., factor matrices).

Test data is available from `toyModel`.

    library("iTensor")
    data1 <- iTensor::toyModel("MICA")
    data2 <- iTensor::toyModel("GroupICA")
    str(data1, 2)

    ## List of 2
    ##  $ X: num [1:10001, 1:3] -0.0613 -0.0593 0.5027 0.3647 0.357 ...
    ##  $ Y: num [1:10001, 1:3] 0.342 0.385 0.473 0.898 1.001 ...

    str(data2, 2)

    ## List of 2
    ##  $ X: num [1:5000, 1:6] -2.43 4.07 8.83 -1.56 6.1 ...
    ##  $ Y: num [1:5000, 1:6] -9.644 -2.587 -0.261 -2.316 -15.774 ...

Both `data1` and `data2` contain two time-series data `X` and `Y` as follows.

    plot.ts(data1$X[7700:8000,], main="data1 (X)")

    plot.ts(data1$Y[7700:8000,], main="data1 (Y)")

    plot.ts(data2$X[4700:5000,], main="data2 (X)")

    plot.ts(data2$Y[4700:5000,], main="data2 (Y)")

# Multimodal Independent Component Analysis (MICA)

As a formulation that extends ICA (independent component analysis) to the multiple matrices case, Multimodal Independent Component Analysis (MICA) was proposed ((Akaho 1999)). MICA extracts statistically dependent pairs of features from the sources, where the components of feature vector extracted from each source are independent.

`MICA` can be performed as follows.

    t_series <- seq(from = 0.00, to = 1.000, by = 1e-4)
    out.MICA <- MICA(data1$X, data1$Y, J=3, gamma_ts = 1 - 1 / (1 + exp(-100 * (t_series - 0.3))))

`J` is the rank parameter for ICA and `gamma_ts` is the weighting factor for dependence on independence. You will see that `MICA` could extract some time-series signals.

    plot.ts(out.MICA$U[7700:8000, ], main="Source Signal (X)")

    plot.ts(out.MICA$V[7700:8000, ], main="Source Signal (Y)")

# Group Independent Component Analysis (GroupICA)

Another formulation of the decomposition is Group Independent Component Analysis (GroupICA (Calhourn 2009; Pfister 2018)). `GroupICA` can be performed as follows.

    out_groupica <- GroupICA(data2, J1=6, algorithm="pooled")

The rank for each factor matrix can be set as `J1` and the decomposition algorithm can be easily switched by `ica.algorithm` (`algorithm` of `ICA` and `ICA2` can be specified). To pool the results of ICA against each data matrix, we implemented three algorithms such as `pooled`, `Calhoun2009`, and `Pfister2018`. For the details, see the references (Calhourn 2009; Pfister 2018).

You will see that `GroupICA` could extract some time-series signals.

    plot.ts(out_groupica$Ss[[1]], main="Source Signal (X)")

    plot.ts(out_groupica$Ss[[2]], main="Source Signal (Y)")

Unlike `MICA`, `GroupICA` can also be applied to more than three matrices.

# Session Information

    ## R version 3.6.3 (2020-02-29)
    ## Platform: x86_64-conda-linux-gnu (64-bit)
    ## Running under: Rocky Linux 9.5 (Blue Onyx)
    ##
    ## Matrix products: default
    ## BLAS:   /home/koki/miniconda3/lib/libblas.so.3.9.0
    ## LAPACK: /home/koki/miniconda3/lib/liblapack.so.3.9.0
    ##
    ## locale:
    ##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
    ##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C
    ##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
    ##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
    ##  [9] LC_ADDRESS=C               LC_TELEPHONE=C
    ## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
    ##
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base
    ##
    ## other attached packages:
    ## [1] mixOmics_6.10.9 ggplot2_3.3.5   lattice_0.20-45 MASS_7.3-58.3
    ## [5] iTensor_1.0.5
    ##
    ## loaded via a namespace (and not attached):
    ##  [1] tidyselect_1.1.1   xfun_0.38          bslib_0.3.1        purrr_0.3.4
    ##  [5] reshape2_1.4.4     splines_3.6.3      einsum_0.1.2       colorspace_2.1-0
    ##  [9] vctrs_0.3.8        generics_0.1.3     rTensor_1.4.8      htmltools_0.5.5
    ## [13] mgcv_1.8-42        yaml_2.3.7         utf8_1.2.3         rlang_0.4.11
    ## [17] jquerylib_0.1.4    pillar_1.7.0       withr_2.5.0        glue_1.8.0
    ## [21] DBI_1.1.3          RColorBrewer_1.1-3 matrixStats_0.58.0 lifecycle_1.0.1
    ## [25] plyr_1.8.8         stringr_1.4.0      munsell_0.5.0      gtable_0.3.0
    ## [29] evaluate_0.20      knitr_1.42         fastmap_1.1.1      parallel_3.6.3
    ## [33] fansi_1.0.4        highr_0.10         rARPACK_0.11-0     Rcpp_1.1.1
    ## [37] corpcor_1.6.10     geigen_2.3         scales_1.1.1       jsonlite_1.8.4
    ## [41] RSpectra_0.16-0    gridExtra_2.3      ellipse_0.5.0      digest_0.6.31
    ## [45] stringi_1.7.12     dplyr_1.0.6        grid_3.6.3         tools_3.6.3
    ## [49] magrittr_2.0.3     sass_0.4.0         tibble_3.1.2       jointDiag_0.4
    ## [53] crayon_1.5.2       tidyr_1.1.3        pkgconfig_2.0.3    ellipsis_0.3.2
    ## [57] Matrix_1.5-4       assertthat_0.2.1   rmarkdown_2.11     R6_2.5.1
    ## [61] nlme_3.1-162       igraph_1.4.2       compiler_3.6.3

# References

Akaho, S. et al. 1999. “MICA: Multimodal Independent Component Analysis.” IJCNN’99 2: 927–32.
Calhourn, V. D. et al. 2009. “A Review of Group ICA for fMRI Data and ICA for Joint Inference of Imaging, Genetic, and ERP Data.” Neuroimage 45(1 Suppl): S163–72.
Pfister, N. et al. 2018. “groupICA: Independent Component Analysis for Grouped Data.” arXiv.