【茗創(chuàng)科技】fMRI連接性分析
傳統(tǒng)的多變量fMRI技術(shù)側(cè)重于局部區(qū)域(ROI或探照燈)活動(dòng)模式中的信息。有時(shí),相關(guān)信息可能會(huì)跨腦區(qū)網(wǎng)絡(luò)表示,因此無法通過ROI分析或探照燈識(shí)別。功能連接測量有助于在全局范圍內(nèi)檢查相距較遠(yuǎn)的腦區(qū)的信息,重點(diǎn)關(guān)注網(wǎng)絡(luò)交互而不是空間定位。在執(zhí)行連接性分析時(shí),將跨區(qū)域比較BOLD時(shí)間序列(通常使用相關(guān)性指標(biāo)),并且關(guān)系的大小決定了它們的功能連接強(qiáng)度。通過包含或排除刺激/任務(wù)變量,我們可以研究不同認(rèn)知狀態(tài)對連接性的調(diào)節(jié)。本文接下來將描述如何運(yùn)行基于種子的連接分析,以及使用圖譜來進(jìn)行分割和定義種子點(diǎn)(基于Python)。

使用的數(shù)據(jù)集來自Hutchinson等人(2016)的研究,要求被試(在每個(gè)block中)注意左側(cè)或右側(cè)的一個(gè)場景。下面是描述數(shù)據(jù)集的README文件。該數(shù)據(jù)集經(jīng)過運(yùn)動(dòng)校正和線性去趨勢預(yù)處理。README:注意和連接在神經(jīng)層面,注意由頂葉和額葉皮層控制,它們調(diào)節(jié)感覺系統(tǒng)的加工,增強(qiáng)關(guān)注信息并抑制未關(guān)注的信息。因此,為了研究注意對感知加工的影響,不僅需要檢查局部大腦區(qū)域,還需要檢查這些區(qū)域如何相互作用。此時(shí),檢查局部大腦區(qū)域活動(dòng)模式的傳統(tǒng)MVPA技術(shù)是不夠的,因而需要更全面的分析。在這種情況下,兩個(gè)或多個(gè)大腦區(qū)域的共變反應(yīng)變得至關(guān)重要,功能連接測量對于研究這些現(xiàn)象是很關(guān)鍵的。

a、創(chuàng)建刺激標(biāo)簽和時(shí)移
從刺激時(shí)序文件中,我們需要為BOLD數(shù)據(jù)中的每個(gè)TR創(chuàng)建標(biāo)簽。因?yàn)橛性摂?shù)據(jù)集的FSL起始文件,所以可以在BrainIAK中使用fmrisim為每個(gè)TR創(chuàng)建標(biāo)簽。這涉及調(diào)用在utils中定義的generate_stimfunctionthen和shift_timingutils。
## 時(shí)移與否?在傳統(tǒng)的MVPA分析中,對BOLD信號進(jìn)行時(shí)移以考慮血流動(dòng)力學(xué)的時(shí)滯情況。在功能連接分析中,有時(shí)不進(jìn)行時(shí)移以確保被比較的體素在刺激呈現(xiàn)之前、期間和之后是相似的。如果不對數(shù)據(jù)進(jìn)行時(shí)移,可以設(shè)置“shift_size = 0”。注意:這里設(shè)置了‘shift_size = 2’。





d、掩膜和提取全腦數(shù)據(jù)
使用nilearn從數(shù)據(jù)集中創(chuàng)建掩膜,然后從掩膜中提取數(shù)據(jù)。此函數(shù)也可以獲得數(shù)據(jù)的z分?jǐn)?shù)。接下來,先繪制一些體素的時(shí)間過程。


創(chuàng)建種子
此時(shí),已經(jīng)加載了兩個(gè)實(shí)驗(yàn)條件的全腦數(shù)據(jù)。為了檢驗(yàn)注意力的影響,我們將創(chuàng)建種子ROI,并將它們的活動(dòng)與大腦中的其他體素相關(guān)聯(lián)。對于與種子ROI相關(guān)的任何體素,可以推斷它們在功能上是相互聯(lián)系的。
a、創(chuàng)建球形ROI
創(chuàng)建一個(gè)ROI來定義海馬旁區(qū)域(PPA),這是一個(gè)場景選擇區(qū)域,因?yàn)樵搶?shí)驗(yàn)數(shù)據(jù)集中呈現(xiàn)了場景刺激,并使用MNI空間中的坐標(biāo)來識(shí)別個(gè)體被試的區(qū)域。
Nilearn有一些用于繪制ROI的強(qiáng)大工具。這些功能使我們能夠靈活地識(shí)別任何形狀的ROI,并具有多個(gè)參數(shù),如平滑、去趨勢、濾波和標(biāo)準(zhǔn)化。但是,使用這些函數(shù)時(shí)很容易出錯(cuò),所以要謹(jǐn)慎使用這些參數(shù)。接下來將使用nilearn中最基本的Sphere ROI函數(shù)。
b、繪制掩膜的Bold信號
計(jì)算并繪制掩膜中所有體素的平均Bold信號。

計(jì)算相關(guān)矩陣
使用相關(guān)矩陣評估功能連接性。這些矩陣中的每個(gè)單元格反映了一對體素或區(qū)域之間BOLD時(shí)間序列的相關(guān)性,并且可以為每種條件甚至每個(gè)試次單獨(dú)計(jì)算矩陣。這里,將通過一種基于循環(huán)的方法來計(jì)算大腦中每個(gè)體素與PPA種子區(qū)域的相關(guān)性。





從圖譜創(chuàng)建種子
除了創(chuàng)建我們自己的種子ROI,還可以使用可用的圖譜(哈佛-牛津皮質(zhì)圖譜)來提取ROI。Nilearn提供了一種簡單的方法來實(shí)現(xiàn)這一點(diǎn)。
atlas = datasets.fetch_atlas_harvard_oxford('cort-maxprob-thr25-2mm')
atlas_filename = atlas.maps
圖譜就保存在這里。
print("Atlas path: " + atlas_filename + "\n\n")
?繪制ROIs
plotting.plot_roi(atlas_filename);
print('Harvard-Oxford cortical atlas')

打印標(biāo)簽
?創(chuàng)建一個(gè)圖譜數(shù)據(jù)的Pandas數(shù)據(jù)框架,以便于檢查
atlas_pd = pd.DataFrame(atlas)
print(atlas_pd['labels'])

創(chuàng)建一個(gè)掩膜對象,可以用它來選擇ROIs
masker_ho=
NiftiLabelsMasker(labels_img=atlas_filename)
print(masker_ho.get_params())
將圖譜應(yīng)用到Nifti對象,這樣就可以從單個(gè)parcels/ROIs中提取數(shù)據(jù)
bold_ho = masker_ho.fit_transform(nii)
print('shape: parcellated bold time courses: ', np.shape(bold_ho))
前面計(jì)算了單個(gè)種子區(qū)域隨時(shí)間變化的平均活動(dòng)。但是,Nilearn有一些工具可以輕松計(jì)算提供給掩膜對象的所有ROI的活動(dòng)時(shí)間進(jìn)程。
1. 僅獲取用于右側(cè)注意的數(shù)據(jù)
bold_ho_r = bold_ho[(right_stim_lag==1),:]
2. 我們的數(shù)據(jù)結(jié)構(gòu)是什么樣的?
print("Parcellated data shape (time points x num ROIs)")
print("All time points ?", bold_ho.shape)
print("Rightward attention trials: ", bold_ho_r.shape)
3. 提取一個(gè)對應(yīng)于后海馬旁皮層的ROI
# 意標(biāo)簽#35是海馬旁回,后部。
roi_id = 34
bold_ho_pPHG_r = np.array(bold_ho_r[:, roi_id])
bold_ho_pPHG_r = bold_ho_pPHG_r.reshape(bold_ho_pPHG_r.shape[0],-1)
print("Posterior PPC (region 35) rightward attention trials: ", bold_ho_pPHG_r.shape)
plt.figure(figsize=(14,4))
plt.plot(bold_ho_pPHG_r)
plt.ylabel('Evoked activity');
plt.xlabel('Timepoints');
sns.despine()


1. 將整個(gè)大腦時(shí)間進(jìn)程與所提取的種子相關(guān)聯(lián)
corr_pPHG_r, corr_fz_pPHG_r = seed_correlation(
? ?bold_wb_r, bold_ho_pPHG_r
)
2. 打印相關(guān)性范圍
print("PHG correlation Fisher-z transformed: min = %.3f; max = %.3f" % (
? ?corr_fz_pPHG_r.min(), corr_fz_pPHG_r.max())
)
3.繪制直方圖
plt.hist(corr_fz_pPHG_r)
plt.ylabel('Frequency');
plt.xlabel('Fisher-z score');
## PHG相關(guān)Fisher-z轉(zhuǎn)換:min=-0.656;最大值=1.088

1.映射到整個(gè)大腦圖像
img_corr_pPHG_r = masker_wb.inverse_transform(
? ?corr_fz_pPHG_r.T
)
threshold = .8
2. 使用分割法找到該ROI的切割坐標(biāo)
roi_coords = plotting.find_parcellation_cut_coords(atlas_filename,label_hemisphere='left')
3. 提取這個(gè)ROI的坐標(biāo)
roi_coord = roi_coords[roi_id,:]
4. 在一個(gè)標(biāo)準(zhǔn)的大腦中繪制相關(guān)圖
# 為了比較,還可以繪制之前創(chuàng)建的球體的位置
h2 = plotting.plot_stat_map(
? ?img_corr_pPHG_r,
? ?threshold=threshold,
? ?cut_coords=roi_coord,
)
5. 繪制玻璃腦
plotting.plot_glass_brain(
? ?img_corr_pPHG_r,
? ?threshold=threshold,
? ?colorbar=True,
? ?display_mode='lyrz',
? ?plot_abs=False
)


a、計(jì)算parcels之間的連接
可以計(jì)算跨多個(gè)大腦區(qū)域的相關(guān)性。當(dāng)我們想研究不同大腦區(qū)域的注意力情況時(shí)就很有用。這里將使用不同的方式繪制連接矩陣。
1. 設(shè)置連接對象
correlation_measure = ConnectivityMeasure(kind='correlation')
2.計(jì)算每個(gè)parcel與所有其他parcel的相關(guān)性
corr_mat_ho_r = correlation_measure.fit_transform([bold_ho_r])[0]
3. 為了更好地進(jìn)行可視化,移除對角線(guaranteed to be 1.0)
np.fill_diagonal(corr_mat_ho_r, np.nan)
4.繪制相關(guān)矩陣
# 這里使用的是哈佛-牛津皮質(zhì)圖譜的標(biāo)簽
# 從背景(0)開始,因此跳過了第一個(gè)標(biāo)簽
fig = plt.figure(figsize=(11,10))
plt.imshow(corr_mat_ho_r, interpolation='None', cmap='RdYlBu_r')
plt.yticks(range(len(atlas.labels)), atlas.labels[1:]);
plt.xticks(range(len(atlas.labels)), atlas.labels[1:], rotation=90);
plt.title('Parcellation correlation matrix')
plt.colorbar();

1. 或者,我們也可以使用Nilearn的繪圖函數(shù)進(jìn)行繪制
plotting.plot_matrix(
? ?corr_mat_ho_r,
? ?cmap='RdYlBu_r',
? ?figure=(11, 10),
? ?labels=atlas.labels[1:],
)

繪制連接組
Nilearn中有一些繪制連接體的工具,如plotting.plot_connectome取逐個(gè)節(jié)點(diǎn)的相關(guān)矩陣和逐個(gè)節(jié)點(diǎn)的坐標(biāo)矩陣,然后創(chuàng)建一個(gè)連接組。閾值可用于僅顯示強(qiáng)連接。
1. 加載圖譜
atlas_nii = nib.load(atlas_filename)
atlas_data = atlas_nii.get_data()
labels = np.unique(atlas_data)
2. 遍歷所有ROIs
coords = []
for label_id in labels:
3.跳過背景
? ?if label_id == 0:
? ? ? ?continue
4. 提取掩膜內(nèi)的ROI ? ?
? ?roi_mask = (atlas_data == label_id)
5.創(chuàng)建為nifti對象,這樣就可以由cut coords算法讀取
? ?nii = nib.Nifti1Image(roi_mask.astype('int16'), atlas_nii.affine)
6.找到連接組的質(zhì)心
? ?coords.append(plotting.find_xyz_cut_coords(nii))
7.繪制連接組
plotting.plot_connectome(correlation_matrix_mcg, coords, edge_threshold='95%')

往期推薦:Nilearn:繪制大腦圖像小伙伴們點(diǎn)個(gè)“在看”
