nimare.meta.ibma.Stouffers

class Stouffers(use_sample_size=False, two_sided=True, **kwargs)[source]

Bases: IBMAEstimator

A t-test on z-statistic images.

Changed in version 0.21.0:

  • New parameter: groupby, identifying images contributed by the same participants.

  • The dof map now counts independent groups rather than images.

  • The null correlation between images is estimated per pair, on the voxels both are valid at, rather than on the voxels every image is valid at.

  • A dependence group whose images cancel is now excluded from the voxels where it cancels, with a warning naming the study, instead of ending the meta-analysis.

Requires z-statistic images.

This method is described in Stouffer et al.[1].

Changed in version 0.3.0:

  • New parameter: two_sided, controls the type of test to be performed. In addition,

    the default is now set to True (two-sided), which differs from previous versions where only one-sided tests were performed.

  • Add correction for multiple contrasts within a study.

  • New parameter: normalize_contrast_weights to normalized the weights by the

    number of contrasts in each study. Removed again in 0.21.0; see groupby.

Changed in version 0.2.1:

  • New parameter: aggressive_mask, to control whether to use an aggressive mask.

Parameters:
  • aggressive_mask (bool, optional) – Voxels with a value of zero of NaN in any of the input maps will be removed from the analysis. If False, all voxels are included by running a separate analysis on bags of voxels that belong that have a valid value across the same studies. Default is False.

  • groupby (None, str, array-like, or False, optional) – How to identify images that share participants and are therefore dependent. None (the default) groups by study_id. A str names a metadata field to group by instead, for a paper contributing independent samples (e.g. patients and controls). An array supplies one label per image. False treats every image as independent, which inflates significance whenever that is untrue. Default is None.

  • use_sample_size (bool, optional) – Whether to use sample sizes for weights (i.e., “weighted Stouffer’s”) or not, as described in Zaykin[2]. A group whose images report different sample sizes is weighted by their mean. Default is False.

  • two_sided (bool, optional) – If True, performs an unsigned t-test. Both positive and negative effects are considered; the null hypothesis is that the effect is zero. If False, only positive effects are considered as relevant. The null hypothesis is that the effect is zero or negative. Default is True.

Notes

Requires z images and optionally the sample size metadata field.

When groupby finds a group holding more than one image, the images in a group are combined into one variance-standardized statistic and the sum’s variance is inflated by the null correlation between them [3].

fit() produces a MetaResult object with the following maps:

“z”

Z-statistic map from one-sample test.

“p”

P-value map from one-sample test.

“dof”

Degrees of freedom map from one-sample test.

Warning

Masking approaches which average across voxels (e.g., NiftiLabelsMaskers) will result in invalid results. It cannot be used with these types of maskers.

By default, image-based meta-analysis estimators run the analysis in bags of voxels, where each bag holds the voxels that have a valid value across the same studies. A voxel is therefore only dropped from the studies that are missing it. Setting aggressive_mask=True instead removes any voxel with a value of zero or NaN in any input map from the analysis entirely. Either way, a bag whose valid images all belong to one group is skipped – one group cannot support the inference – and its voxels come back as NaN.

References

See also

pymare.estimators.StoufferCombinationTest

The PyMARE estimator called by this class.

Methods

fit(dataset[, drop_invalid])

Fit Estimator to a collection.

get_params([deep])

Get parameters for this estimator.

load(filename[, compressed])

Load a pickled class instance from file.

save(filename[, compress])

Pickle the class instance to the provided file.

set_params(**params)

Set the parameters of this estimator.

share_masked_image_cache(cache)

Reuse already-masked input images across repeated fits of the same studyset.

fit(dataset, drop_invalid=True)[source]

Fit Estimator to a collection.

Parameters:
  • dataset (Studyset or Dataset) – Collection object to analyze.

  • drop_invalid (bool, optional) – Whether to automatically ignore any studies without the required data, or with data that cannot be used, such as an all-zero image. Default is True.

Returns:

Result of Estimator fitting. Subclasses may return a MetaResult subclass.

Return type:

MetaResult

Variables:
  • inputs (dict) – Inputs used in _fit.

  • warning:: (..) – Support for Dataset inputs is deprecated and will be removed in NiMARE 1.0.0. Prefer Studyset.

  • and (The fit method is a light wrapper that runs input validation)

  • individual (preprocessing before fitting the actual model. Estimators')

  • should ("fitting" methods are implemented as _fit, although users)

  • fit. (call)

get_params(deep=True)[source]

Get parameters for this estimator.

Parameters:

deep (bool, default=True) – If True, will return the parameters for this estimator and contained subobjects that are estimators.

Returns:

params – Parameter names mapped to their values.

Return type:

dict

classmethod load(filename, compressed=True)[source]

Load a pickled class instance from file.

Parameters:
  • filename (str) – Name of file containing object.

  • compressed (bool, default=True) – If True, the file is assumed to be compressed and gzip will be used to load it. Otherwise, it will assume that the file is not compressed. Default = True.

Returns:

obj – Loaded class object.

Return type:

class object

save(filename, compress=True)[source]

Pickle the class instance to the provided file.

Parameters:
  • filename (str) – File to which object will be saved.

  • compress (bool, optional) – If True, the file will be compressed with gzip. Otherwise, the uncompressed version will be saved. Default = True.

set_params(**params)[source]

Set the parameters of this estimator.

The method works on simple estimators as well as on nested objects (such as pipelines). The latter have parameters of the form <component>__<parameter> so that it’s possible to update each component of a nested object.

Return type:

self

share_masked_image_cache(cache)[source]

Reuse already-masked input images across repeated fits of the same studyset.

A leave-one-out diagnostic fits this estimator once per study, over subsets of one fixed set of images. Masking is per-image and does not depend on which other images are in the fit, so the default – reload, resample and mask every file on every fit – repeats the same work a number of times that grows with the square of the studyset.

Parameters:

cache (dict or None) – Mapping used to hold one masked row per image path. Callers that want the reuse to span several estimators (the copies a diagnostic refits) must hand the same dict to each of them; passing None turns the reuse off again. The caller owns the dict, and therefore its lifetime: entries live until it is dropped. It is only valid while the files it was filled from are unchanged.

Notes

The cached row is never handed out, only copied into each fit’s own array, so a caller that edits inputs_ cannot corrupt a later fit.