Note
Go to the end to download the full example code or to run this example in your browser via Binder.
Decoding of a dataset after GLM fit for signal extraction¶
Full step-by-step example of fitting a GLM to perform a decoding experiment. In this decoding analysis, we will be doing a one-vs-all classification. We use the data from one subject of the Haxby dataset.
More specifically:
Download the Haxby dataset.
Extract the information to generate a glm representing the blocks of stimuli.
Analyze the decoding performance using a classifier.
Fetch example Haxby dataset¶
We download the Haxby dataset This is a study of visual object category representation
# By default 2nd subject will be fetched
import numpy as np
import pandas as pd
from nilearn.datasets import fetch_haxby
haxby_dataset = fetch_haxby()
[fetch_haxby] Dataset found in /home/runner/nilearn_data/haxby2001
Load the behavioral data¶
# Load target information as string and give a numerical identifier to each
behavioral = pd.read_csv(haxby_dataset.session_target[0], sep=" ")
conditions = behavioral["labels"].to_numpy()
# Record these as an array of runs
runs = behavioral["chunks"].to_numpy()
unique_runs = behavioral["chunks"].unique()
# fMRI data: a unique file for each run
func_filename = haxby_dataset.func[0]
Build a proper event structure for each run¶
events = {}
# events will take the form of a dictionary of Dataframes, one per run
for run in unique_runs:
# get the condition label per run
conditions_run = conditions[runs == run]
# get the number of scans per run, then the corresponding
# vector of frame times
n_scans = len(conditions_run)
frame_times = haxby_dataset.t_r * np.arange(n_scans)
# each event last the full TR
duration = haxby_dataset.t_r * np.ones(n_scans)
# Define the events object
events_ = pd.DataFrame(
{
"onset": frame_times,
"trial_type": conditions_run,
"duration": duration,
}
)
# remove the rest condition and insert into the dictionary
events[run] = events_[events_.trial_type != "rest"]
Instantiate and run FirstLevelModel¶
We generate a list of z-maps together with their run and condition index
z_maps = []
conditions_label = []
run_label = []
# Instantiate the glm
from nilearn.glm.first_level import FirstLevelModel
glm = FirstLevelModel(
t_r=haxby_dataset.t_r,
mask_img=haxby_dataset.mask,
high_pass=0.008,
smoothing_fwhm=4,
memory="nilearn_cache",
memory_level=1,
verbose=1,
)
Run the GLM on data from each run¶
events[run].trial_type.unique()
from nilearn.image import index_img
for run in unique_runs:
# grab the fmri data for that particular run
fmri_run = index_img(func_filename, runs == run)
# fit the GLM
glm.fit(fmri_run, events=events[run])
# set up contrasts: one per condition
conditions = events[run].trial_type.unique()
for condition_ in conditions:
z_maps.append(glm.compute_contrast(condition_))
conditions_label.append(condition_)
run_label.append(run)
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f18778f70>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f18778f70>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-0.114769, ..., -2.149296],
...,
[ 2.367151, ..., 0.779998]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 1.1s, 0.0min
[FirstLevelModel.fit] GLM took 1 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 2 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cd16e90>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cd16e90>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[ 12.660587, ..., -13.536042],
...,
[ -3.254408, ..., -33.842804]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a35e0>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a35e0>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[ 5.205584, ..., 26.587189],
...,
[-6.836576, ..., 10.676956]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cba39d0>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cba39d0>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-2.026206, ..., 5.974948],
...,
[ 2.616334, ..., 0.104535]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1960>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1960>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[ 53.033577, ..., -55.45955 ],
...,
[-51.57195 , ..., -55.994713]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cba37f0>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cba37f0>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-27.150482, ..., -5.81308 ],
...,
[-30.204891, ..., 7.417917]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1570>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1570>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[129.51173 , ..., -15.279282],
...,
[-18.911755, ..., 21.839058]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cba0fa0>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cba0fa0>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-15.915996, ..., 22.07737 ],
...,
[-16.981215, ..., 3.372383]], shape=(121, 39912), dtype=float32),
array([[ 0. , ..., 1. ],
...,
[-0.352245, ..., 1. ]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1c90>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1c90>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-0.292987, ..., 18.392956],
...,
[-3.935719, ..., 0.602484]], shape=(121, 39912), dtype=float32),
array([[ 0. , ..., 1. ],
...,
[-0.352245, ..., 1. ]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f40850580>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f40850580>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-5.223948, ..., -5.959582],
...,
[-7.677519, ..., 16.024363]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1c30>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1c9a1c30>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-19.66533 , ..., -6.299562],
...,
[-24.647343, ..., 2.331865]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cc3ebc0>
[FirstLevelModel.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
[FirstLevelModel.fit] Resampling mask
[FirstLevelModel.fit] Finished fit
[FirstLevelModel.fit] Computing run 1 out of 1 runs (go take a coffee, a big
one).
[FirstLevelModel.fit] Performing mask computation.
[FirstLevelModel.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f1cc3ebc0>
[FirstLevelModel.fit] Smoothing images
[FirstLevelModel.fit] Extracting region signals
[FirstLevelModel.fit] Cleaning extracted signals
[FirstLevelModel.fit] Masking took 0 seconds.
[FirstLevelModel.fit] Performing GLM computation.
________________________________________________________________________________
[Memory] Calling nilearn.glm.first_level.first_level.run_glm...
run_glm(array([[-1.095605, ..., 16.449202],
...,
[ 2.59974 , ..., -2.179998]], shape=(121, 39912), dtype=float32),
array([[0., ..., 1.],
...,
[0., ..., 1.]], shape=(121, 13)), noise_model='ar1', bins=100, n_jobs=1, random_state=None)
__________________________________________________________run_glm - 0.9s, 0.0min
[FirstLevelModel.fit] GLM took 0 seconds.
[FirstLevelModel.fit] Computation of 1 runs done in 1 seconds.
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
[FirstLevelModel.compute_contrast] Computing image from signals
Generating a report¶
Since we have already computed the FirstLevelModel and have the contrast, we can quickly create a summary report.
from nilearn.image import mean_img
mean_img_ = mean_img(func_filename)
report = glm.generate_report(
contrasts=conditions,
bg_img=mean_img_,
)
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Computing image from signals
[FirstLevelModel.generate_report] Generating contrast-level figures...
[FirstLevelModel.generate_report] Generating design matrices figures...
[FirstLevelModel.generate_report] Generating contrast matrices figures...
Note
The generated report can be:
displayed in a Notebook,
opened in a browser using the
.open_in_browser()method,or saved to a file using the
.save_as_html(output_filepath)method.
Build the decoding pipeline¶
To define the decoding pipeline we use Decoder object, we choose :
a prediction model, here a Support Vector Classifier, with a linear kernel
the mask to use, here a ventral temporal ROI in the visual cortex
although it usually helps to decode better, z-maps time series don’t need to be rescaled to a 0 mean, variance of 1 so we use standardize=False.
we use univariate feature selection to reduce the dimension of the problem keeping only 5% of voxels which are most informative.
a cross-validation scheme, here we use LeaveOneGroupOut cross-validation on the runs which corresponds to a leave-one-run-out
We fit directly this pipeline on the Niimgs outputs of the GLM, with corresponding conditions labels and run labels (for the cross validation).
from sklearn.model_selection import LeaveOneGroupOut
from nilearn.decoding import Decoder
decoder = Decoder(
estimator="svc",
mask=haxby_dataset.mask,
standardize=False,
screening_percentile=5,
cv=LeaveOneGroupOut(),
verbose=1,
)
decoder.fit(z_maps, conditions_label, groups=run_label)
# Return the corresponding mean prediction accuracy compared to chance
# for classifying one-vs-all items.
classification_accuracy = np.mean(list(decoder.cv_scores_.values()))
chance_level = 1.0 / len(np.unique(conditions))
print(
f"Classification accuracy: {classification_accuracy:.4f} / "
f"Chance level: {chance_level}"
)
[Decoder.fit] Loading data from [<nibabel.nifti1.Nifti1Image object at
0x7f7f1cf31480>, <nibabel.nifti1.Nifti1Image object at 0x7f7f1ca66b30>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba36a0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba3b50>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba20e0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba0460>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba07c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1877b8b0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a2830>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a2d70>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a2ce0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02a950>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02b3d0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02a770>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02ae60>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029750>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f18779360>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba00a0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cf310c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba3520>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cf32710>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cd14940>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40853e80>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850340>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a31f0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a36d0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a10c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a3430>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029900>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028ca0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028c70>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029c60>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba04c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba2320>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850430>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850550>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850b80>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40851e40>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850ca0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408523e0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cf32290>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a0520>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cf307f0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cd14c10>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02a710>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02bc40>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029bd0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029780>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba00d0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cba0400>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850700>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40852ce0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408537c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40851cf0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40852da0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40853460>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a29e0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a3880>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40852560>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408535b0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40853760>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408520e0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408539a0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408512d0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408505e0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40851300>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40851b70>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40850dc0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40852110>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40851150>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f40851f90>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f408518d0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a1f90>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a1c90>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f0285b0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028be0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028280>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029450>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f0293c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029690>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cc3ea70>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cc3c1c0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cc3d180>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cc3e800>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f0291e0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f0282b0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028310>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02b970>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1c9a3ee0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f1cd16e90>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02b8b0>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028580>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f02a080>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028a90>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f029030>,
<nibabel.nifti1.Nifti1Image object at 0x7f7f3f028070>]
[Decoder.fit] Loading mask from
'/home/runner/nilearn_data/haxby2001/mask.nii.gz'
/home/runner/work/nilearn/nilearn/examples/02_decoding/plot_haxby_glm_decoding.py:174: UserWarning: [NiftiMasker.fit] Generation of a mask has been requested (imgs != None) while a mask was given at masker creation. Given mask will be used.
decoder.fit(z_maps, conditions_label, groups=run_label)
[Decoder.fit] Resampling mask
[Decoder.fit] Finished fit
[Decoder.fit] Loading data from <nibabel.nifti1.Nifti1Image object at
0x7f7f244c1540>
[Decoder.fit] Extracting region signals
[Decoder.fit] Cleaning extracted signals
[Decoder.fit] Mask volume = 1.96442e+06mm^3 = 1964.42cm^3
[Decoder.fit] Standard brain volume = 1.88299e+06mm^3
[Decoder.fit] Original screening-percentile: 5
[Decoder.fit] Corrected screening-percentile: 4.79274
[Parallel(n_jobs=1)]: Done 40 tasks | elapsed: 2.4s
[Parallel(n_jobs=1)]: Done 96 out of 96 | elapsed: 5.7s finished
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
[Decoder.fit] Computing image from signals
Classification accuracy: 0.7589 / Chance level: 0.125
Total running time of the script: (2 minutes 11.901 seconds)
Estimated memory usage: 1008 MB