Visualizing RDM dissimilarities on brain with NiLearn

33 Views Asked by At

I'm analyzing some open-source fMRI data... I've created Representational Dissimilarity Matrices (RDMs) from this fMRI data (6 participants, 450 brain patches per participant, for each brain patch I have an 8x8 RDM; 8 corresponds to the conditions). I averaged the dissimilarities across sequences and participants in order to find the average dissimilarity for every patch. I have MNI coordinates for each brain patch, so I want to visualize this on a brain. No matter what I do, I get a figure with brain slices, but without any data plotted on it...(see figures attached below). How can I fix that? This is my code:

with open("saved_areas.areas", "rb") as f:
    data = pickle.load(f)
    areas = data["areas"]
    super_areas = data["super_areas"]
areas = list(map(lambda x: str(x), areas))
super_areas = list(map(lambda x: str(x), super_areas))

info = mat73.loadmat("SurfPatch_info.mat")
coords = info["MNIcoord"]
hemis_info = info["hemis"]

group1_rdms = rsa.rdm.concat([create_rdms(i, super_areas) for i in range(1, 6)])

#get dissimilarities
rdm_dissimilarities = group1_rdms.dissimilarities
#average dissimilarities across sequence
avg_dissimilarities_across_seq = np.mean(rdm_dissimilarities, axis=1)
normalized_dissimilarity_values = np.squeeze(MinMaxScaler().fit_transform(avg_dissimilarities_across_seq.reshape(-1,1)))

# find average across participants
rdm_patch_id = group1_rdms.rdm_descriptors["patch_id"]
unique_patch_id = np.unique(rdm_patch_id)
lh_patch_info = {}
rh_patch_info = {}
for patch_id in unique_patch_id:
    indices = np.where(rdm_patch_id == patch_id)
    dissimilarities_for_patch = normalized_dissimilarity_values[indices]
    average_dissimilarity = np.mean(np.abs(dissimilarities_for_patch), axis=0)
    mni_coord = coords[patch_id]
    hemisphere = hemis_info[patch_id]

    if hemisphere == 1:
        lh_patch_info[patch_id] = {
            "avg_dissimilarity": average_dissimilarity,
            "mni_coord": mni_coord,
            "hemisphere": hemisphere
        }
    elif hemisphere == 2:
        rh_patch_info[patch_id] = {
            "avg_dissimilarity": average_dissimilarity,
            "mni_coord": mni_coord,
            "hemisphere": hemisphere
        }

template_img = datasets.load_mni152_template()
plot_img = new_img_like(template_img, np.zeros(template_img.shape))


cmap = RDMcolormapObject(direction=1) # taken from rsatoolbox

lh_mask_data = np.zeros(template_img.shape)
for patch_id, info in lh_patch_info.items():
    mni_coord = info["mni_coord"]
    x, y, z = mni_coord
    x, y, z = int(x), int(y), int(z)
    avg_dissimilarity = info["avg_dissimilarity"]
    lh_mask_data[x, y, z] = avg_dissimilarity

rh_mask_data = np.zeros(template_img.shape)
for patch_id, info in rh_patch_info.items():
    mni_coord = info["mni_coord"]
    x, y, z = mni_coord
    x, y, z = int(x), int(y), int(z)
    avg_dissimilarity = info["avg_dissimilarity"]
    rh_mask_data[x, y, z] = avg_dissimilarity

lh_mask_img = new_img_like(template_img, lh_mask_data)
rh_mask_img = new_img_like(template_img, rh_mask_data)

coords = range(-20,40,5)

fig = plt.figure(figsize=(12,3))
display_lh = plotting.plot_stat_map(
    lh_mask_img, cut_coords=coords,
    display_mode="y", draw_cross=False, figure=fig,
    title=f"Left Hemisphere Dissimilarities", cmap=cmap,
    black_bg=False, annotate=False, colorbar=True
)

fig = plt.figure(figsize=(12,3))
display_rh = plotting.plot_stat_map(
    rh_mask_img, cut_coords=coords,
    display_mode="y", draw_cross=False, figure=fig,
    title=f"Right Hemisphere Dissimilarities", cmap=cmap,
    black_bg=False, annotate=False, colorbar=True
)

plt.show()

Example of figure that I get Example of figure that I get

What I am expecting to get What I am expecting to get - code for this is found here: https://github.com/rsagroup/rsatoolbox/blob/main/demos/demo_searchlight_volume.ipynb

0

There are 0 best solutions below