Nilearn provides a nice example of how to do seed-based functional connectivity analysis. To do this they extract the mean time course from the seed ROI, and then calculate voxelwise correlations for the entire brain.
How is this different/superior to extracting the mean seed ROI signal and running a GLM, and obtaining voxelwise betas (and from them t-statistics)?
the two are equivalent (you could convert correlations to t-values etc.)
formally a glm brings the advantage of including confounding covariates, signals from other regions etc. explicitly (can be done implicitly by regressing out the signals priori to correlation computation, but making it explicit is arguably better)
I’m not sure that the t-statistics is super interesting, because it amounts to rejecting the null hypothesis that there is no correlation between the regions – arguably not such an interesting null hypothesis.
We haven’'t included it in nilearn so far, because the formalism is heavier with a glm for little practical interest.
The formalism argument indeed makes sense. I don’t however understand why the t-statistic would be testing a less interesting hypothesis if it is actually equivalent to Pearson’s r.
People tend to interpret t statistics as inferential statistics (evidence against the null) – they implicitly or explicitly convert it to a p-value. There is some nuance between stating ‘the correlation between PCC and hippocampus is .28’ and ‘the correlation between PCC and hippocampus is z=3.18’
I have 2 comments about that
quite often, the p-value associated with the z or t score does not hold because there are unfulfilled assumptions (correlated noise etc)
absolute connectivity values should be interpreted with caution. Some arbitrary preprocessing choices (global signal regression etc.) can alter them quite dramatically. In my view, what matters is how this varies across conditions (individuals, groups, etc.), assuming that this does not fluctuate too much owing to preprocessing choices --this has to be checked of course.
Hi! I stumbled upon this thread while trying to figure out how to do my second-level analysis in a seed-based connectivity data analysis. I have followed DartBrains tutorial for the first-level analysis which uses nltools and a GLM approach. The output of such an analysis is beta-values, which are related to correlation but not the same, as pointed out above. My question is if I should convert the beta values to actual correlation before moving onto the second-level analysis? The CONN toolbox seems to work only with correlations by converting the beta-values to correlations by multiplying them with the sample variances. They also use the Fisher transformation. However, in doing the GLM approach you are not working with denoised data, since the denoising happens at the same time as the regression, therefore it is not straight forward how to calculate the standard deviation of the time series that is needed to convert the beta-values to correlation.
To summarize: What is the most appropriate approach for the second-level analysis when using a GLM approach in seed-based connectivity analysis?
I’ve been getting quite deeply into this topic. I’ve been trying to learn Nilearn while also getting my head around the concepts behind functional connectivity. So far, I feel like I’ve failed at both
Here is my Jupyter notebook, which I built based on the Nilearn and DARTBrain tutorials. I understand that there are operational differences between the two approaches, but I would really appreciate your help with a few questions:
If, for example, CONN uses a GLM-based approach, how does it handle low-pass filtering? In the Nilearn GLM approach, the only filtering option I can see is the cosine high-pass filter, which does not allow for low-pass filtering, unlike filtering the time series directly before performing the correlation analysis.
Is there a ready-to-use command-line tool for performing seed-based functional connectivity analysis? I find it somewhat cumbersome to run all participants through a Jupyter notebook like this.
I’ve noticed that standardize="zscore_sample" does not seem to work with the make_first_level_design_matrix function. I’ve included a few examples at the end of my notebook. Am I doing something incorrectly, or could this be a bug that I should report on the Nilearn GitHub repository?
I’d be very grateful for any comments or suggestions, especially if I’m misunderstanding something fundamental about these approaches.