Non_steady_state_outlier varies from run to run

Hi there,

I have 13 runs of fmri preprocessed by fmriprep in which I did not specify –dummy-scans. In the HTML report I have Non-steady-state volumes vary from run to run (e.g., some have 1, some 0 and some 2), this number is consistent with the number of non_steady_state_outlierXX in the confounding .tsv. We do have a fixed number of dummy volumes in each run, but it was already excluded from the input of fmriprep.

I wonder how this non_steady_state_outlierXX is estimated by fmriprep and why it is varying from run to run just in case I miss something important? In practice, would you recommend proceeding for GLM without considering non_steady_state_outlierXX since we are sure there is no dummy volumes involved in the input, or should I rerun fmriprep by specifying –dummy-scans 0, because from this post --dummy-scans option on fmriprep functional? - #9 by alexlwhite it seems non_steady_state_outlierXX is related to CompCor estimation which if I understand well does not consider the dummy volumes.

Thanks a lot,

The basic logic is here:

Here’s the wrapper fMRIPrep uses:


  1. Subsets to the first 40 volumes to save memory.
  2. Clips the data range to the 0.2 and 99.8 percentiles to avoid extreme outlier voxels.

Hi @effigies, thanks a lot for your detailed reply. Could you please confirm my understanding after reading the code?

Basically, your first clip BOLD volume within [0.2, 99.8] percentile to avoid extreme intensity voxels, then average all the rest voxels for each BOLD volume/frame to get a time series vector (same length as the number of BOLD volumes), and this vector is further applied to the outliers detector is_outlier() which uses a modified z-score threshold.

May I ask then how do we link this with –dummy-scans? I might be wrong, not sure in the code whether this outlier detector is applied to the whole BOLD time window or only a few initial volumes (e.g., first 40?). From what I got in .tsv, it seems outliers only appeared in the first 1 or 2 volumes. Maybe this outliers detector is performed whether or not –dummy-scans is set by the user? For instance, if we have 3 dummy scans, they will be marked by the Non-steady-state volumes, but if we don’t specify –dummy-scans, fmriprep tries to use this outlier detector to estimate dummy volumes.

Yes, your understanding is correct. The only thing I would add is that it specifically detects initial outliers. Once a non-outlier volume is found, the algorithm terminates.

If you do not use --dummy-scans, then the initial outlier volumes detected by the above code is used to provide non_steady_state_XX regressors, and these volumes are also disregarded in the calculation of CompCor and AROMA components.

If you do use --dummy-scans, that code is still run, but its only effect is to alert in the report when we detect a different number, as that could indicate a potential issue in the data that researchers should look into. The number received from --dummy-scans is used to provide the non_steady_state_XX regressors and disregard volumes for CompCor and AROMA.

Thanks again @effigies, this is clear. When you get some time would you mind shortly answering my other question here (even some short hints would be fine) Resampling volume atlas to BOLD space? I have been stuck here for a while. Sorry for asking too many questions :slight_smile: