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
What I am expecting to get
- code for this is found here: https://github.com/rsagroup/rsatoolbox/blob/main/demos/demo_searchlight_volume.ipynb