Accounting for reduced degrees of freedom in fMRI GLMs

Does anyone know of any way to account for reduced degrees of freedom in fMRI data at the run-level modeling stage, using any of the major fMRI analysis tools (e.g., AFNI, FSL, SPM, or nilearn)?

Specifically, I’m referring to workflows which involve denoising before modeling. Two specific cases I have in mind are multi-echo ICA-based denoising (as in tedana) and Marchenko-Pastur PCA-based denoising (i.e., dwidenoise, as proposed in Adhikari et al., 2019). With most decomposition-based denoising approaches, such as tedana or ICA-AROMA, one could include the rejected components in the GLM so that everything’s accounted for automatically, but with dwidenoise the recommendation is to apply the denoising before any other preprocessing, and it uses a searchlight so that the number of components removed by the denoising procedure will vary across the brain. As such, the denoised data will have variable degrees of freedom, and there’s no way I can think of to directly account for that in the GLM.

Optimally, one would be able to supply a DOF map or DOF value to the tool, much like how FEAT allows users to provide voxelwise confounds. Is there anything like that out there?

1 Like

Hi @tsalo

  • Normally, the dofs come into play only when converting t/F stats to p-values (or z-value equivalents). And there is little difference between having, say 100 or 105 dofs. A pragmatic solution would then be to consider the minimum number of the image to stay on the safe (conservative) side.
  • Otherwise, if you have access to the model residuals in some regions, this is prescisely the number of non-zero singular values of the cross-voxel residual matrix.
  • Additional comment: as often in this field, people are obsessed by subtle biases, and they don’t realize that they create more variable results by over-designing their model specification. Having too adaptive models is not a good idea I’m afraid.
    My 2c,
    Bertrand

Thanks @bthirion! Sorry for the delay in responding, but your answer was very helpful. It seems like using the minimum value is the way to go for my needs (depending on how many DOFs the denoising algorithm actually removes).