阶段四 · 连接与溯源 · 模块 6 · 第 16 课 / 共 28 课

功能连接的统计检验与网络可视化

算出来的 2016 条边,哪些是真信号?这一课先解决"假连接从哪来", 再解决"显著性怎么判",最后把结果画成人一眼能看懂的矩阵图和网络图。

🕐 60 分钟🎯 难度:高阶✅ 前置:6.1

🎯 本节学习目标

  • 能解释公共源混合与公共参考为何在"无真实交互"时产生高连接
  • 掌握三条缓解路径的原理与代价:PLI 类指标、电流源密度/拉普拉斯、源空间连接
  • 会算 N 通道的边数,并理解"每条边一次检验"带来的多重比较爆炸
  • 能为连接分析选择合适的校正方法:Bonferroni / FDR / 置换 + max-stat / NBS
  • 会画并读懂 N×N 连接矩阵(上下三角、对角线、色标约定)
  • 会画阈值化的圆形布局网络图,并按规范输出连接结果

一、容积导体问题深入:假连接的两个源头

6.1 已经点题:单个源的信号会同时扩散到多个电极。这里把机制再拆深一层。用矩阵语言说: 头皮电极记录到的信号 V = G × SS 是所有源的时间过程, G 是混合矩阵(每个电极对每个源的加权)。关键在于 G 的每一列几乎全为正数 且彼此相近——相邻两个电极的信号 = 同一批源的两种近似加权之和,天然高度相似。

源头一:公共源混合。哪怕两个脑区毫无交互,只要它们的信号都"漏"到彼此的 电极上(或第三个源同时投射到两个电极),这对电极就会表现出零滞后高相干。电极距离越近 越严重——这就是头皮连接矩阵常常"前额一片红"的原因。

源头二:公共参考。参考电极的信号被从每一个通道里减掉。参考上有什么—— 工频噪声、汗腺电位、颈部肌电——都会被原封不动地混进所有通道,于是任何 通道对之间都共享了这个"公共成分",连接指标整体被抬高。这不是理论洁癖:单侧乳突参考 会让同侧通道之间的相干系统性偏高,平均参考也依然存在零滞后混合。

⚠️ 两个自查信号

一:连接矩阵几乎满格都是显著边——先怀疑体积传导/参考,而不是"全脑网络大爆发"。 二:镜像位置(如 F3–F4、C3–C4)的连接异常高且左右对称——典型的同源混合特征。 人类认知不会因为你的实验操纵就"全网重构",满矩阵结果几乎总有方法学问题。

二、三条缓解路径

策略原理优点代价
PLI / wPLI 类指标扔掉零滞后成分零改动、计算便宜延迟极短的真实交互也会被扔掉;对试次数有要求
电流源密度 / 拉普拉斯对通道做空间二阶差分(相当于"空间高通"),抵消各通道的公共成分保留头皮分析框架,物理意义清楚突出浅层局部活动;深部/内侧源贡献被削弱;对电极密度敏感
源空间连接先做源定位,提取 ROI 时间序列再算连接从源头绕开头皮混合,可定义解剖 ROI依赖头模型质量;存在空间泄漏;计算重(见模块 7)

三条路不互斥。实践中常见组合是"平均参考 + 电流源密度 + wPLI"(头皮研究),或 "beamformer + ROI + wPLI/相干"(源研究,6.3 实操)。EEGLAB 用户可以安装 CSD 工具箱 (Kayser 与 Tenke 的球面样条实现)把电位转成电流源密度后,再走后续的连接分析。

三、基于边的统计:2016 条边意味着什么

📖 概念:多重比较问题

在同一批数据上做很多次统计检验时,每次都有 α(如 0.05)的概率"纯靠运气显著"。 检验次数一多,假阳性就从"运气"变成"必然"。连接分析是多重比较的重灾区: 你的检验单位不是通道,而是每一条边

先算清账。N 个通道的无向连接数 = N(N−1)/2:

通道数边数 N(N−1)/2α=0.05 且不校正时的期望假显著边
32496约 25 条
642016约 101 条
1288128约 406 条

一张纯噪声数据也能画出 100 条金光闪闪的"显著网络"——这就是连接论文审稿人看到未校正 结果会直接质疑的原因。边级检验本身不难:每个被试每条边一个值,条件间或组间做 配对 t 检验即可;难的是面对这一大把 p 值怎么办。

四、多重比较校正:四件工具

Bonferroni:单边阈值 α/边数 = 0.05/2016 ≈ 2.5×10⁻⁵。数学上"最安全", 但对连接数据过严——边与边高度相关(相邻电极对共享通道),Bonferroni 却假设检验彼此独立, 校正幅度远超必要,真实的中等强度网络会被一刀切没。只适合边数很少 (预先选定的几对 ROI)的验证性分析。

FDR(Benjamini–Hochberg):不追求"零假阳性",而是控制 显著集合中假阳性的比例(如不超过 5%)。对相关检验稳健、功效高,是连接分析的 事实标准;FieldTrip 统计函数里的 cfg.correctm = 'fdr' 就是它。

置换检验 + 最大统计量(max-stat):打乱条件标签重算所有边的统计量,每次取 全场最大值,用这个"最强边的零分布"定阈值——天然尊重边之间的相关结构 (与模块 5 的 cluster 校正同一思想:cluster 在空间上找团块,这里直接取最大)。

📖 概念:NBS(network-based statistic)

Zalesky 等 2010 年提出的"边团块校正":先把每条边阈值化(如 t 大于 2)连成图,找出 连通子网络,再用置换检验比较"子网络的大小"而非单条边。它牺牲单边定位精度, 换来对"整个子网络"的强推断——特别适合"找网络"而非"找边"的研究问题。 FieldTrip 中对应 ft_networkanalysis

💡 怎么选

探索性全脑连接:FDR 或 NBS;验证少数预选边(如 5 对 ROI):Bonferroni 也可接受; 想要"最强边"式的严格 FWER 控制:置换 + max-stat。无论选哪个, 方法与阈值写进论文方法部分

Matlab · fdr_bh.m(教学版,几十行看懂原理)
function sig = fdr_bh(p, q)
% Benjamini-Hochberg FDR:控制"显著边中假阳性的比例"
% p: 边的 p 值(列向量); q: 期望 FDR 水平,如 0.05
% 返回逻辑向量:true = 该边通过校正
% 用法:sig = fdr_bh(pvals, 0.05);(FieldTrip 的 cfg.correctm='fdr' 是同一原理的工业版)
[p_s, idx] = sort(p(:));               % 把 p 值从小到大排名
m = numel(p);
thr = q * (1:m)' / m;                  % 第 k 小的 p 值允许的门槛:k*q/m
ok  = find(p_s <= thr, 1, 'last');     % 找到最大的合格排名 k
sig = false(m, 1);
if ~isempty(ok)
    sig(idx(1:ok)) = true;             % 排名前 k 的边全部标记显著
end
end

五、连接矩阵可视化:N×N 热图

连接矩阵是连接分析最基础的"成绩单"。画之前记住三个约定:

  • 对称指标只看一个三角:coherence / PLV / PLI / wPLI 都是 A–B = B–A, 上下三角信息完全重复。常用技巧是一图双条件:上三角画条件 A、下三角画条件 B, 差异一目了然;
  • 对角线没有信息:自己和自己永远是 1,必须置 NaN,否则一大块"满分红" 会把色标拉爆;
  • 色标固定:coh / wPLI 理论值域 0–1,固定色标后不同被试、不同条件的图才能 直接对比——"每张图自适应色标"是初学者最常见的自欺欺人。
Matlab
% conn: 64x64 对称连接矩阵(来自 6.3 的 ft_connectivityanalysis,或手算)
N = 64;
conn(logical(eye(N))) = NaN;           % 对角线 = 自连接,无意义,置 NaN 避免误导

figure;
imagesc(conn); axis square;
colormap(jet); colorbar;
caxis([0 1]);                          % coh/wPLI 固定 0-1 色标:跨被试跨条件可比
title('全通道连接矩阵(上下三角信息重复)');

% 只保留下三角:更干净;也常用于一图双条件(上=条件A 下=条件B)
figure;
C = conn;
C(triu(true(N))) = NaN;                % triu(true(N)):含对角线的上三角掩码
imagesc(C); axis square; colorbar; caxis([0 1]);
title('下三角(+ 上三角可以画另一个条件)');

行列顺序也有讲究:默认通道顺序(F3, F4, C3, Cz, …)把额、中央、枕区交错排开, 矩阵看起来一团乱。按脑叶分组重排(额部通道挨着额部、枕部挨着枕部)之后, 模块化的块状结构会自己浮出来。

六、阈值化脑网络图与圆形布局

矩阵图是给分析者看的,网络图是给读者看的。三条规则:

  • 节点 = 电极(头皮水平)或 ROI(源水平),按头皮位置或解剖关系布局;
  • 边 = 通过显著性(或强度前 5%)的连接。阈值必须报告,并对阈值做敏感性检查 (换一档阈值,结论还在吗?);
  • 线的颜色/粗细映射强度——弱连接浅细、强连接深粗,图才读得动。

圆形布局最常用:电极沿头顶排成一圈(Fz 在正上方、Oz 在正下方)。连线越"长" (弧越接近圆心)= 跨脑区的长程连接;短弧 = 邻近的局部连接。满屏长线提示 长程同步网络;连线密集聚在某一叶的扇区,是局部网络。再对照第一节的 自查信号:左右镜像的密集连线永远值得怀疑。

Matlab · draw_circle_net.m(自定义连线可视化)
function draw_circle_net(conn, labels, thresh)
% 圆形布局网络图:节点=电极,边=超过阈值的连接
% conn: N×N 对称连接矩阵; labels: 电极名; thresh: 画线阈值(如显著边的强度门槛)
N = size(conn, 1);
ang = pi/2 + 2*pi*(0:N-1)'/N;          % 从头顶开始顺时针排一圈(F 在正上方)
pos = [cos(ang) sin(ang)];             % N×2 单位圆坐标

figure('Color', 'w'); hold on;
vmax = max(abs(conn(:)));
for i = 1:N
    for j = i+1:N
        if abs(conn(i,j)) > thresh     % 只画过阈值的边:全画必糊成一团
            w = abs(conn(i,j)) / vmax; % 相对强度 0-1,决定线的深浅与粗细
            col = [0.75 0.82 0.95]*(1-w) + [0.10 0.25 0.85]*w;  % 浅蓝->深蓝
            plot(pos([i j],1), pos([i j],2), '-', ...
                 'Color', col, 'LineWidth', 0.4 + 2.5*w);
        end
    end
end
plot(pos(:,1), pos(:,2), 'k.', 'MarkerSize', 14);   % 节点画在连线之上
for i = 1:N
    text(pos(i,1)*1.14, pos(i,2)*1.14, labels{i}, ...
         'FontSize', 7, 'HorizontalAlignment', 'center');
end
axis equal off;
title('阈值化脑连接网络');
end

七、结果输出规范

连接分析的方法学敏感度高,报告时比 ERP 更要"自证清白"。最低交付清单:

  1. 指标与出处:用了什么指标、公式引用(如 Vinck 2011 的 wPLI)、 为什么选它(容积传导立场);
  2. 频段与参数:频段范围、滤波参数、频率平滑(FieldTrip 的 tapsmofrq)、 每个被试进入分析的试次数;
  3. 统计与校正:检验类型、校正方法、最终阈值、通过校正的边数;
  4. 两图齐上:矩阵图 + 网络图,图注写明颜色/线宽含义与阈值;
  5. 可复现:脚本、随机种子、中间 .mat 全部存档(6.3 的组级骨架会做)。
📌 审稿人三连问

① 你怎么控制体积传导?② 怎么处理 2016 次检验的多重比较?③ 换一档阈值结果还稳吗? 论文动笔前先把这三问答进方法部分——答不出来的结果别放进正文。

📌 本节小结

  • 假连接两大来源:公共源混合 + 公共参考;共同特征是零滞后高连接
  • 缓解三路:PLI/wPLI(扔零滞后)、电流源密度/拉普拉斯(空间去公共成分)、源空间(先源后连,见模块 7)
  • 64 通道 = 2016 条边;α=0.05 不校正,纯噪声平均也能出约 100 条"显著边"
  • Bonferroni 过严、FDR 常用、置换+max-stat 尊重边间相关、NBS 直接找子网络
  • 矩阵图三约定:对角线置 NaN、对称指标看单三角、色标固定 0–1;网络图阈值必须报告并做敏感性检查

✏️ 课后练习

  1. 手算:32 通道有多少条边?若用 Bonferroni,单边阈值应设多小?再用 fdr_bh 对 496 个均匀随机 p 值(rand(496,1))跑一遍,数一数显著边数,和"0.05×496"的直觉对比。
  2. 把 6.1 的手算代码扩展到 8 个电极(8×8 连接矩阵,两两算 PLV),用本课代码画"上三角=静息、下三角=任务"的双条件对比图。
  3. draw_circle_net 画自己数据的网络:调整阈值直到连线索约 50 条,记录此时阈值,并写一段 3 句话的"阈值选取依据"。