Note
Go to the end to download the full example code.
Use NeuroVault statistical maps in NiMARE
Download statistical maps from NeuroVault, then use them in a meta-analysis, with NiMARE.
import matplotlib.pyplot as plt
from nilearn.plotting import plot_stat_map
Conversion of Statistical Maps
create_neurovault_studyset already resolves compatible image types.
To explicitly demonstrate ImageTransformer on a
Studyset-backed collection, we drop the derived Z maps from contrasts that
still have T maps and regenerate them.
from nimare.transforms import ImageTransformer
images = studyset.images.copy()
images.loc[images["t"].notnull(), "z"] = None
studyset.images = images
# Some studies are now missing Z maps again.
studyset.images[["t", "z"]]
z_transformer = ImageTransformer(target="z")
studyset = z_transformer.transform(studyset)
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/stable/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/stable/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/stable/nimare/transforms.py:310: 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.
t = masker.transform(available_data["t"])
/home/docs/checkouts/readthedocs.org/user_builds/nimare/checkouts/stable/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/stable/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/stable/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/stable/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/stable/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/stable/lib/python3.13/site-packages/nilearn/image/image.py:540: RuntimeWarning: overflow encountered in scalar negative
infinity_norm = max(-data.min(), data.max())
All studies now have Z maps again.
studyset.images[["z"]]
Run a Meta-Analysis
With the missing Z maps filled in, we can run a Meta-Analysis and plot our results
from nimare.meta.ibma import Fishers
# The default template has a slightly different, but completely compatible,
# affine than the NeuroVault images, so we allow the Estimator to resample
# images during the fitting process.
meta = Fishers(resample=True)
# Drop studies that have no Z map (e.g. collections with no downloadable images).
has_z = studyset.images["z"].notnull()
valid_ids = studyset.images.loc[has_z, "id"].tolist()
if valid_ids:
studyset = studyset.filter_ids(valid_ids)
meta_res = meta.fit(studyset)
fig, ax = plt.subplots()
display = plot_stat_map(meta_res.get_map("z"), threshold=3.3, axes=ax, figure=fig)
fig.show()
# The result may look questionable, but this code provides
# a template on how to use neurovault in your meta analysis.

/home/docs/checkouts/readthedocs.org/user_builds/nimare/envs/stable/lib/python3.13/site-packages/numpy/_core/numeric.py:386: RuntimeWarning: invalid value encountered in cast
multiarray.copyto(a, fill_value, casting='unsafe')
Total running time of the script: (0 minutes 17.452 seconds)