Significant voxel donuts at group level when using fsl randomise (through nipype)?


I’m currently running an fMRI analyses on a set of tasks. First-levels look good, and the beta and t-stats (also generated via fsl randomise) maps at the group-level look fine as well, but the t_correct_p_files, (defined as “T contrast FWE (Family-wise error) corrected p values files.” here) are very strange.

Specifically, the significant voxels are frequently scattered or form donuts, and they don’t align with high values as seen in the beta and t-stats maps.

Example below:

Our code for running randomise is as follows:

from nipype.interfaces import fsl
mem = Memory(base_dir=output_loc)
fsl_randomise = mem.cache(fsl.Randomise)
randomise_results = fsl_randomise(

raw_tfile = randomise_results.outputs.tstat_files[0]
corrected_tfile = randomise_results.outputs.t_corrected_p_files[0]
shutil.move(raw_tfile, tfile_loc)
shutil.move(corrected_tfile, tfile_corrected_loc)

A senior lab member said they had strange results using tfce=True, so we tried tfce=False and c_thresh=3.1, and the donuts increased!

Has anyone run into something similar? Or, is there any general guidance on using fsl randomise that I may have missed? Thank you in advance for any suggestions and guidance.


Oh, that is strange; it sort of looks like it identified the cluster edges, rather than centers (do the peaks fall in the middle of the donuts?). I’m not familiar with this function; is it doing some sort of searchlight/small neighborhood correction/analysis? If so, perhaps it is a phenomenon like (donut-shaped searchlight results).

For troubleshooting, it may be useful to plot the donuts over the results for single subjects: do they align with anything in one (or more) people?

Hi @jaetzel,

Thank you very much for sharing those blog posts - that was a very informative read! Unfortunately, randomise does work via search light/local correction, and the actual issue was a silly plotting error on our part.

The p files returned by randomise are actually 1 - p files, since fsl’s plotting function can set a minimum threshold above which to show values (in this case, 0.95), but can’t set an upper threshold below which to plot with increasing intensity. Changing the values in the p file to 1 - val to retrieve the actual p-values fixed our plotting and the donuts went away.

Thanks again for your help, and I won’t forget about local corrections!

Glad you figured it out! We’ve all probably done something that at least once; easier to plot t/F/accuracy/whatever, where bigger is better. :sweat_smile:

1 Like