在神经科学和心理学研究中,事件相关电位(ERP)分析是揭示大脑认知过程的重要工具。不同于传统教材的理论讲解,本文将带您用Python完成一次完整的ERP分析流程——从原始脑电数据导入、预处理到最终的可视化解读。无论您是刚开始接触脑电分析的心理学研究生,还是需要快速上手ERP分析的工程师,这篇实战指南都能提供可直接运行的代码和避坑经验。
目前Python生态中有两个主流的脑电分析工具包:
推荐使用MNE-Python,因为它的文档更完善,社区支持更好。安装只需一行命令:
pip install mne numpy matplotlib pandas scipy
常见的脑电数据格式包括:
以.edf文件为例,导入数据的Python代码如下:
import mne
raw = mne.io.read_raw_edf('eeg_data.edf', preload=True)
print(raw.info) # 查看数据基本信息
常见导入问题解决:
encoding='latin1'resample_sfreq参数统一采样率脑电信号中的主要频率成分:
ERP分析通常需要保留1-30Hz的频率成分:
raw.filter(1, 30, method='iir') # IIR滤波器更节省计算资源
常见的伪迹类型及处理方法:
眼电伪迹(EOG):
肌电伪迹(EMG):
心电伪迹(ECG):
ICA去眼电的完整代码示例:
from mne.preprocessing import ICA
ica = ICA(n_components=20, random_state=97)
ica.fit(raw)
ica.exclude = [0, 1] # 根据成分图谱手动选择要剔除的成分
ica.apply(raw)
ERP分析的关键是将连续EEG数据按刺激事件分段。首先需要标记事件:
events = mne.find_events(raw, stim_channel='STI 014')
epochs = mne.Epochs(raw, events, event_id=,
tmin=-0.2, tmax=0.8, baseline=(-0.2, 0))
ERP的核心原理是通过叠加平均增强信号:
target_erp = epochs['target'].average()
nontarget_erp = epochs['nontarget'].average()
影响ERP质量的关键参数:
主要ERP成分及其认知意义:
绘制ERP波形的代码:
import matplotlib.pyplot as plt
fig = target_erp.plot_joint(times=[0.3, 0.4, 0.5])
plt.suptitle('Target Stimulus ERP Components')
plt.show()
查看特定时间点的电压分布:
target_erp.plot_topomap(times=[0.1, 0.3, 0.5, 0.7],
colorbar=True, size=3)
使用非参数检验比较条件差异:
from mne.stats import permutation_cluster_test
X = [epochs['target'].get_data(), epochs['nontarget'].get_data()]
T_obs, clusters, p_values, _ = permutation_cluster_test(
X, n_permutations=1000)
preload=False延迟加载n_jobs参数memory='memmap'mne.time_frequencymne.decoding在最近的一个注意力研究中,我发现使用0.1Hz的高通滤波比传统的0.5Hz能更好地保留早期ERP成分。另外,对于Oddball范式的数据分析,建议至少保留40个试次才能获得稳定的P300波形。