ICA-AROMA smoothing Kernel size

Hi everyone,
I have successfully run fMRIPrep pipeline on my language task-based fMRI dataset and i am trying to run afni_proc.py on my output results to do some regression and clustering analysis and find the activated regions during my tasks. My goal is compare those clusters with my current processing pipeline which uses only afni_proc.py to do time-shifting, alignment, volume registration, blurring (4 mm), masking , scaling and regression analysis. In an effort to see if ICA-AROMA cleaned dataset would give us a comparable or even better clusters, i have taken *space-MNI152NLin6Asym_desc-smoothAROMAnonaggr_bold.nii.gz & *desc-confounds_regressors.tsv files and regressed out the 6 motion parameters that was reported in my confound regressor.

However, I found out in AROMA process, first a spatial smoothing of size 6 mm is performed and then ICA-AROMA is applied. my current pipeline only does a 4 mm blur size, is there a way to change this default value to smaller size? more importantly is there a specific reason why blurring size of 6 mm was chosen? would it be possible to turn off this smoothing part before performing ICA-AROMA?

1 Like

I believe that that smoothing kernel is the only one AROMA has been validated on, so it may be necessary. That said, since denoising only requires the mixing matrix and classifications (i.e., component time series and whether the component is accepted or rejected), the smoothing kernel doesn’t really matter at that stage.

You should be able to run the denoising after fMRIPrep using the preprocessed data and the AROMA mixing matrix. Per the fMRIPrep documentation:

Additionally, the MELODIC mix and noise component indices will be generated, so non-aggressive denoising can be manually performed in the T1w space with fsl_regfilt, e.g.:

fsl_regfilt -i sub-<subject_label>_task-<task_id>_space-T1w_desc-preproc_bold.nii.gz \
   -f $(cat sub-<subject_label>_task-<task_id>_AROMAnoiseICs.csv) \
   -d sub-<subject_label>_task-<task_id>_desc-MELODIC_mixing.tsv \
   -o sub-<subject_label>_task-<task_id>_space-T1w_desc-AROMAnonaggr_bold.nii.gz

So you can just apply whatever smoothing kernel you want to the preprocessed data and then do the non-aggressive denoising on the newly smoothed data.

You could do that to the template-space output if you want template-space with the only difference being the smoothing kernel.

So lets say i take the fmriprep func output sub-<subject_label>_task-<task_id>_space-T1w_desc-preproc_bold.nii.gz and pass it through fsl_regfilt and the output i get from this function can become my input to afni_proc.py? then in afni_proc i can choose a different blur size for it? and do i have to regress (6) motion parameter from this denoised dataset?

However, if i choose to go with ICA-AROMA cleaned dataset in MNI-space (space-MNI152NLin6Asym_desc-smoothAROMAnonaggr_bold.nii.gz), this dataset has been smoothed by 6 mm in the process and i cant do anything about its size.

can i run your suggested fsl_regfilt on **sub-<subject_label>_task-<>task_id_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz rather than T1w space?

I guess you could run afni_proc.py on the data, but that seems like overkill. I’d just run a smoothing function directly, if that’s what you want done to the data. But yeah, you can just use whatever smoothing kernel you want.

I’ll paraphrase @rastko here (from ICA AROMA agg vs non-agg) and say that it may be a good idea to include other nuisance regressors (e.g., WM and CSF), but since correlation with motion parameters is a criterion for AROMA classification, it probably won’t help to include the motion parameters in your denoising step. Essentially, the motion parameters are almost certainly highly correlated with the “bad” components as classified by AROMA.

Yup.

So as i am reading more neurostar posts about this ICA-AROMA dataset, there is this concern that regressing out nuisance regressor that were calculated before AROMA denosing the dataset could introduce a structured noise to the residual noise series.

my end goal is to get the activation map for my language tasks, if performing afni_proc.py is an overkill on the data, Isnt it better to just take ICA-AROMA denoised dataset and perform clustering on it?

Hi @tsalo, sorry for bother you again, but i am still trying to find out the best approach for my fmri analysis. based on what i am reading, i have narrowed them to 3 approaches:

  1. taking non-AROMA dataset (_desc-preproc_bold.nii) and regressing out 6-motion parameters and motion outlier through afni_proc.py
  2. taking the non-aggressivly denoised AROMA dataset (smoothAROMAnonaggr_bold.nii.gz ) and regressing out the mean signal from WM and CSF?
  3. taking the non-AROMA dataset (_desc-preproc_bold.nii) and performing aggressive denoising using AROMA noise component (motion_AROMA#) + mean WM, CSF, global time series as well as discrete cosine frequencies. I am not sure, if i have understood this method right?
    In your experience, which route has been the most successful?

I’m not an expert on AROMA, but I think that number 3 best matches up with your original goal (i.e., use AROMA denoising on data with a different smoothing kernel). Based on Best practices for AROMA and fmriprep, it seems like a completely reasonable approach.

Thank you @tsalo for your recommendation. i will try it out on my dataset and compare the results.

Hi @tsalo @shervin.abd71

Sorry to open this 4-yo topic, but I am using AROMA with fMRIprep 23.0.2, and I am trying to locate the information about the spatial smoothing applied is 6mm, but I cannot find it on Outputs of fMRIPrep — fmriprep version documentation

I can only find here that smoothing is applied but now the size, could either of you please refer me to the source of this information?

Thank you in advance, and I understand if you are not able to retrieve this information years since this post was made.

Best,
Mohammed

fMRIPrep used a FWHM of 6 mm with SUSAN: fmriprep/fmriprep/workflows/bold/confounds.py at 60f706606ffa6d7a47b80ce7bfe5e0262c4dc037 · nipreps/fmriprep · GitHub

1 Like

Hi @tsalo,

I have a follow-up question, and I would appreciate it if you could give me some advice. I had a dataset already preprocessed with fMRIPrep v23.0.2. For a representational similarity analysis (RSA), I specifically need AROMA-denoised but unsmoothed BOLD time series. However, the v23.0.2 derivatives include only the *_desc-smoothAROMAnonaggr_bold.nii.gz outputs.

Could you please confirm the recommended way to obtain AROMA (non-aggressive) without final spatial smoothing?

  • Option A (my current plan): Use fsl_regfilt with the run’s MELODIC mixing matrix and AROMA noise ICs on the MNI space-preproc BOLD:
fsl_regfilt \
  -i sub-${Subject}_task-${ask_id}_${runnum}_space-MNI152NLin6Asym_res-2_desc-preproc_bold.nii.gz \
  -f "$(cat sub-${Subject}_task-${ask_id}_${runnum}_AROMAnoiseICs.csv)" \
  -d sub-${Subject}_task-sft_${runnum}_desc-MELODIC_mixing.tsv \
  -o $DIR2/sub-${Subject}/func/sub-${Subject}_task-${ask_id}_${runnum}_space-MNI152NLin6Asym_res-2_desc-AROMAnonaggr_bold.nii.gz
  • Option B: Run fMRIPost-AROMA to produce a *_nonaggrDenoised_bold.nii.gz output and treat that as the unsmoothed AROMA result.

Could you advise:

  1. Is Option A (regfilt on desc-preproc_bold using mixing.tsv + AROMAnoiseICs.csv) the correct/endorsed way to obtain unsmoothed AROMA-denoised data from an fMRIPrep v23.0.2 pipeline?
  2. If using fMRIPost-AROMA, should I expect the _nonaggrDenoised_bold output to be unsmoothed ? To my understanding, SUSAN 6 mm is applied only during ICA feature estimation, not to the final denoised time series.

Many thanks for your guidance!
Shanna

I don’t use fsl_regfilt, so I can’t speak to your command, but that’s general approach is entirely reasonable, and it is how I designed fMRIPost-AROMA to operate.

Yes, that’s correct. Some users have requested the smoothed version of the denoised data so I may make that an optional, additional output in the future, but the denoised data are unsmoothed.

Dear @tsalo,

Thank you so much for your reply.

As a brief update, I tested one subject with two approaches and observed approximately 0.x voxel-wise differences between them. This may suggest that my fsl_regfilt implementation may be missing some details than fMRIPost-AROMA. Thus, I feel that the more accurate approach is to run fMRIPost-AROMA directly on the fMRIPrep v23.0.2 derivatives and then use the resulting unsmoothed non-aggressive denoised BOLD for my RSA analyses. Is this correct?

However, I noticed that the header’s pixdim4 of denoised BOLD became 1 s, which is not my actual TR. I’m wondering whether this indicates a mistake in how I ran fMRIPost-AROMA, or fMRIPost-AROMA apply any additional implicit steps beyond the AROMA regression. I attached my script below for your reference.

apptainer run --cleanenv \
  --bind "${DATA}:/bids:ro" \
  --bind "${FMRIPREP_DERIV_DIR}:/derivs/fmriprep:ro" \
  --bind "${WORK_DIR}:/work" \
  --bind "${AROMA_DERIV_DIR}:/out" \
  "${SIF}/fmripost_aroma.sif" /bids /out participant \
  --participant_label "${Subject}" \
  -d fmriprep=/derivs/fmriprep \
  --denoising-method nonaggr \
  --stop-on-first-crash
  -w /work



Thank you again for your guidance.

Best regards,
Shanna

I think that should be fine. You can see how fMRIPost-AROMA applies the non-aggressive denoising in tedana’s documentation on different approaches to denoising data with ICA components, in case you want to compare the description to how you’re running FSL’s denoising function: Denoising Data with Components — tedana 25.0.1 documentation

That’s just a minor bug stemming from Nilearn’s masking functions. It should be fixed in 0.0.12 though.

Dear @tsalo,
Thank you very much for your reply—and my apologies for the many questions. I wanted to share two updates and ask for your guidance:

  1. After cross-checking, I found that the mixing matrix and AROMA noise IC list produced by fMRIPrep v23.0.2 differ from those produced when I rerun postfmri_aroma on the same run, especially in the number of noise ICs. I also noticed that postfmri_aroma’s results change depending on whether the inputs include fieldmaps and FreeSurfer outputs.
  • Is this difference expected (e.g., due to re-running MELODIC/AROMA with slightly different preprocessing, masks, or parameters)?
  • For postfmri_aroma, should I provide the full fMRIPrep derivatives set, or is there a recommended minimal set of inputs?
  1. As a sanity check, I used the postfmri_aroma-generated mixing + noise IC list with fsl_regfilt, and the output matched its noaggressivearoma.nii.gz exactly—so my fsl_regfilt command appears correct. Given that I already have fMRIPrep’s mixing and AROMAnoiseICs, I proceeded by applying fsl_regfilt to fMRIPrep’s MNI152NLin6Asym_res-2_desc-preproc_bold to obtain unsmoothed non-aggressive AROMA-denoised data.

Thank you again for your time and guidance. Any additional pointers or best-practice notes would be greatly appreciated.

Shanna

The ICA components produced by MELODIC will vary based on even minor differences in the input data, as well as the random seed being used, so I would fully expect differences in the resulting components from even minimally different pipelines.

Right now I think fMRIPost-AROMA only uses the full derivatives. We plan to support minimal inputs (e.g., the outputs of a --level minimal fMRIPrep run), but haven’t gotten around to it yet.

While some inputs from a full fMRIPrep run won’t be used by fMRIPost-AROMA, I don’t have a comprehensive list on hand so I’d recommend just passing in the full derivatives dataset.

Dear @tsalo,
Thank you so much for your reply; that really helps.

Best,
Shanna