原文链接:HyPyP:用于脑内连接分析的超扫描Python方式
作者:超爱猫咪的苏苏
HyPyP可以处理由两个或两个以上参与者组成的小组的数据,数据可以在同步超扫描记录背景中收集,也可以在非同步设置中收集。
HyPyP库提供了一套Python工具来操作超扫描数据和大脑间连通性测量。使用社区驱动的视角,代码是开放源码的,根据三条款BSD许可进行许可,并可在此地址进行编辑(https://github.com/GHFC/HyPyP)。
运行HyPyP需要python3.7(或更高版本)以及主要的数据科学库,比如数值计算库,机器学习算法库,数据分析,以及绘图数据库。
HyPyP还利用了其他社区驱动的库,比如用于处理M/EEG信号的MNE库,以及用于预处理和抑制伪影的自动抑制库。最后,一些支持连接性度量的指标也依赖于Astropy包。
HyPyP工具箱的设计是与MNE- Python集成的,MNE Python是一个能够在大脑内部进行全面的M/EEG数据分析的软件包。
您可以在链接中找到有关HyPyP文档的完整文档和应用程序编程接口(API)描述(https://hypyp.readthedocs.io),Github页面上还提供了一个关于玩具数据集的详细教程(http://github.com/GHFC/HyPyP)并说明了目前的HyPyP版本能让社会神经科学的研究人员做些什么。
在使用HyPyP之前,需要使用适当的MNE函数将每个条件和参与者的原始数据文件转换为epoch。epoch是分析脑电图信号最常用的方法之一;
MNE生态系统有一个专用对象,该对象在数据数组中包含信号,并在元数据字典中包含所有相关参数——比如通道名称、坏通道、频率、样本频率。
下面,我们将说明如何用mne.read_epochs()函数从两个参与者的示例脑电图数据集加载epoch。
Loading data files
epochs1 = mne.read_epochs(os.path.join(’…’,‘data’,“participant1-epo.fif”),preload=True)
epochs2 = mne.read_epochs(os.path.join(’…’,‘data’,“participant2-epo.fif”),preload=True)
[prep.ICA_fit, prep.ICA_choice_comp,prep.AR_local]是对MNE Python和Autoreject函数的一种改编,获取epoch并将其返回干净。
这个过程包括拒绝坏的时段,拒绝或插入每个参与者的部分坏频道,然后在参与者之间删除相同的频道和相同的时段;
因此,只有对所有参与者“有益”的通道和epoch得以保留。独立成分分析(ICA)去除也在参与者之间匹配,这样类似的ICs在参与者之间被拒绝:
ICA_fit将使用Autoreject计算一个全局拒绝阈值,然后在给定的一组时间上拟合独立分量分析,ICA_choice_comp将为每个参与者绘制独立的组件,让用户选择作为工件拒绝模型的相关组件,并在epoch上应用ICA;AR_local将在第二步应用Autoreject:
computing global AR and ICA on epochs
icas=prep.ICA_fit(epochs=[epochs1,epochs2],n_components=15, method=‘infomax’,fit_params=dict(extended=True),random_state=42)
selecting components semi-automaticallyand remove them
cleaned_epochs_ICA=prep.ICA_choice_comp(icas,epochs=[epochs1, epochs2])
然后会询问您希望将哪个参与者用作模板,之后会询问您希望将来自该参与者的哪个IC用作模板
[utils.merge]从每个参与者获取时间段,将其对齐并合并到单个数据文件中(无论参与者数据是记录在一个文件中还是记录在单独的文件中)。
当用户已经将数据加载到MNE中,并且只想连接同一MNE结构中的多个参与者时,这一点尤其重要。要创建一个超级数据集,将存储在epo1和epo2的两个记录组合在一起,这很简单:
hyper_epo = merge(epochs_S1=epochs1,epochs_S2=epochs2)
[utils.merge]同时也采用了之前预处理过的记录:用户可以直接加载数据来可视化(坏的频道仍然会被考虑在内)。
分别是 [utils.split]获取一个包含两个参与者数据合并和用“_1”和“_2”表示参与者1和2的频道名称的单个超级时段,并将其拆分为两个单个参与者时段:
epochs1, epochs2 = split(hyper_epo)
[分析.pow]从预处理的时间序列计算韦氏功率谱密度(PSD)。参数n_fft表示快速傅里叶变换(FFT)的长度。
fmin和fmax设置实际计算功率谱密度的最小(fmin)和最大(fmax)频率在freq_list中返回。n_per_seg表示每个Welch段的长度。
用户可以在各个时间段内平均PSD值(epochs_average=True),也可以保留完整的时间过程。
这里举例来说,感兴趣的频带仅限于Alpha_Low,即功率谱的频率实际计算的密度将在freq_list中返回,并且PSD值在各个时期内取平均值:
此外[analyses.compute_freq_bands]以及[analysis.compute_sync]获取预处理的时间段,分析信号,并返回不同的个体间大脑连通性的测量值(实现的指标见路线图表2)。
与PSD类似,用户可以在不同的时段(epochs_average=True)平均连接值,也可以保留完整的时间过程。
我们首先计算每个频带的解析信号,然后计算频率-和时间-频率-域连接性,这里我们使用“ccorr”,即循环相关系数。
然后我们对结果进行切片,得到矩阵的大脑间部分,例如,我们选择Alpha_Low并计算Cohens’D进行进一步分析。
complex_signal = analyses.compute_freq_bands(data=[preproc_S1,preproc_S2], freq_bands)
result =analyses.compute_sync(complex_signal, mode=‘ccorr’)
n_ch = len(epochs1.info[‘ch_names’])
theta, alpha_low, alpha_high, beta, gamma =result[:, 0:n_ch, n_ch:2*n_ch]
values = alpha_low values -=np.diag(np.diag(values))
C = (values - np.mean(values[:])) /np.std(values[:])
这个过程也可以应用于个体内部的大脑连接,以支持单个参与者的分析。此外,函数中的模式参数可以进行不同的连接测量(请参阅2.3部分的脑内连接测量)。这为每个时间段生成连接矩阵(图2B)。
这里我们将结果切片得到矩阵的脑内部分,例如我们选择Alpha_Low和compute Cohens 'D进行进一步分析。
for i in [0, 1]:
theta, alpha_low, alpha_high, beta, gamma =result[:, i:i+n_ch, i:i+n_ch]
values_intra= alpha_low
values_intra -=np.diag(np.diag(values_intra))
C_intra= (values_intra - np.mean(values_intra[:])) / np.std(values_intra[:])
我们也可以直接抽取CSD值进行统计分析:result_intra.append(C_intra)
[stats.statsCond] and [stats.statscondCluster]改编自MNE-Python统计测试:针对多重比较校正的参数t检验和使用预定义阈值的非参数聚类级统计置换测试(分别为alpha和alpha_bonferroni),通过跨空间的通道连接和频率(频率列表、信道频率)。
置换测试可以用来测试零假设,从调节二元体内的脑间同步到参与者组之间(图3)。
两个函数都采用功率谱密度或个体间大脑连通性测量(结果或数据)和返回统计值。简单的t检验,我们使用参数函数统计排列测试;
因为这个函数通过测试(变量,即通道),用户可以在频率维度平均PSD但不能将此函数应用于通过n个通道具有n个通道的连接值最小尺寸。
psd1_mean =np.mean(psd1.psd, axis=1)
psd2_mean =np.mean(psd2.psd, axis=1)
X =np.array([psd1_mean, psd2_mean])
T_obs, p_values, H0= mne.stats.permutation_t_test(X=X,n_permutations=5000, tail=0, n_jobs=1)
HyPyP简单参数t检验基于相同的MNE函数,我们为该函数添加了一个Bonferroni校正来进行多重比较
statsCondTuple=stats.statsCond(data=data_psd,epochs=preproc_S1,n_permutations=5000,
alpha_bonferroni=0.05,alpha=0.05)
对于非参数的基于聚类的排列,我们根据通道的位置(例如在Alpha_Law波段)在空间和频率之间创建了一个先验连通性矩阵。
con_matrixTuple = stats.con_matrix(preproc_S1,freqs_mean=[7.5, 11])
ch_con_freq = con_matrixTuple.ch_con_freq
我们为PSD创建了两个假组,有两倍的“参与者1”和两倍的“参与者1”,并对两者进行比较。
data_group = [np.array([psd1.psd, psd1.psd]),np.array([psd2.psd, psd2.psd])]statscondCluster=stats.statscondCluster(data=data_group,freqs_mean=psd1.freq_list,ch_con_freq=scip.sparse.bsr_matrix(ch_con_freq), tail=0, n_permutations=5000, alpha=0.05)
我们还可以使用HyPyP非参数基于聚类的排列测试来比较参与者之间的大脑连接值。为此,我们必须根据通道的位置,在空间和频率之间创建一个先验连通性矩阵。
con_matrixTuple =stats.con_matrix(epochs=preproc_S1, freqs_mean= np.arange[7.5, 11], draw=False)
请注意,对于连接性,计算频率bin中从fmin到fmax的每个整数的值,freqs_mean=np.arange(fmin, fmax)在PSD中,它取决于n_fft参数psd.freq_列表
对于CSD,每个频率的值都是平均的,因此在校正集群时不需要考虑频率
ch_con =con_matrixTuple.ch_con
我们又创建了两个假组,有两倍的“参与者1”和两倍的“参与者2”。
例如,在Alpha_Law带中:
Alpha_low = [np.array([result_intra[0], result_intra[0]]), np.array([result_intra[1],result_intra[1]])]
statscondCluster_intra= stats.statscondCluster(data=Alpha_Law, freqs_mean= [7.5, 11],
ch_con_freq=scipy.sparse.bsr_matrix(ch_con), tail=0,n_permutations=5000, alpha=0.05)
最后,我们可以将大脑内连接值与替代信号进行比较。目前,在HyPyP中还没有实现建代理信号,但是您可以比较主体之间的内部连接。
在两个参与者之间没有考虑通道之间先验连接。以Alpha_Low band为例(见上文),我们又创建了两个假组,其中的“participant1”和“participant2”各两倍:
data = [np.array([values, values]),np.array([result_intra[0],
result_intra[0]])] statscondCluster = stats.
statscondCluster(data=data, freqs_mean=np.arange(7.5, 11),
ch_con_freq=None, tail=0, n_permutations=5000, alpha=0.05)
我们可以将T值可视化,用于通道的统计分析或仅用于重要通道的统计分析。如:viz.plot_significant_sensors(T_obs_plot=statsCondTuple.T_obs,epochs=preproc_S1)
我们还可以看到大脑间连接的统计调制[viz.plot_sensors_2d,viz.plot_links_2d,viz.plot_sensors_3d,viz.plot_links_3d]采取个体间大脑连接的通道位置和矩阵,以可视化大脑间的联系投影在二维或三维头部模型上(二维头部模型可视化基于matplotlib-3D)(图2C)。
![图2:HyPyP工具箱在二元社会互动研究中的应用实例。(A)两个参与者参与交互社会互动的超扫描装置示意图(B)记录被分为不同的时间段,大脑信号被转换成包含大脑内部和内部连通性测量的连通矩阵。(C)通过对比两组不同的人或不同的条件,可以直观地看到脑间连接的统计调节![](https://img-blog.csdnimg.cn/20210509141953127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDA1MjI1Ng==,size_16,color_FFFFFF,t_70)
坏的频道用不同的符号显示(交叉与点)。顺序的红色颜色图表示正连接值,蓝色表示负连接值。线的厚度随着连接强度的增加而增加(见图2C)。
超扫描Python管道(HyPyP)是一个分析工具箱,旨在支持(社会)神经科学家对比较两个或更多参与者的大脑数据进行研究。
它已经整合了核心工具来运行从预处理到可视化的大脑间连通性测量,并将以社区驱动的方式继续改进。HyPyP提供的特定工具将促进标准化个体间神经生理分析,以支持社会神经科学研究的科学进步和可复制性。
参考文献:Ayrolles, A., Brun, F., Chen, P., Djalovski, A., Beauxis, Y., Delorme, R., Bourgeron, T., Dikker, S., & Dumas, G… (2021). HyPyP: a Hyperscanning Python Pipeline for inter-brain connectivity analysis. Social Cognitive and Affective Neuroscience, 16(1-2), 72–83.
关于HyPyP更详细的资料,欢迎关注我们~