Identifying connections between dots in connectome

I know that coords_connectome in this example gives the 3D coodinates of each dot, but is there any way to numerically identify the connections between each dot (as in which dots are connected to which other ones?)
Nilearn: Statistical Analysis for NeuroImaging in Python — Machine learning for NeuroImaging

Hi @scrambledegg

I don’t think we have a public function that does directly and exactly this in Nilearn, but I think you should be able to do the following to threshold your adjacency matrix:

import numpy as np
from scipy.stats import scoreatpercentile
from nilearn._utils.param_validation import check_threshold

# I'm using this as the adjacency matrix
A = np.random.random((100, 100))
# Using 90% for the edge threshold as in the example you linked
t = check_threshold(
    "90%", np.abs(A.ravel()), scoreatpercentile, 'edge_threshold'
)
# Get the connections after thresholding
A[np.abs(A) < t] = 0

HTH,
Nicolas

Sorry can you please explain what A is?

It is the connectivity matrix. In the example you linked, you’d replace A by mean_correlations.

Just so I can confirm that I understand:

I applied this to my own code independent from the docs and got 25 regions. Printing mean_correlations shows a matrix which is composed of 25 sub-matrices. Each sub-matrix represents a region, and each element of the sub-matrix indicates the magnitude of correlation between that region and one of the other 25 regions, right? For example, the 1st region has a 0.736 correlation with the 6th region.

Do I have this right?

Hi @scrambledegg

I’m not sure to follow here. I don’t know what computations you are doing in your own code, but in the example you linked, you have the following:

  • n_subject=20 This is specified in the data fetcher at the begining
  • For each subject, you have a (50, 59, 50, 168) image, that is the length of time series will be 168
  • The RegionExtractor extracts signals of length 168 for n_regions_extracted regions which can vary (I have 20 and you seem to have 25)
  • Then, for each subject, you compute the correlations between time series. That is, or each subject, you have n_regions_extracted time series, each of length 168, so each correlation matrix is n_regions_extracted x n_regions_extracted, and you have n_subjects of these matrices.
  • You compute the mean across subjects: mean_correlations is thus n_regions_extracted x n_regions_extracted

So, mean_correlations[i, j] is the average correlation (across subjects) between signals extracted for region i and region j.

Does this make sense?

Nicolas

1 Like