最近看论文看到功能性连接的内容,简单学习,浅记一下,方便以后查阅。
功能性连接 Functional connectivity
Functional Connectivity (功能连接性) 是脑电信号分析中的一个重要概念,指的是不同大脑区域之间的协同活动或关联性。它通常通过量化各脑区间的信号相关性来揭示大脑在不同任务或状态下的网络活动。功能连接性可以帮助我们理解大脑不同区域如何相互作用,尤其是在认知功能、情绪调节、感知以及其他行为过程中。
在脑电信号处理(EEG)中,功能连接性通常是通过以下几种方法来评估的:
1. 相关性分析 (Correlation)
相关性分析是最基本和最常见的功能连接性度量方式之一。它通常通过计算不同脑区之间的信号相关性来评估它们的协同活动。可以通过计算皮尔逊相关系数、斯皮尔曼相关系数等来得到不同通道间的相关性。具体步骤如下:
- 步骤1:提取感兴趣的脑区信号(例如,从EEG信号中选取不同电极或频段的信号)。
- 步骤2:计算这些信号之间的相关性(例如,计算两个脑区信号的皮尔逊相关系数)。
- 步骤3:如果两个脑区的信号相关性较高,表示它们之间有较强的功能连接性。
优点:
- 简单直观,计算开销小。
- 对于同步性较强的信号表现良好。
缺点:
- 对于非线性或延迟相关性不敏感。
- 容易受到噪声的影响。
代码实现
import numpy as np
import matplotlib.pyplot as plt
# 假设 data 是一个形状为 (n_channels, n_samples) 的 NumPy 数组
data = np.random.randn(64, 1024) # 64个通道,1024个样本
# 计算两个通道之间的皮尔逊相关系数
corr_matrix = np.corrcoef(data)
# 可视化相关性矩阵
plt.imshow(corr_matrix, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.title("Correlation Matrix")
plt.show()
2. 相位同步 (Phase Synchronization)
相位同步度量方法主要关注不同脑区之间的相位一致性。脑电信号是一个复杂的时间序列,信号的相位表示其周期性活动的状态。相位同步度量可以捕捉到非线性和非平稳的协同活动,常用的方法包括 相位锁定值(PLV) 和 相位差(Phase Lag Index, PLI)。
-
相位锁定值(PLV):通过测量不同信号的相位差,来评估两脑区之间的同步性。PLV 通过计算在时间上相位差的一致性来表示脑区间的同步性。
-
相位差指数(PLI):度量信号间相位差是否一致。如果两个信号的相位差稳定且恒定,则表示它们存在较强的功能连接性。
优点:
- 能够捕捉信号间非线性和非平稳的同步性。
- 对于存在时延的信号非常有效。
缺点:
- 计算复杂度较高,尤其是在长时间序列中。
- 对噪声的鲁棒性较差。
代码实现
import numpy as np
from scipy.signal import hilbert
def compute_plv(signal1, signal2):
# 使用希尔伯特变换获取相位信息
analytic_signal1 = hilbert(signal1)
analytic_signal2 = hilbert(signal2)
phase1 = np.angle(analytic_signal1)
phase2 = np.angle(analytic_signal2)
# 计算相位差
phase_diff = phase1 - phase2
# 计算相位锁定值
plv = np.abs(np.mean(np.exp(1j * phase_diff)))
return plv
# 假设 data 是一个 (n_channels, n_samples) 的数据
channel1 = data[0, :]
channel2 = data[1, :]
plv_value = compute_plv(channel1, channel2)
print(f"PLV between channel 1 and 2: {plv_value}")
3. Granger因果关系 (Granger Causality)
Granger因果关系是用于分析不同时间序列之间因果关系的统计方法。在功能连接性的上下文中,它用来评估一个脑区的活动是否可以预测另一个脑区的活动。也就是说,如果一个脑区的活动在时间上对另一个脑区的活动有显著的预测作用,说明这两个区域之间存在功能连接。
- 步骤1:选择需要研究的脑区信号。
- 步骤2:使用回归分析等统计方法,测试一个脑区的信号是否能够预测其他脑区信号的变化。
优点:
- 可以揭示脑区之间的因果关系,而不仅仅是相关性。
- 能够反映大脑的动态交互。
缺点:
- 对数据的质量和预处理有较高要求。
- 计算复杂度较高,尤其是在多通道信号下。
代码实现
import numpy as np
from statsmodels.tsa.stattools import grangercausalitytests
# 假设 data 是一个 (n_channels, n_samples) 的 NumPy 数组
data = np.random.randn(64, 1024) # 64个通道,1024个时间点
# 选择两个通道的数据来进行Granger因果关系检验
channel1 = data[0, :] # 第一个通道
channel2 = data[1, :] # 第二个通道
# 将数据组合成一个 2D 数组,要求每列代表一个时间序列
data_combined = np.vstack([channel1, channel2]).T # 每列是一个时间序列
# 使用 Granger 因果关系检验,假设最大滞后为5
max_lag = 5
gc_test_result = grangercausalitytests(data_combined, max_lag, verbose=True)
4. 小世界网络模型 (Small-World Network)
小世界网络模型是一种描述大脑网络的拓扑结构的方法,尤其适用于评估功能连接性。该模型通过计算大脑不同区域之间的连接强度、效率以及分布等特征来描述大脑的网络结构。小世界网络模型具有以下特点:
- 高聚集性:网络中大多数节点是局部相连的。
- 短路径性:网络中任意两点之间的平均路径长度较短。
通过构建大脑区域间的网络图,可以用小世界指数等度量方法来评估大脑网络的效率和连接性。
优点:
- 能够系统地揭示大脑复杂的网络结构。
- 可以同时描述局部连接性和全局网络特性。
缺点:
- 计算较为复杂。
- 需要大量的连接数据和高质量的信号。
代码实现
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# 假设 corr_matrix 是你计算的相关性矩阵
# 构建一个小世界网络
G = nx.erdos_renyi_graph(64, 0.1) # 64个节点,连接概率为0.1
# 计算网络的集群系数和平均路径长度
clustering_coeff = nx.average_clustering(G)
avg_path_length = nx.average_shortest_path_length(G)
print(f"Clustering Coefficient: {clustering_coeff}")
print(f"Average Path Length: {avg_path_length}")
# 可视化网络图
nx.draw(G, with_labels=True)
plt.title("Small-World Network")
plt.show()
5. 独立成分分析(ICA)
独立成分分析(ICA)是一种盲源分离技术,通常用于从EEG信号中提取独立的信号源。在功能连接性分析中,ICA常用于提取大脑的独立成分,进而评估各个成分之间的相互关系。
- 步骤1:应用ICA算法分离脑电信号中的独立成分。
- 步骤2:计算不同成分之间的相关性或相位同步等指标,评估成分之间的连接性。
优点:
- 有助于从混合信号中提取源信号。
- 可以减少噪声的影响,得到更清晰的连接性分析。
缺点:
- 计算复杂度高,尤其在处理多通道数据时。
- 分离效果依赖于数据的预处理和选择。
代码实现
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# 假设 corr_matrix 是你计算的相关性矩阵
corr_matrix = np.random.rand(64, 64) # 64个通道的相关性矩阵
# 使用阈值化方法创建图(例如,保留相关性大于0.5的边)
threshold = 0.5
G = nx.Graph()
for i in range(corr_matrix.shape[0]):
for j in range(i+1, corr_matrix.shape[1]):
if corr_matrix[i, j] > threshold:
G.add_edge(i, j, weight=corr_matrix[i, j])
# 计算图的集群系数和网络效率
clustering_coeff = nx.average_clustering(G)
global_efficiency = nx.global_efficiency(G)
print(f"Clustering Coefficient: {clustering_coeff}")
print(f"Global Efficiency: {global_efficiency}")
# 可视化网络图
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=50, font_size=10)
plt.title("Brain Network (Graph Theory)")
plt.show()
6. 图论分析
图论分析用于将大脑的各个区域视为图中的节点,节点之间的功能连接性通过边(连接)表示。图论度量可以量化大脑网络的拓扑特征,如节点度、集群系数、网络效率等。
- 节点度:表示一个脑区连接的其他脑区的数量。
- 集群系数:衡量一个节点与其邻近节点的连接紧密度。
- 全局效率:衡量整个大脑网络的信息传播效率。
通过图论分析,可以获得大脑功能连接的全局视角,并对大脑网络的结构和功能进行深入的理解。
优点:
- 能够全面地描述大脑的功能网络。
- 可以揭示大脑网络的全局和局部特性。
缺点:
- 需要大量的计算资源。
- 结果可能受到数据质量和预处理的影响。
代码实现
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# 假设 corr_matrix 是你计算的相关性矩阵
corr_matrix = np.random.rand(64, 64) # 64个通道的相关性矩阵
# 使用阈值化方法创建图(例如,保留相关性大于0.5的边)
threshold = 0.5
G = nx.Graph()
for i in range(corr_matrix.shape[0]):
for j in range(i+1, corr_matrix.shape[1]):
if corr_matrix[i, j] > threshold:
G.add_edge(i, j, weight=corr_matrix[i, j])
# 计算图的集群系数和网络效率
clustering_coeff = nx.average_clustering(G)
global_efficiency = nx.global_efficiency(G)
print(f"Clustering Coefficient: {clustering_coeff}")
print(f"Global Efficiency: {global_efficiency}")
# 可视化网络图
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=50, font_size=10)
plt.title("Brain Network (Graph Theory)")
plt.show()
总结
功能连接性是理解大脑功能和组织结构的关键,它揭示了大脑不同区域之间的协同工作方式。在脑电信号处理中,通过多种方法(如相关性分析、相位同步、Granger因果关系等)来评估功能连接性,帮助研究人员揭示大脑在不同认知任务或情绪状态下的网络活动模式。这些方法不仅能提高我们对脑功能的理解,还能在临床诊断和认知障碍等疾病研究中发挥重要作用。