neurostuff / NiMARE

Coordinate- and image-based meta-analysis in Python
https://nimare.readthedocs.io
MIT License
181 stars 58 forks source link

Fill missing data in images with NaNs #274

Closed tsalo closed 2 years ago

tsalo commented 4 years ago

This is related to https://github.com/neurostuff/PyMARE/issues/42 and https://github.com/neurostuff/PyMARE/issues/44, as well as to https://github.com/neurostuff/NiMARE/issues/231#issuecomment-633810456.

We can include this step in the _preprocess_inputs method in image-based meta-analysis estimators called by fit().

@nicholst what do you think of this as a solution to your comment about varying degrees of freedom in IBMAs?

nicholst commented 4 years ago

I’ve slipped into FSL’s sphere of avoiding implicit NA masking at all costs and using explicit masks. But if you’re OK with NA masking go for it. --


Thomas Nichols, PhD Professor of Neuroimaging Statistics Nuffield Department of Population Health | University of Oxford Big Data Institute | Li Ka Shing Centre for Health Information and Discovery Old Road Campus | Headington | Oxford | OX3 7LF | United Kingdom T: +44 1865 743590 | E: thomas.nichols@bdi.ox.ac.uk W: http://nisox.org | http://www.bdi.ox.ac.uk

tsalo commented 4 years ago

The only problem with explicit masks is that we have to pass a 2D array into PyMARE, which would increase complexity on NiMARE's side by a fair amount.

If we masked out studies with missing data for each voxel, then we would have to loop through unique combinations of studies with data to identify matching voxels, build 2D arrays for those voxels, run the PyMARE estimator on each group separately, and then merge the results back into a map at the end.

EDIT: I think we could pass in an optional numpy mask with the 2D array to PyMARE, but that would depend on what @tyarkoni wants PyMARE to support.

nicholst commented 4 years ago

I'm fine with it... so do what makes sense.

tsalo commented 4 years ago

Please forgive me if we've discussed this before, but have we considered (at least in the architecture if not the current implementation) the possibility of voxel-wise-varying sample size?

It's now an edge case, but with larger and larger N (for an individual, non-meta analysis), you have the problem of ever eroding analysis mask since all voxels are required. We are now building tools that allow the number of subjects contributing to an analysis vary by voxel (within limits, of course).

Originally posted by @nicholst in https://github.com/neurostuff/NiMARE/issues/231#issuecomment-633810456

@nicholst I don't want to open a new issue about it, but is Cutler, Radua, & Campbell-Meiklejohn (2018) what you were talking about as a method for dealing with varying brain coverage across maps?

nicholst commented 4 years ago

Thanks for the ref @tsalo, I hadn't seen that.

I didn't have a particular correction in mind. While the equations they present for one-sample random effects meta-analyses are handy, I prefer to see things in terms of a meta-regression where you have an arbtrary X matrix. For that, I don't know of any such short cuts... you simply have to run the model with the rows of Y and X for which you have complete data.

tsalo commented 4 years ago

Ah, thank you for the clarification. It sounds like we can/should just let PyMARE handle it then.

tsalo commented 2 years ago

Since we've decided to let PyMARE handle any missing data issues, I think we can close this.