Image-based meta-analysis algorithms

A tour of IBMA algorithms in NiMARE.

This tutorial is intended to provide a brief description and example of each of the IBMA algorithms implemented in NiMARE. For a more detailed introduction to the elements of an image-based meta-analysis, see other stuff.

from nilearn.plotting import plot_stat_map

Download data

Note

The data used in this example come from a collection of NIDM-Results packs downloaded from Neurovault collection 1425, uploaded by Dr. Camille Maumet.

from nimare.extract import download_nidm_pain

dset_dir = download_nidm_pain()

Load Studyset

import os
from pprint import pprint

from nimare.nimads import Studyset
from nimare.transforms import ImageTransformer
from nimare.utils import get_resource_path

studyset_file = os.path.join(get_resource_path(), "nidm_pain_studyset.json")
studyset = Studyset(studyset_file, target="mni152_2mm")
studyset.update_path(dset_dir)

# Calculate missing images
xformer = ImageTransformer(target=["varcope", "z"])
studyset = xformer.transform(studyset)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:355: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  se = masker.transform(available_data["se"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/transforms.py:310: UserWarning: imgs are being resampled to the mask_img resolution. This process is memory intensive. You might want to provide a target_affine that is equal to the affine of the imgs or resample the mask beforehand to save memory and computation time.
  t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/latest/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
  infinity_norm = max(-data.min(), data.max())

Stouffer’s

from nimare.meta.ibma import Stouffers

meta = Stouffers(use_sample_size=False)
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}) on 21 z-statistic images using the '
 'Stouffer method \\citep{stouffer1949american}.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{stouffer1949american,\n'
 '  title={The american soldier: Adjustment during army life.(studies in '
 'social psychology in world war ii), vol. 1},\n'
 '  author={Stouffer, Samuel A and Suchman, Edward A and DeVinney, Leland C '
 'and Star, Shirley A and Williams Jr, Robin M},\n'
 '  journal={Studies in social psychology in World War II},\n'
 '  year={1949},\n'
 '  publisher={Princeton Univ. Press}\n'
 '}')

Stouffer’s with weighting by sample size

meta = Stouffers(use_sample_size=True)
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}) on 21 z-statistic images using the '
 'Stouffer method \\citep{stouffer1949american}, with studies weighted by the '
 'square root of the study sample sizes, per \\cite{zaykin2011optimally}.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{stouffer1949american,\n'
 '  title={The american soldier: Adjustment during army life.(studies in '
 'social psychology in world war ii), vol. 1},\n'
 '  author={Stouffer, Samuel A and Suchman, Edward A and DeVinney, Leland C '
 'and Star, Shirley A and Williams Jr, Robin M},\n'
 '  journal={Studies in social psychology in World War II},\n'
 '  year={1949},\n'
 '  publisher={Princeton Univ. Press}\n'
 '}\n'
 '@article{zaykin2011optimally,\n'
 '  title={Optimally weighted Z-test is a powerful method for combining '
 'probabilities in meta-analysis},\n'
 '  author={Zaykin, Dmitri V},\n'
 '  journal={Journal of evolutionary biology},\n'
 '  volume={24},\n'
 '  number={8},\n'
 '  pages={1836--1841},\n'
 '  year={2011},\n'
 '  publisher={Wiley Online Library},\n'
 '  url={https://doi.org/10.1111/j.1420-9101.2011.02297.x},\n'
 '  doi={10.1111/j.1420-9101.2011.02297.x}\n'
 '}')

Fisher’s

from nimare.meta.ibma import Fishers

meta = Fishers()
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}) on 21 z-statistic images using the '
 'Fisher combined probability method \\citep{fisher1946statistical}.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{fisher1946statistical,\n'
 '  title={Statistical methods for research workers.},\n'
 '  author={Fisher, Ronald Aylmer and others},\n'
 '  journal={Statistical methods for research workers.},\n'
 '  number={10th. ed.},\n'
 '  year={1946},\n'
 '  publisher={Oliver and Boyd}\n'
 '}')

Fisher’s with weighting by sample size

Each study receives a weighted-Fisher coefficient equal to its sample size. Note that this is a different weighting family from Stouffer’s use_sample_size, which uses the square root of the sample size.

meta = Fishers(use_sample_size=True)
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}) on 21 z-statistic images using the '
 'Fisher combined probability method \\citep{fisher1946statistical}. Studies '
 'received weighted-Fisher coefficients equal to sample size.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{fisher1946statistical,\n'
 '  title={Statistical methods for research workers.},\n'
 '  author={Fisher, Ronald Aylmer and others},\n'
 '  journal={Statistical methods for research workers.},\n'
 '  number={10th. ed.},\n'
 '  year={1946},\n'
 '  publisher={Oliver and Boyd}\n'
 '}')

Images that share participants

Two maps from the same participants are not two independent pieces of evidence, but every estimator above would count them as such unless told otherwise. The groupby parameter says which images belong together: by default, those from the same study.

Every study in this studyset contributed exactly one image, so the default grouping changes nothing here – the dof map counts one degree of freedom per study, minus one.

import numpy as np

meta = Stouffers()
results = meta.fit(studyset)
n_images = len(meta.inputs_["id"])
dof = results.get_map("dof", return_type="array")
print(f"{n_images} images, {np.nanmax(dof):.0f} degrees of freedom")
21 images, 20 degrees of freedom

A real studyset usually does repeat: one paper uploads several contrasts, or the same participants appear under two task conditions. To see what that costs, pretend the first six images came from three studies of two maps each by passing the labels directly. groupby accepts one label per image, in the order the estimator collected them.

labels = [f"pretend-study-{i // 2}" for i in range(6)]
labels += list(meta.inputs_["id"][6:])

grouped = Stouffers(groupby=labels).fit(studyset)
grouped_dof = grouped.get_map("dof", return_type="array")
print(f"after grouping: {np.nanmax(grouped_dof):.0f} degrees of freedom")

plot_stat_map(
    grouped.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)
02 plot ibma
after grouping: 17 degrees of freedom

<nilearn.plotting.displays._slicers.OrthoSlicer object at 0x798712f33930>

Grouping does two things. It stops a prolific study from outvoting its peers, because each group contributes one variance-standardized statistic rather than one per map. And it corrects the reference distribution for the correlation between the grouped maps, which NiMARE estimates from the maps themselves after removing the shared signal.

Pass groupby=False to opt out and treat every image as independent. That inflates significance whenever images really do share participants, so NiMARE warns when the grouping it resolved would have found a repeat.

Permuted OLS

from nimare.correct import FWECorrector
from nimare.meta.ibma import PermutedOLS

meta = PermutedOLS(two_sided=True)
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

corrector = FWECorrector(method="montecarlo", n_iters=100, n_cores=1)
cresult = corrector.transform(results)

plot_stat_map(
    cresult.get_map("z_level-voxel_corr-FWE_method-montecarlo"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(cresult.description_)
print("References:")
pprint(cresult.bibtex_)
  • 02 plot ibma
  • 02 plot ibma
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}), on 21 beta images using a permuted '
 "ordinary least squares method derived from Nilearn's "
 '\\citep{10.3389/fninf.2014.00014}. Family-wise error rate correction was '
 'performed with a max-statistic null distribution generated by sign-flipping '
 "each group's contribution as one exchangeability block "
 '\\citep{winkler2014permutation}, following the permutation scheme of '
 '\\cite{freedman1983nonstochastic}. The maximum was taken over z-statistics, '
 'so that voxels backed by different numbers of images contribute on a common '
 'scale. 100 iterations were performed to generate the null distribution.')
References:
('@article{10.3389/fninf.2014.00014,\n'
 '  title={Machine learning for neuroimaging with scikit-learn},\n'
 '  author={Abraham, Alexandre and Pedregosa, Fabian and Eickenberg, Michael '
 'and Gervais, Philippe and Mueller, Andreas and Kossaifi, Jean and Gramfort, '
 'Alexandre and Thirion, Bertrand and Varoquaux, Gael},\n'
 '\tjournal={Frontiers in Neuroinformatics},\n'
 '\tvolume={8},\n'
 '\tyear={2014},\n'
 '\turl={https://www.frontiersin.org/article/10.3389/fninf.2014.00014},\n'
 '\tdoi={10.3389/fninf.2014.00014},\n'
 '\tissn={1662-5196}\n'
 '}\n'
 '@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{freedman1983nonstochastic,\n'
 '  title={A nonstochastic interpretation of reported significance levels},\n'
 '  author={Freedman, David and Lane, David},\n'
 '  journal={Journal of Business \\& Economic Statistics},\n'
 '  volume={1},\n'
 '  number={4},\n'
 '  pages={292--298},\n'
 '  year={1983},\n'
 '  publisher={Taylor \\& Francis}\n'
 '}\n'
 '@article{winkler2014permutation,\n'
 '  title={Permutation inference for the general linear model},\n'
 '  author={Winkler, Anderson M. and Ridgway, Gerard R. and Webster, Matthew '
 'A. and Smith, Stephen M. and Nichols, Thomas E.},\n'
 '  journal={NeuroImage},\n'
 '  volume={92},\n'
 '  pages={381--397},\n'
 '  year={2014},\n'
 '  publisher={Elsevier},\n'
 '  doi={10.1016/j.neuroimage.2014.01.060}\n'
 '}')

Sample-size-weighted permuted OLS

When one study contributes several beta maps, treating them as independent gives that study disproportionate weight. PermutedOLS groups by study_id by default: one mean contribution per study, sign-flipped as a whole exchangeability block. use_sample_size=True also weights each study by its participant count, with a CR2 cluster-robust variance.

meta = PermutedOLS(two_sided=True, use_sample_size=True)
results = meta.fit(studyset)
cresult = corrector.transform(results)

plot_stat_map(
    cresult.get_map("z_level-voxel_corr-FWE_method-montecarlo"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(cresult.description_)
print("References:")
pprint(cresult.bibtex_)
02 plot ibma
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.65). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.69). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.74). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.00). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.87). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.82). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.69). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.91). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.79). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.98). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.80). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.63). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.94). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.99). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.98). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.90). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.95). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.95). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.00). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.96). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.77). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.93). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.72). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.00). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.91). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.89). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.46). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.66). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.61). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.84). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.93). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.39). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.59). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.78). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.87). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.94). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.86). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.81). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.67). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.80). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.76). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.88). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.84). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.26). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.45). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.92). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.85). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.57). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.87). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.98). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 3.72). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 1.93). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/_permutation.py:186: UserWarning: Satterthwaite degrees of freedom below 4.0 for predictor(s) [0] (smallest 2.75). The approximation is only known to control the Type I error rate above about that value, so the corresponding p-values and intervals are outside their validated range and should be read as a diagnostic rather than a result. This usually means a group-level predictor is carried by very few groups; more groups on the scarce side of the predictor is the remedy, not a different estimator.
  satterthwaite_dof(
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}), on 21 beta images using a permuted '
 "ordinary least squares method derived from Nilearn's "
 '\\citep{10.3389/fninf.2014.00014}. Each group was weighted by its sample '
 'size. Family-wise error rate correction was performed with a max-statistic '
 "null distribution generated by sign-flipping each group's contribution as "
 'one exchangeability block \\citep{winkler2014permutation}, following the '
 'permutation scheme of \\cite{freedman1983nonstochastic}. The maximum was '
 'taken over z-statistics, so that voxels backed by different numbers of '
 'images contribute on a common scale. 100 iterations were performed to '
 'generate the null distribution.')
References:
('@article{10.3389/fninf.2014.00014,\n'
 '  title={Machine learning for neuroimaging with scikit-learn},\n'
 '  author={Abraham, Alexandre and Pedregosa, Fabian and Eickenberg, Michael '
 'and Gervais, Philippe and Mueller, Andreas and Kossaifi, Jean and Gramfort, '
 'Alexandre and Thirion, Bertrand and Varoquaux, Gael},\n'
 '\tjournal={Frontiers in Neuroinformatics},\n'
 '\tvolume={8},\n'
 '\tyear={2014},\n'
 '\turl={https://www.frontiersin.org/article/10.3389/fninf.2014.00014},\n'
 '\tdoi={10.3389/fninf.2014.00014},\n'
 '\tissn={1662-5196}\n'
 '}\n'
 '@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{freedman1983nonstochastic,\n'
 '  title={A nonstochastic interpretation of reported significance levels},\n'
 '  author={Freedman, David and Lane, David},\n'
 '  journal={Journal of Business \\& Economic Statistics},\n'
 '  volume={1},\n'
 '  number={4},\n'
 '  pages={292--298},\n'
 '  year={1983},\n'
 '  publisher={Taylor \\& Francis}\n'
 '}\n'
 '@article{winkler2014permutation,\n'
 '  title={Permutation inference for the general linear model},\n'
 '  author={Winkler, Anderson M. and Ridgway, Gerard R. and Webster, Matthew '
 'A. and Smith, Stephen M. and Nichols, Thomas E.},\n'
 '  journal={NeuroImage},\n'
 '  volume={92},\n'
 '  pages={381--397},\n'
 '  year={2014},\n'
 '  publisher={Elsevier},\n'
 '  doi={10.1016/j.neuroimage.2014.01.060}\n'
 '}')

Weighted Least Squares

from nimare.meta.ibma import WeightedLeastSquares

meta = WeightedLeastSquares(tau2=0)
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}), on 21 beta images using the Weighted '
 'Least Squares approach \\citep{brockwell2001comparison}, with an a priori '
 'tau-squared value of 0 defined across all voxels.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{brockwell2001comparison,\n'
 '  title={A comparison of statistical methods for meta-analysis},\n'
 '  author={Brockwell, Sarah E and Gordon, Ian R},\n'
 '  journal={Statistics in medicine},\n'
 '  volume={20},\n'
 '  number={6},\n'
 '  pages={825--840},\n'
 '  year={2001},\n'
 '  publisher={Wiley Online Library},\n'
 '  url={https://doi.org/10.1002/sim.650},\n'
 '  doi={10.1002/sim.650}\n'
 '}')

DerSimonian-Laird

from nimare.meta.ibma import DerSimonianLaird

meta = DerSimonianLaird()
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}), on 21 beta and variance images using '
 'the DerSimonian-Laird method \\citep{dersimonian1986meta}, in which '
 'tau-squared is estimated on a voxel-wise basis using the method-of-moments '
 'approach \\citep{dersimonian1986meta,kosmidis2017improving}.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{dersimonian1986meta,\n'
 '  title={Meta-analysis in clinical trials},\n'
 '  author={DerSimonian, Rebecca and Laird, Nan},\n'
 '  journal={Controlled clinical trials},\n'
 '  volume={7},\n'
 '  number={3},\n'
 '  pages={177--188},\n'
 '  year={1986},\n'
 '  publisher={Elsevier}\n'
 '}\n'
 '@article{kosmidis2017improving,\n'
 '  title={Improving the accuracy of likelihood-based inference in '
 'meta-analysis and meta-regression},\n'
 '  author={Kosmidis, Ioannis and Guolo, Annamaria and Varin, Cristiano},\n'
 '  journal={Biometrika},\n'
 '  volume={104},\n'
 '  number={2},\n'
 '  pages={489--496},\n'
 '  year={2017},\n'
 '  publisher={Oxford University Press},\n'
 '  url={https://doi.org/10.1093/biomet/asx001},\n'
 '  doi={10.1093/biomet/asx001}\n'
 '}')

Hedges

from nimare.meta.ibma import Hedges

meta = Hedges()
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/latest/nimare/meta/ibma.py:325: RuntimeWarning: NaNs or infinite values are present in the data passed to resample. This is a bad thing as they make resampling ill-defined and much slower.
  return resample_to_img(img, mask_img, **self._resample_kwargs)
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}), on 21 beta and variance images using '
 'the Hedges method \\citep{hedges2014statistical}, in which tau-squared is '
 'estimated on a voxel-wise basis.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@book{hedges2014statistical,\n'
 '  title={Statistical methods for meta-analysis},\n'
 '  author={Hedges, Larry V and Olkin, Ingram},\n'
 '  year={2014},\n'
 '  publisher={Academic press}\n'
 '}')

Why that map looks washed out: beta units

Hedges and DerSimonianLaird fit raw beta maps, and in this studyset those are not on a common scale. Each study reports betas in whatever units its pipeline produced: the per-study spatial standard deviation spans a factor of ~2300 here, and the varcopes track it (the ratio between the two varies only ~2.5x), so this is a difference in units, not in precision.

Having varcopes does not rescue it. tau2 is estimated from the observed spread of the betas, which those units dominate – its median here is ~2830, orders of magnitude above the varcopes, against ~0.05 for the same studies expressed as Hedges’ g. Once tau2 swamps every varcope, the weights 1 / (v + tau2) all collapse to the same value and the fit degenerates into an unweighted mean of incommensurable betas with a badly inflated standard error. That is the pale, speckled map above.

Fixed-effect fits such as WeightedLeastSquares keep a correct false-positive rate, as any fixed set of weights does, but they lose power: inverse-variance weighting reads a large unit as low precision and downweights that study by the square of its scale.

The estimators that are unaffected are the ones whose inputs are already scale-free, so reach for those instead when the betas are not on a shared scale. Stouffers and Fishers combine z maps, and FixedEffectsHedges below turns t maps into Hedges’ g, a standardized effect size. On this studyset those three agree with each other to r >= 0.97, while the beta-based fits correlate no better than ~0.87 with them.

Note that FixedEffectsHedges converts with d = t / sqrt(n), which is the one-sample form. That suits a group activation map, but not a t map from a between-group contrast, where the conversion needs both group sizes.

There is no supported random-effects counterpart: FixedEffectsHedges is fixed-effect only, and no NiMARE estimator fits a standardized effect size with a between-study variance.

None of this applies if your betas do share a scale – percent signal change, say, or a single pipeline throughout. Then beta and varcope meta-regression is the right tool.

Fixed Effects Meta-Analysis with Hedges’ g

from nimare.meta.ibma import FixedEffectsHedges

meta = FixedEffectsHedges(tau2=0)
results = meta.fit(studyset)

plot_stat_map(
    results.get_map("z"),
    cut_coords=[0, 0, -8],
    draw_cross=False,
    cmap="RdBu_r",
    symmetric_cbar=True,
)

print("Description:")
pprint(results.description_)
print("References:")
pprint(results.bibtex_)
02 plot ibma
Description:
('An image-based meta-analysis was performed with NiMARE 0.20.0+5.g605e03f '
 '(RRID:SCR_017398; \\citealt{Salo2023}), on 21 t-statistic images using '
 "Heges' g as point estimates and the variance of bias-corrected Cohen's in a "
 'Weighted Least Squares approach '
 '\\citep{brockwell2001comparison,bossier2019}, with an a priori tau-squared '
 'value of 0 defined across all voxels.')
References:
('@article{Salo2023,\n'
 '  doi = {10.52294/001c.87681},\n'
 '  url = {https://doi.org/10.52294/001c.87681},\n'
 '  year = {2023},\n'
 '  volume = {3},\n'
 '  pages = {1 - 32},\n'
 '  author = {Taylor Salo and Tal Yarkoni and Thomas E. Nichols and '
 'Jean-Baptiste Poline and Murat Bilgel and Katherine L. Bottenhorn and Dorota '
 'Jarecka and James D. Kent and Adam Kimbler and Dylan M. Nielson and Kendra '
 'M. Oudyk and Julio A. Peraza and Alexandre Pérez and Puck C. Reeders and '
 'Julio A. Yanes and Angela R. Laird},\n'
 '  title = {NiMARE: Neuroimaging Meta-Analysis Research Environment},\n'
 '  journal = {Aperture Neuro}\n'
 '}\n'
 '@article{brockwell2001comparison,\n'
 '  title={A comparison of statistical methods for meta-analysis},\n'
 '  author={Brockwell, Sarah E and Gordon, Ian R},\n'
 '  journal={Statistics in medicine},\n'
 '  volume={20},\n'
 '  number={6},\n'
 '  pages={825--840},\n'
 '  year={2001},\n'
 '  publisher={Wiley Online Library},\n'
 '  url={https://doi.org/10.1002/sim.650},\n'
 '  doi={10.1002/sim.650}\n'
 '}')

Total running time of the script: (1 minutes 20.261 seconds)

Gallery generated by Sphinx-Gallery