步骤 24:基线校正
应用基线校正
1. 目标
减去基线窗口内的均值,消除直流偏移与刺激前漂移,让 ERP 振幅相对基线被正确解读。基线校正必须在 epoch 创建时或之后、且基于真实有效的基线窗口。
2. 何时使用 / 何时跳过
- 强烈建议使用:几乎所有 ERP 研究
- 可跳过:基线窗口已被 ICA / 滤波完全消漂移,且 tmin=0 时
3. 前置条件
- 已执行步骤 21/22/23:Epochs 已稳定
- Epochs 包含足够长的刺激前时间窗(≥ 100 ms)
4. 核心代码
Python
import mne
# ====== 方式 A:在 Epochs 创建时就指定 baseline(推荐) ======
# 之前创建 epochs 时已经传入 baseline 参数
# 现在仅做"应用"验证(实际已应用)
# ====== 方式 B:事后施加基线校正 ======
epochs.apply_baseline(
baseline=(None, 0), # 完整基线(从 epoch 起点到 0;None 替换为 times[0])
# baseline=(-0.2, 0), # 仅 [-0.2, 0] 区间(推荐 ERP)
# baseline=(None, None), # 全 epoch 基线(None → times[0]/times[-1];通常不推荐)
verbose='INFO',
)
# ====== 验证 ======
# 取一个 epoch,检查基线区均值是否接近 0
sample_epoch = epochs.get_data()[0] # (n_channels, n_times)
baseline_mask = epochs.times < 0
baseline_mean = sample_epoch[:, baseline_mask].mean(axis=1)
print(f"基线均值(µV): {baseline_mean * 1e6}")
# 期望:每个通道接近 0(如 [-0.5, 0.5] µV)
# 验证 2:可视化平均 ERP
evoked = epochs.average()
evoked.plot()
# 验证 3:所有 epoch 的基线均值都接近 0
all_baselines = epochs.get_data()[:, :, baseline_mask].mean(axis=2)
print(f"全 epoch 基线均值范围: {all_baselines.min()*1e6:.2f} ~ {all_baselines.max()*1e6:.2f} µV")
# 期望:接近 0
5. 参数详解
| 参数 | 含义 | 推荐值 |
|---|---|---|
baseline |
(tmin, tmax) 元组 |
(None, 0)(完整)/ (-0.2, 0)(推荐) |
verbose |
日志 | 'INFO' |
⚠️
apply_baseline真实签名中无picks参数——基线校正会对 Epochs 中所有通道施加。基线校正前用epochs.pick('eeg')限制通道。
何时用 None 作为边界
| 边界 | 含义 | 适用 |
|---|---|---|
(None, 0) |
从 epoch 起点到 0 | 短 epoch(tmin=-0.2) |
(-0.1, 0) |
仅前 100 ms | 标准 ERP |
(-0.5, -0.1) |
前 -0.5 到 -0.1 | 特定研究 |
6. 验证方法
Python
# 验证 1:基线均值接近 0
baseline_means = epochs.get_data()[:, :, baseline_mask].mean(axis=2)
print(f"基线均值范围: {baseline_means.min()*1e6:.2f} ~ {baseline_means.max()*1e6:.2f} µV")
# 期望:|均值| < 1 µV
# 验证 2:基线窗口不能有显著事件相关
# (如不能包含刺激后成分)
# 验证 3:ERP 振幅是否合理
evoked = epochs.average()
evoked.plot()
# 期望:P300 在 300 ms 处达到 ~10 µV
# 验证 4:ERP 时序不偏移
# 基线校正不会影响时序
7. 常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
| ERP 振幅被"压扁" | 基线包含了刺激后成分 | 缩短基线到 (tmin, 0) |
| 出现错误的高振幅 | 基线期间含眨眼等伪迹 | 用更稳健的基线估计 |
错误信息 Baseline min (...) must be less than baseline max (...) 或 Baseline interval [...] s is outside of epochs data [...] |
baseline 范围超出 epoch 时间窗 | 检查 baseline 元组顺序与 epoch.times 范围 |
| 怀疑基线不准确 | 数据本身漂移大 | 重新检查步骤 08 滤波设置 |
| 双次基线校正 | 重复 apply_baseline |
仅调用一次 |
8. 官方来源
| 资源类型 | 链接 |
|---|---|
apply_baseline |
https://mne.tools/stable/generated/mne.Epochs.html#mne.Epochs.apply_baseline |
| 基线教程 | https://mne.tools/stable/auto_tutorials/epochs/plot_10_epochs_overview.html |
9. 学术引用
⚠️ 本教材未在本节引用具体学术文献。基线校正是 EEG/ERP 标准操作,方法学可参考通用教科书:
- Luck, S. J. (2014). An Introduction to the Event-Related Potential Technique (2nd ed.), Chapter 5. MIT Press.
- Cohen, M. X. (2014). Analyzing Neural Time Series Data. MIT Press.
如需引用特定基线校正论文,请作者自行 PubMed 检索补充。