High-pass filtering with fmriprep and FSL

Hi all,

I’m using fmriprep outputs in a first-level GLM implemented with FSL (fast event-related design). I am including aCompCor regressors and the cosine regressors as confound variables. I understand that aCompCor is conducted on high-pass-filtered data, but the func data output from fmriprep is NOT yet high-pass-filtered. I read elsewhere that the cosine regressors should be added to your first-level GLM to perform this high-pass filtering.

But things get complicated when I try to implement this in my FSL first-level analysis. I could choose to apply high-pass filtering with FSL. Additionally, when I set up my task GLM, there is an option to apply temporal filtering to each regressor. The help menu indicates that if one has applied high-pass filtering to the data, then one should also apply temporal filtering to the task regressor. I assume that if I disable high-pass filtering in FSL, I will not be able to apply temporal filtering to task regressors. If I add the aCompCor + cosine regressors from fmriprep in a separate file for additional confound EVs, FSL will not apply temporal filtering to these confound regressors (to my knowledge).

So, I have a few questions about this situation.

  1. If I disable high-pass filtering and temporal filtering of regressors in FSL, will adding the cosine regressors to my GLM essentially do both of these steps? I’m not sure why FSL applies this in two steps. I’m worried that if I don’t apply temporal filtering there may be an issue with my task regressors.

  2. Alternatively, would it be reasonable to enable high-pass filtering (cutoff of 128 seconds, the same as used in the CompCor pipeline) and temporal filtering of regressors in FSL, but not include the cosine regressors?

I did find this related thread here, but it looks like there was no conclusion.

Thanks in advance!

1 Like

Bumping this up. I haven’t seen a convincing response to this yet.

Hi @sinclair_allie and @Mkassaie,I’m not an expert here, but I’ll try and clear things up.

There are two main methods for removing the effect of low-frequency drift in your data in a task-fMRI study:

  1. Pre-filtering - removing low frequency signals before model fitting: This is where, prior to performing your model fitting, you apply a filter to your data set (for example using fslmaths -bptf). You then use this pre-filtered data in your model fitting. With this approach, you should apply the same pre-filtering to the explanatory variables in your design matrix - as all of the low-frequency signal has been removed from your data, there is no point in having any low-frequency signal in your EVs. High-pass filters can also affect the beginning and end of a signal, e.g. introducing a “roll-off” or “dampening” of the signal in the first and last few seconds of a signal. Applying the same filter to your data and to your model ensures that they will both have roughly the same temporal characteristics.

  2. Modelling low frequency drifts: This is where you don’t perform prefiltering at all, but instead use some process to estimate the low frequency signals that are present in your data. You then add those estimates as regressors into your design matrix. In this case you do not need to apply any filtering to your other explanatory variables - any variance in your data which correlates with the low frequency regressors will be assigned to them, and any remaining variance will be assigned to your other EVs.

(note that I’m using the terms regressor and EV somewhat interchangeably, to refer to columns in your design matrix).

As I’m not an expert, I can’t comment on which approach is preferable; there are probably situations in which you may want to choose one or the other. For example, the benefits to the second approach are reducing the amount of preprocessing/manipulation of your data (which we usually want to do as little of as possible).

edit There is a good (but detailed) overview of the second approach here

1 Like

Thanks, @paulmccarthy! I’ll try to translate this into choices in FEAT GUI. Please correct me if I’m getting it wrong.

1- Pre-filtering: in FSL FEAT GUI for level1 GLM, it is done by turning on temporal highpass filtering in the Pre-stats tab (which adds the fslmaths -bptf command) . If I choose this option, I will then have to “apply temporal filtering” to my EVs during full model setup.

2-Modeling low frequency drifts: in fmriprep, it is done through calculation of cosine-basis regressors. To apply these in FSL FEAT, I will have to include these cosine regressors as “confound EVs” in the stats tab. If I choose this option, I should not turn on temporal highpass filtering in FEAT pre-stats, and I should not “apply temporal filtering” to my EVs during full model setup.

Regardless of the above choice, I can safely “add temporal derivative” in my full model setup.

@Mkassaie yes, that sounds right. And you are correct - the add temporal derivative option is unrelated to temporal filtering, and is the recommended approach within FSL for handling slice timing differences in task fMRI.