Computing a connectome with sparse inverse covariance

This example constructs a functional connectome using the sparse inverse covariance.

We use the MSDL atlas of functional regions in movie watching, and the NiftiMapsMasker to extract time series.

Note that the inverse covariance (or precision) contains values that can be linked to negated partial correlations, so we negated it for display.

As the MSDL atlas comes with (x, y, z) MNI coordinates for the different regions, we can visualize the matrix as a graph of interaction in a brain. To avoid having too dense a graph, we represent only the 20% edges with the highest values.

Note

If you are using Nilearn with a version older than 0.9.0, then you should either upgrade your version or import maskers from the input_data module instead of the maskers module.

That is, you should manually replace in the following example all occurrences of:

from nilearn.maskers import NiftiMasker

with:

from nilearn.input_data import NiftiMasker

Retrieve the atlas and the data

from nilearn.datasets import fetch_atlas_msdl, fetch_development_fmri

atlas = fetch_atlas_msdl()
# Loading atlas image stored in 'maps'
atlas_filename = atlas["maps"]
# Loading atlas data stored in 'labels'
labels = atlas["labels"]

# Loading the functional datasets
data = fetch_development_fmri(n_subjects=1)

# print basic information on the dataset
print(f"First subject functional nifti images (4D) are at: {data.func[0]}")
[fetch_atlas_msdl] Dataset found in /home/runner/nilearn_data/msdl_atlas
[fetch_development_fmri] Dataset found in
/home/runner/nilearn_data/development_fmri
[fetch_development_fmri] Dataset found in
/home/runner/nilearn_data/development_fmri/development_fmri
[fetch_development_fmri] Dataset found in
/home/runner/nilearn_data/development_fmri/development_fmri
First subject functional nifti images (4D) are at: /home/runner/nilearn_data/development_fmri/development_fmri/sub-pixar123_task-pixar_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz

Extract time series

from nilearn.maskers import NiftiMapsMasker

masker = NiftiMapsMasker(
    maps_img=atlas_filename,
    standardize="zscore_sample",
    standardize_confounds=True,
    memory="nilearn_cache",
    verbose=1,
)

time_series = masker.fit_transform(data.func[0], confounds=data.confounds)
[NiftiMapsMasker.wrapped] Loading regions from
'/home/runner/nilearn_data/msdl_atlas/MSDL_rois/msdl_rois.nii'
[NiftiMapsMasker.wrapped] Resampling regions
/home/runner/work/nilearn/nilearn/.tox/doc/lib/python3.9/site-packages/sklearn/utils/_set_output.py:273: UserWarning: memory_level is currently set to 0 but a Memory object has been provided. Setting memory_level to 1.
  data_to_wrap = f(self, X, *args, **kwargs)
[NiftiMapsMasker.wrapped] Finished fit
________________________________________________________________________________
[Memory] Calling nilearn.maskers.base_masker.filter_and_extract...
filter_and_extract('/home/runner/nilearn_data/development_fmri/development_fmri/sub-pixar123_task-pixar_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz',
<nilearn.maskers.nifti_maps_masker._ExtractionFunctor object at 0x7fd081bedb80>, { 'allow_overlap': True,
  'clean_args': None,
  'clean_kwargs': {},
  'cmap': 'CMRmap_r',
  'detrend': False,
  'dtype': None,
  'high_pass': None,
  'high_variance_confounds': False,
  'keep_masked_maps': True,
  'low_pass': None,
  'maps_img': '/home/runner/nilearn_data/msdl_atlas/MSDL_rois/msdl_rois.nii',
  'mask_img': None,
  'reports': True,
  'smoothing_fwhm': None,
  'standardize': 'zscore_sample',
  'standardize_confounds': True,
  't_r': None,
  'target_affine': None,
  'target_shape': None}, confounds=[ '/home/runner/nilearn_data/development_fmri/development_fmri/sub-pixar123_task-pixar_desc-reducedConfounds_regressors.tsv'], sample_mask=None, dtype=None, memory=Memory(location=nilearn_cache/joblib), memory_level=1, verbose=1)
[NiftiMapsMasker.wrapped] Loading data from
'/home/runner/nilearn_data/development_fmri/development_fmri/sub-pixar123_task-p
ixar_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz'
[NiftiMapsMasker.wrapped] Extracting region signals
[NiftiMapsMasker.wrapped] Cleaning extracted signals
_______________________________________________filter_and_extract - 1.3s, 0.0min

Compute the sparse inverse covariance

GraphicalLassoCV()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.


Display the connectome matrix

from nilearn.plotting import (
    plot_connectome,
    plot_matrix,
    show,
    view_connectome,
)

# Display the covariance

# The covariance can be found at estimator.covariance_
plot_matrix(
    estimator.covariance_,
    labels=labels,
    figure=(9, 7),
    vmax=1,
    vmin=-1,
    title="Covariance",
)
Covariance
<matplotlib.image.AxesImage object at 0x7fd081a8bd30>

And now display the corresponding graph

plot inverse covariance connectome
<nilearn.plotting.displays._projectors.OrthoProjector object at 0x7fd05e179160>

Display the sparse inverse covariance

we negate it to get partial correlations

plot_matrix(
    -estimator.precision_,
    labels=labels,
    figure=(9, 7),
    vmax=1,
    vmin=-1,
    title="Sparse inverse covariance",
)
Sparse inverse covariance
<matplotlib.image.AxesImage object at 0x7fd059fe0a30>

And now display the corresponding graph

plot_connectome(
    -estimator.precision_, coords, title="Sparse inverse covariance"
)

show()
plot inverse covariance connectome

3D visualization in a web browser

An alternative to plot_connectome is to use view_connectome that gives more interactive visualizations in a web browser. See 3D Plots of connectomes for more details.

view = view_connectome(-estimator.precision_, coords)

# In a Jupyter notebook, if ``view`` is the output of a cell, it will
# be displayed below the cell
view


# uncomment this to open the plot in a web browser:
# view.open_in_browser()

Total running time of the script: (0 minutes 14.712 seconds)

Estimated memory usage: 1283 MB

Gallery generated by Sphinx-Gallery