.. _extracting_rsn:
=====================================================
Extracting functional brain networks: ICA and related
=====================================================
.. topic:: **Page summary**
This page demonstrates the use of multi-subject decompositions models
to extract brain-networks from :term:`fMRI` data in a data-driven way.
Specifically, we will apply Independent Component Analysis (:term:`ICA`), which
implements a multivariate random effects model across subjects. We will
then compare :term:`ICA` to a newer technique, based on dictionary learning.
.. currentmodule:: nilearn.decomposition
Multi-subject ICA: CanICA
=========================
.. topic:: **References**
* A group model for stable multi-subject ICA on fMRI datasets :footcite:p:`Varoquaux2010c`
Objective
----------
:term:`ICA` is a useful approach for finding independent sources from :term:`fMRI`
images. :term:`ICA` and similar techniques can be therefore used to define
regions or networks that share similar :term:`BOLD` signal across time. The
:term:`CanICA` incorporates information both within-subjects and across subjects
to arrive at consensus components.
.. topic:: **Nilearn data for examples**
Nilearn provides easy-to-analyze data to explore :term:`functional connectivity`
and resting: the `brain development dataset `_,
which has been preprocessed using `FMRIPrep and Nilearn `_
We use nilearn functions to fetch data from Internet and get the
filenames (:ref:`more on data loading `).
Fitting CanICA model with nilearn
---------------------------------
:class:`CanICA` is a ready-to-use object that can be applied to
multi-subject Nifti data, for instance presented as filenames, and will
perform a multi-subject :term:`ICA` decomposition following the :term:`CanICA` model.
As with every object in nilearn, we give its parameters at construction,
and then fit it on the data. For examples of this process, see
here: :ref:`sphx_glr_auto_examples_03_connectivity_plot_compare_decomposition.py`
Once an :term:`ICA` object has been fit to an :term:`fMRI` dataset, the individual
components can be accessed as a 4D Nifti object using the
``components_img_`` attribute.
Visualizing results
--------------------
We can visualize each component outlined over the brain:
.. figure:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_001.png
:align: center
:target: ../auto_examples/03_connectivity/plot_compare_decomposition.html
We can also plot the map for different components separately:
.. |ic1| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_002.png
:width: 23%
.. |ic2| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_003.png
:width: 23%
.. |ic3| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_004.png
:width: 23%
.. |ic4| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_005.png
:width: 23%
.. centered:: |ic1| |ic2| |ic3| |ic4|
.. seealso::
The full code can be found as an example:
:ref:`sphx_glr_auto_examples_03_connectivity_plot_compare_decomposition.py`
.. note::
Note that as the :term:`ICA` components are not ordered, the two components
displayed on your computer might not match those of the documentation. For
a fair representation, you should display all components and
investigate which one resemble those displayed above.
Interpreting such components
-----------------------------
:term:`ICA`, and related algorithms, extract patterns that coactivate in the
signal. As a result, it finds functional networks, but also patterns of
non neural activity, ie confounding signals. Both are visible in the
plots of the components.
An alternative to :term:`ICA`: :term:`Dictionary learning`
==========================================================
Recent work has shown that :term:`Dictionary learning` based techniques
outperform :term:`ICA` in term of stability and constitutes a better first
step in a statistical analysis pipeline.
:term:`Dictionary learning` in neuro-imaging seeks to extract a few
representative temporal elements along with their sparse spatial loadings,
which constitute good extracted maps.
.. topic:: **References**
* Compressed online dictionary learning
for fast resting-state fMRI decomposition :footcite:p:`Mensch2016`
:class:`DictLearning` is a ready-to-use class with the same interface as
:class:`CanICA`. Sparsity of output map is controlled by a parameter alpha: using
a larger alpha yields sparser maps.
We can fit both estimators to compare them. 4D plotting (using
:func:`nilearn.plotting.plot_prob_atlas`) offers an efficient way to
compare both resulting outputs.
.. figure:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_022.png
:target: ../auto_examples/03_connectivity/plot_compare_decomposition.html
:align: center
.. figure:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_001.png
:target: ../auto_examples/03_connectivity/plot_compare_decomposition.html
:align: center
Maps obtained with :term:`Dictionary learning` are often easier to exploit as they are
more contrasted than :term:`ICA` maps, with blobs usually better defined. Typically,
*smoothing can be lower than when doing ICA*.
.. |dl1| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_023.png
:width: 23%
.. |dl2| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_024.png
:width: 23%
.. |dl3| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_025.png
:width: 23%
.. |dl4| image:: ../auto_examples/03_connectivity/images/sphx_glr_plot_compare_decomposition_026.png
:width: 23%
.. centered:: |dl1| |dl2| |dl3| |dl4|
While :term:`Dictionary learning` computation time is comparable to
:term:`CanICA`, obtained atlases have been shown to outperform :term:`ICA`
in a variety of classification tasks.
.. seealso::
The full code can be found as an example:
:ref:`sphx_glr_auto_examples_03_connectivity_plot_compare_decomposition.py`
.. seealso::
Learn how to extract :term:`fMRI` data from regions created with
:term:`Dictionary learning` with this example:
:ref:`sphx_glr_auto_examples_03_connectivity_plot_extract_regions_dictlearning_maps.py`
References
----------
.. footbibliography::