.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/07_advanced/plot_localizer_mass_univariate_methods.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_07_advanced_plot_localizer_mass_univariate_methods.py: Massively univariate analysis of a motor task from the Localizer dataset ======================================================================== This example compares results obtained with a massively univariate analysis (:func:`~nilearn.mass_univariate.permuted_ols`) after two permutation test correction methods: Max :term:`t-statistic ` Family-wise Error (:term:`FWE `) and Max :term:`TFCE` :term:`FWE `. These two methods are compared against a baseline parametric test (Bonferroni :term:`FWE `). The example is structured as follows: 1. First, an `ANOVA `_ is performed for feature selection and to generate the baseline model. Here, the effect of each regressor is evaluated sequentially. 2. Next, we use a permuted Ordinary Least Squares (:sklearn:`OLS `) analysis, run at each :term:`voxel` with :func:`~nilearn.mass_univariate.permuted_ols`. This model explicitly tests whether or not a voxel responds differently under different conditions of a visual task. We use the ``left button press (auditory cue)`` task contrast maps from the Localizer dataset (:func:`~nilearn.datasets.fetch_localizer_contrasts`). This dataset includes external, behavioral variates (``ext_vars``); we therefore evaluate the association between a behavioral variate that measures the speed of pseudo-word reading (``pseudo``) and the :term:`contrast` map values, at every :term:`voxel`. .. GENERATED FROM PYTHON SOURCE LINES 39-47 Load Localizer contrast ----------------------- First, we fetch all ``left button press (auditory cue)`` contrast maps and associated ``pseudo`` behavioral variates from the :func:`~nilearn.datasets.fetch_localizer_contrasts` data fetcher. .. GENERATED FROM PYTHON SOURCE LINES 47-55 .. code-block:: Python import numpy as np from nilearn import datasets localizer_dataset = datasets.fetch_localizer_contrasts( ["left button press (auditory cue)"] ) .. rst-class:: sphx-glr-script-out .. code-block:: none [fetch_localizer_contrasts] Dataset directory found: /home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer .. GENERATED FROM PYTHON SOURCE LINES 56-61 .. code-block:: Python behav_var = localizer_dataset.ext_vars["pseudo"].values # Examine the behavioral variate print(behav_var) .. rst-class:: sphx-glr-script-out .. code-block:: none [15. 16. 14. 19. 16. 18. 22. 19. 17. 15. 10. 21. 17. 21. nan 14. 22. 17. 23. 15. 15. 18. 17. 18. 20. 27. 18. 16. 18. 17. 19. 22. 15. 16. 21. 20. 12. nan 19. 19. 16. 22. 23. 14. 24. 22. 20. 25. 23. 15. 12. 16. 20. 18. 14. 14. 18. 20. 19. 14. 27. nan 13. 17. 19. 19. 14. 17. 15. 15. 14. 20. 16. 15. 15. 15. 19. 17. 14. 15. nan 20. 15. 17. 18. 17.5 nan 15. 23. 12. 16. 13. 25. 21. ] .. GENERATED FROM PYTHON SOURCE LINES 62-66 Remove subjects without behavioral variate `````````````````````````````````````````` We see that some subjects do not have scores for this behavioral variate. We therefore need to remove them from our analyses. .. GENERATED FROM PYTHON SOURCE LINES 66-71 .. code-block:: Python quality_mask = np.isfinite(behav_var) n_samples = np.sum(quality_mask) print(f"Actual number of subjects after quality check: {int(n_samples)}") .. rst-class:: sphx-glr-script-out .. code-block:: none Actual number of subjects after quality check: 89 .. GENERATED FROM PYTHON SOURCE LINES 72-76 We cast list of ``cmaps`` to numpy array for Boolean masking with ``quality_mask``. Similarly, we subset ``behav_var`` with ``quality_mask`` and then reshape from shape (n_samples,) to shape (n_samples, 1). .. GENERATED FROM PYTHON SOURCE LINES 76-79 .. code-block:: Python contrast_map_filenames = np.array(localizer_dataset.cmaps)[quality_mask] tested_var = behav_var[quality_mask].reshape((-1, 1)) .. GENERATED FROM PYTHON SOURCE LINES 80-94 Extract :term:`voxelwise ` data -------------------------------------- Next, we use a :func:`~nilearn.maskers.NiftiMasker` to extract voxelwise values for the ``left button press (auditory cue)`` task :term:`contrast` map for each subject who passed quality control. We also apply a light processing on this data, including smoothing with a 5mm :term:`FWHM` kernel. Note that we use a :func:`~nilearn.maskers.NiftiMasker` object rather than a :func:`~nilearn.maskers.MultiNiftiMasker` object in order to extract all :term:`voxel` values for all subjects into the same array. .. GENERATED FROM PYTHON SOURCE LINES 94-105 .. code-block:: Python from nilearn.maskers import NiftiMasker nifti_masker = NiftiMasker( smoothing_fwhm=5, memory="nilearn_cache", memory_level=1, verbose=1, ) fmri_masked = nifti_masker.fit_transform(contrast_map_filenames) .. rst-class:: sphx-glr-script-out .. code-block:: none [NiftiMasker.wrapped] Loading data from array(['/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S01/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S02/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S03/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S04/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S05/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S06/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S07/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S08/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S09/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S10/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S11/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S12/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S13/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S14/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S16/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S17/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S18/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S19/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S20/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S21/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S22/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S23/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S24/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S25/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S26/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S27/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S28/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S29/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S30/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S31/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S32/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S33/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S34/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S35/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S36/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S37/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S39/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S40/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S41/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S42/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S43/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S44/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S45/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S46/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S47/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S48/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S49/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S50/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S51/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S52/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S53/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S54/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S55/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S56/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S57/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S58/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S59/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S60/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S61/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S63/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S64/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S65/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S66/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S67/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S68/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S69/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S70/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S71/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S72/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S73/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S74/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S75/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S76/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S77/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S78/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S79/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S80/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S82/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S83/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S84/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S85/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S86/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S88/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S89/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S90/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S91/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S92/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S93/cmaps_LeftAuditoryClick.nii.gz', '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S94/cmaps_LeftAuditoryClick.nii.gz'], dtype=', target_affine=None, target_shape=None, copy=False, interpolation='nearest') _____________________________________________________resample_img - 0.0s, 0.0min [NiftiMasker.wrapped] Finished fit /home/runner/work/nilearn/nilearn/examples/07_advanced/plot_localizer_mass_univariate_methods.py:102: FutureWarning: boolean values for 'standardize' will be deprecated in nilearn 0.15.0. Use 'zscore_sample' instead of 'True' or use 'None' instead of 'False'. ________________________________________________________________________________ [Memory] Calling nilearn.maskers.nifti_masker.filter_and_mask... filter_and_mask(array(['/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S01/cmaps_LeftAuditoryClick.nii.gz', ..., '/home/runner/work/nilearn/nilearn/nilearn_data/brainomics_localizer/brainomics_data/S94/cmaps_LeftAuditoryClick.nii.gz'], dtype=', { 'clean_args': None, 'clean_kwargs': {}, 'cmap': 'gray', 'detrend': False, 'dtype': None, 'high_pass': None, 'high_variance_confounds': False, 'low_pass': None, 'reports': True, 'runs': None, 'smoothing_fwhm': 5, 'standardize': False, 'standardize_confounds': True, 't_r': None, 'target_affine': None, 'target_shape': None}, memory_level=1, memory=Memory(location=nilearn_cache/joblib), verbose=1, confounds=None, sample_mask=None, copy=True, sklearn_output_config=None) [NiftiMasker.wrapped] Loading data from [NiftiMasker.wrapped] Smoothing images [NiftiMasker.wrapped] Extracting region signals [NiftiMasker.wrapped] Cleaning extracted signals __________________________________________________filter_and_mask - 1.0s, 0.0min .. GENERATED FROM PYTHON SOURCE LINES 106-118 :term:`ANOVA` (parametric F-scores) ----------------------------------- We use :func:`sklearn.feature_selection.f_regression` to perform :sklearn:`feature selection ` at every :term:`voxel` and keep only those most related to the behavioral variate, as assessed via a simple F-score. Assuming that no such effect exists, the F-test follows a `Fisher distribution `_, which yields voxelwise p-values that can be used to assert significance. .. GENERATED FROM PYTHON SOURCE LINES 118-122 .. code-block:: Python from sklearn.feature_selection import f_regression _, pvals_anova = f_regression(fmri_masked, tested_var.ravel(), center=True) .. GENERATED FROM PYTHON SOURCE LINES 123-126 Calculate the negative log of the p-values for equivalent visualization with :func:`~nilearn.mass_univariate.permuted_ols`. .. GENERATED FROM PYTHON SOURCE LINES 126-134 .. code-block:: Python pvals_anova *= fmri_masked.shape[1] pvals_anova[np.isnan(pvals_anova)] = 1 pvals_anova[pvals_anova > 1] = 1 neg_log_pvals_anova = -np.log10(pvals_anova) neg_log_pvals_anova_unmasked = nifti_masker.inverse_transform( neg_log_pvals_anova ) .. rst-class:: sphx-glr-script-out .. code-block:: none [NiftiMasker.inverse_transform] Computing image from signals ________________________________________________________________________________ [Memory] Calling nilearn.masking.unmask... unmask(array([-0., ..., -0.]), ) ___________________________________________________________unmask - 0.0s, 0.0min .. GENERATED FROM PYTHON SOURCE LINES 135-148 Perform massively univariate analysis with permuted OLS ------------------------------------------------------- This method will produce both voxel-level Family-wise Error (:term:`FWE `) corrected negative-log p-values and :term:`TFCE`-based :term:`FWE `-corrected negative-log p-values. .. note:: :func:`~nilearn.mass_univariate.permuted_ols` can support a wide range of analysis designs, depending on the numerical labels in ``tested_var``. For example, if you wished to perform a one-sample test, you could simply provide an array of ones (e.g., ``np.ones(n_samples)``). .. GENERATED FROM PYTHON SOURCE LINES 148-162 .. code-block:: Python from nilearn.mass_univariate import permuted_ols ols_outputs = permuted_ols( tested_var, # this is equivalent to the design matrix, in array form fmri_masked, model_intercept=True, masker=nifti_masker, tfce=True, n_perm=100, # 100 for the sake of time. Ideally, this should be 10000. verbose=1, # display progress bar random_state=0, # to ensure reproducible results n_jobs=2, # can be changed to use more CPUs ) .. rst-class:: sphx-glr-script-out .. code-block:: none [NiftiMasker.inverse_transform] Computing image from signals ________________________________________________________________________________ [Memory] Calling nilearn.masking.unmask... unmask(array([[ 1.604273, ..., -0.864518]]), ) ___________________________________________________________unmask - 0.0s, 0.0min [Parallel(n_jobs=2)]: Using backend LokyBackend with 2 concurrent workers. [Parallel(n_jobs=2)]: Done 2 out of 2 | elapsed: 25.9s remaining: 0.0s [Parallel(n_jobs=2)]: Done 2 out of 2 | elapsed: 25.9s finished .. GENERATED FROM PYTHON SOURCE LINES 163-168 We select the first regressor from max :term:`t-statistic ` and assign to the variable ``neg_log_pvals_permuted_ols_unmasked`` ; then we perform the same procedure for the :term:`TFCE` corrected outputs, assigning to the first regressor to ``neg_log_pvals_tfce_unmasked``. .. GENERATED FROM PYTHON SOURCE LINES 168-175 .. code-block:: Python neg_log_pvals_permuted_ols_unmasked = nifti_masker.inverse_transform( ols_outputs["logp_max_t"][0, :] ) neg_log_pvals_tfce_unmasked = nifti_masker.inverse_transform( ols_outputs["logp_max_tfce"][0, :] ) .. rst-class:: sphx-glr-script-out .. code-block:: none [NiftiMasker.inverse_transform] Computing image from signals ________________________________________________________________________________ [Memory] Calling nilearn.masking.unmask... unmask(array([-0., ..., -0.]), ) ___________________________________________________________unmask - 0.0s, 0.0min [NiftiMasker.inverse_transform] Computing image from signals ________________________________________________________________________________ [Memory] Calling nilearn.masking.unmask... unmask(array([ 0.004321, ..., -0. ]), ) ___________________________________________________________unmask - 0.0s, 0.0min .. GENERATED FROM PYTHON SOURCE LINES 176-185 Visualization ------------- Since we are plotting negative log p-values and using a threshold equal to 1, it corresponds to corrected p-values lower than 10%, meaning that there is less than 10% probability to make a single false discovery (i.e., a 90% chance that we make no false discovery at all). .. GENERATED FROM PYTHON SOURCE LINES 185-234 .. code-block:: Python import matplotlib.pyplot as plt from nilearn import plotting from nilearn.image import get_data threshold = -np.log10(0.1) # 10% corrected # Calculate the maximum value across all three model variants. vmax = max( np.amax(ols_outputs["logp_max_t"]), np.amax(neg_log_pvals_anova), np.amax(ols_outputs["logp_max_tfce"]), ) images_to_plot = { "Parametric Test\n(Bonferroni FWE)": neg_log_pvals_anova_unmasked, "Permutation Test\n(Max t-statistic FWE)": ( neg_log_pvals_permuted_ols_unmasked ), "Permutation Test\n(Max TFCE FWE)": neg_log_pvals_tfce_unmasked, } fig, axes = plt.subplots(figsize=(15, 5), ncols=3) for i_col, (title, img) in enumerate(images_to_plot.items()): ax = axes[i_col] n_detections = (get_data(img) > threshold).sum() new_title = f"{title}\n{n_detections} sig. voxels" plotting.plot_glass_brain( img, vmax=vmax, display_mode="z", threshold=threshold, vmin=threshold, cmap="inferno", figure=fig, axes=ax, ) ax.set_title(new_title, pad=10.0) fig.suptitle( "Group left button press ($-\\log_{10}$ p-values)", y=1, fontsize=16, ) fig.subplots_adjust(top=0.75, wspace=0.8) plotting.show() .. image-sg:: /auto_examples/07_advanced/images/sphx_glr_plot_localizer_mass_univariate_methods_001.png :alt: Group left button press ($-\log_{10}$ p-values), Parametric Test (Bonferroni FWE) 3 sig. voxels, Permutation Test (Max t-statistic FWE) 7 sig. voxels, Permutation Test (Max TFCE FWE) 748 sig. voxels :srcset: /auto_examples/07_advanced/images/sphx_glr_plot_localizer_mass_univariate_methods_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 35.209 seconds) **Estimated memory usage:** 343 MB .. _sphx_glr_download_auto_examples_07_advanced_plot_localizer_mass_univariate_methods.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/nilearn/nilearn/0.14.1?urlpath=lab/tree/notebooks/auto_examples/07_advanced/plot_localizer_mass_univariate_methods.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_localizer_mass_univariate_methods.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_localizer_mass_univariate_methods.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_localizer_mass_univariate_methods.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_