Second-Level Modeling - Threshold function returning inf

Hi there,

My team and I are using Nilearn to run group-level GLMs on a set of fMRI data. We’re in good shape in terms of estimating the GLM itself, but we’re running into major issues when it comes to multiple-comparison corrections.

Ideally, we want to use FDR for the multiple-comparison corrections but the threshold_stats_img function in Nilearn is returning an inf value instead of a float … this is not the case when we try to run the same exact function with FPR as the height control input:

Does this strike you as a flaw in our data, or a bug in the software? FWIW, plotting the z_map with an arbitrary threshold yields an empty brain as well:

The uncorrected z_map is pretty robust, so we’d definitely expect to see something with a liberal multiple-comparison correction like FDR:

Any help you can render here would be much appreciated!


temp_thresh = inf means that there is no voxel surviving fdr correction at the level you specified. You may want to change the level of control you wish.
But overall, it means that there is little evidence for significant activity when taking into account multiple comparisons.

Thanks Bertrand! This could definitely be a design issue on our end, which may be the root cause of the lack of significance.

I am curious as to why FPR yields some significant voxel activity and FDR doesn’t - it was my understanding that FDR is a more liberal estimate of activity (though I could certainly be mistaken)

My one-sample function, if it’s helpful:

Thanks again,

No FDR correction for a significance alpha is more conservative than FPR thresholding at level alpha. This is because FDR includes a correction for multiple comparison, which FPR does not.
By contrast, Family-wise error rate (FWER) control is more conservative than FDR.

1 Like

Understood! Thanks for your help, it’s much appreciated