Fmriprep + physiological denoising

Hello fMRI experts,
I’m trying to put together a denoising pipeline for resting-state data which relies primarily on fmriprep, but I’d like to include a step for physiological denoising since I have cardiac and respiratory recordings acquired during the MR scans.

I found several tools implementing RETROICOR (Glover, 2000) that produce a set of regressors I can use to clean the data, but I was wondering what would be the optimal order to apply the denoising steps.

I can see 3 scenarios:
a) get RETROICOR regressors from raw data, apply fmriprep on raw data, clean the data with one big regression step where I combine fmriprep and RETROICOR regressors
b) remove RETROICOR regressors from raw data, apply fmriprep on ‘clean’ data, regress fmriprep regressors from fmriprep outputs
c) apply fmriprep or raw data, apply RETROICOR on fmriprep outputs, denoise data with fmriprep + RETROICOR regressors

The problem I see with a) is that regressors are computed on different input data, while in b) I don’t like the idea of two consecutive regression steps.
I’ve read that I should apply RETROICOR as soon as possible since it uses information on slice timing, but since I am skipping slice-timing correction in fmriprep, I was wondering if there is anything conceptually wrong with option c) (for example with applying RETROICOR after motion correction).



A few thoughts I have:

  1. As hard as it may be to throw away data, you may want to consider using aCompCor instead of RETROICOR. The aCompCor paper shows similar performance between RETROICOR and aCompCor (if not slightly better for aCompCor). An advantage of RETROICOR, however, is preservation of temporal degrees of freedom, as RETROICOR makes fewer regressors than aCompCor. This is mainly an issue for short scans.

  2. Does RETROICOR even use MRI signal? I thought the components were based purely off of the respiratory/pulse-ox signal. If RETROICOR doesn’t use MR signal, then there is no “running retroicor on data”, and the regressors should just be used alongside any fMRIPrep regressors.

  3. If RETROICOR does use MRI signal, I would suggest option A, depending on what other regressors you want to include. As you mention, it is good to do regression/denoising in one step. Now, consider what other regressors you want. If they’re motion related (e.g. framewise displacement or rotation/translation parameters), then RETROICOR should not change those, because these are based on image registration. Of course, aCompCor would not be good to use if already having run RETROICOR.


Many thanks for the reply, Steven. From my understanding the only information that RETROICOR uses from the MRI data is the slice timing, so I understand why people recommend applying before despiking, like in here:,162279,162282#msg-162282

but I am not sure why it is also suggested to apply it before motion correction, as in here:

Regarding your third point, if I had a regressor derived from fmriprep outputs, like global signal, that could still contain breathing / heart rate related signal, would you still go for option a) even with the risk of potentially correlated regressors?