Note
Go to the end to download the full example code. or to run this example in your browser via Binder
Default Mode Network extraction of ADHD dataset¶
This example shows a full step-by-step workflow of fitting a GLM to signal extracted from a seed on the Posterior Cingulate Cortex and saving the results. More precisely, this example shows how to use a signal extracted from a seed region as the regressor in a GLM to determine the correlation of each region in the dataset with the seed region.
More specifically:
A sequence of fMRI volumes are loaded.
A design matrix with the Posterior Cingulate Cortex seed is defined.
A GLM is applied to the dataset (effect/covariance, then contrast estimation).
The Default Mode Network is displayed.
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
import numpy as np
from nilearn import plotting
from nilearn.datasets import fetch_adhd
from nilearn.glm.first_level import (
FirstLevelModel,
make_first_level_design_matrix,
)
from nilearn.maskers import NiftiSpheresMasker
Prepare data and analysis parameters¶
Prepare the data.
adhd_dataset = fetch_adhd(n_subjects=1)
# Prepare timing
t_r = 2.0
slice_time_ref = 0.0
n_scans = 176
# Prepare seed
pcc_coords = (0, -53, 26)
[get_dataset_dir] Dataset found in /home/runner/nilearn_data/adhd
Extract the seed region’s time course¶
Extract the time course of the seed region.
seed_masker = NiftiSpheresMasker(
[pcc_coords],
radius=10,
detrend=True,
standardize="zscore_sample",
low_pass=0.1,
high_pass=0.01,
t_r=2.0,
memory="nilearn_cache",
memory_level=1,
verbose=0,
)
seed_time_series = seed_masker.fit_transform(adhd_dataset.func[0])
frametimes = np.linspace(0, (n_scans - 1) * t_r, n_scans)
Plot the time course of the seed region.
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(9, 3))
ax = fig.add_subplot(111)
ax.plot(frametimes, seed_time_series, linewidth=2, label="seed region")
ax.legend(loc=2)
ax.set_title("Time course of the seed region")
plt.show()

Estimate contrasts¶
Specify the contrasts.
design_matrix = make_first_level_design_matrix(
frametimes,
hrf_model="spm",
add_regs=seed_time_series,
add_reg_names=["pcc_seed"],
)
dmn_contrast = np.array([1] + [0] * (design_matrix.shape[1] - 1))
contrasts = {"seed_based_glm": dmn_contrast}
Perform first level analysis¶
Setup and fit GLM.
first_level_model = FirstLevelModel(t_r=t_r, slice_time_ref=slice_time_ref)
first_level_model = first_level_model.fit(
run_imgs=adhd_dataset.func[0], design_matrices=design_matrix
)
/home/runner/work/nilearn/nilearn/examples/04_glm_first_level/plot_adhd_dmn.py:97: UserWarning: Mean values of 0 observed. The data have probably been centered.Scaling might not work as expected
first_level_model = first_level_model.fit(
Estimate the contrast.
print("Contrast seed_based_glm computed.")
z_map = first_level_model.compute_contrast(
contrasts["seed_based_glm"], output_type="z_score"
)
Contrast seed_based_glm computed.
Saving snapshots of the contrasts
from pathlib import Path
display = plotting.plot_stat_map(
z_map, threshold=3.0, title="Seed based GLM", cut_coords=pcc_coords
)
display.add_markers(
marker_coords=[pcc_coords], marker_color="g", marker_size=300
)
output_dir = Path.cwd() / "results" / "plot_adhd_dmn"
output_dir.mkdir(exist_ok=True, parents=True)
filename = "dmn_z_map.png"
display.savefig(output_dir / filename)
print(f"Save z-map in '{filename}'.")

Save z-map in 'dmn_z_map.png'.
Generating a report¶
It can be useful to quickly generate a portable, ready-to-view report with most of the pertinent information. This is easy to do if you have a fitted model and the list of contrasts, which we do here.
report = first_level_model.generate_report(
contrasts=contrasts,
title="ADHD DMN Report",
cluster_threshold=15,
min_distance=8.0,
plot_type="glass",
)
We have several ways to access the report:
It can be viewed in a notebook
Or in a separate browser window report.open_in_browser()
Or we can save as an html file.
report.save_as_html(output_dir / "report.html")
Total running time of the script: (0 minutes 19.688 seconds)
Estimated memory usage: 882 MB