拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CAT12 SBM统计分析实操:从vertex全脑检验到ROI区域验证的完整指南

CAT12 SBM统计分析实操:从vertex全脑检验到ROI区域验证的完整指南

跑完CAT12的SBM预处理之后,大多数人会在surf文件夹面前愣住:看着几百个lh和rh开头的文件,下一步到底在哪做双样本T检验?是在CAT12的统计界面里直接选数据,还是把数据导到FreeSurfer?vertex水平和ROI水平到底有什么区别,只做一边够不够?这篇文章直接回答这些问题,把基于CAT12做SBM的ROI统计分析讲透——从vertex水平的全脑顶点检验,到ROI水平的区域检验,每一步的入口、参数、原理和坑都列出来。适合已经把SBM预处理跑通、正要进入统计阶段的朋友,也适合做VBM后想横向扩展方法的人。

1. 为什么SBM统计分析会卡在"两种水平"上

先说一个最基础的认知:SBM跑完之后,你手上的核心数据不是一张图,而是很多张"厚度图"。CAT12会把每个被试的左右半球皮层重建出来,并在每个网格顶点上计算出皮层厚度。一个半球的顶点数量通常在十几万量级,也就是说,每个被试在经过表面重建和配准后,都会得到一套高密度的顶点级数据。

问题就从这里来了。这些顶点数据本身是没法直接放进SPSS或者Excel做T检验的,因为它在空间上是十万维的。于是就有了两条统计路径:

vertex水平,说白了就是在每个顶点上分别做一次组间比较。比如组1和组2各有20个被试,那么在每个顶点上都跑一个双样本T检验,得到这个顶点的T值和p值。几十万个顶点就是几十万个检验,所以必须做多重比较校正。

ROI水平,是先按照一个解剖模板(比如Desikan-Killiany、Destrieux)把皮层划分成若干区域,然后把每个区域内所有顶点的厚度取平均,这样每个被试每个ROI就得到一个数。之后你要检验的就是这些区域均值在两组之间是否有差异,维度从十万降到几十到几百,统计上要轻松得多。

我习惯用一个类比来理解这两种水平:vertex水平就像是逐条街道对比两个城市的建筑高度,ROI水平则是按行政区划计算平均建筑高度。前者细致但费劲,后者粗糙但高效。两者不是二选一的关系,在实际发表的研究里经常是先用vertex水平做全脑探索,再用ROI水平对感兴趣区域做验证,或者反过来用ROI水平限定检验范围。

这里要说清楚一个关键逻辑:vertex水平的优势是"不限定假设",能发现你事先没想到的脑区;代价是多重比较校正非常严格,弱效应很容易被灭掉。ROI水平正好相反,它把解剖先验放进了统计,检验次数少、灵敏度高,但如果你的假设区域选错了,那就什么都检不出来。这就是为什么很多审稿人会要求你同时报告两种水平的结果,或者至少说明你选择其中一种的理由。

CAT12的便利之处在于,它把这两种水平的统计都整合在同一个界面里了,不需要把数据导到外部软件。只是入口藏得不算显眼,很多人不知道从哪点起。下面我从vertex水平开始,把完整链路走一遍。

2. 跑通vertex水平双样本T检验的完整操作链

2.1 动手前先把数据质量拦在门外

vertex水平的统计结果严重依赖预处理质量。CAT12虽然自动化程度高,但绝不是丢进去就能出结果。我强烈建议在统计之前,先做一轮QC(质量控制)。

具体看两个地方:一是分割后的灰质/白质/脑脊液图有没有明显的错分,二是表面重建出来的皮层有没有明显的拓扑错误。CAT12的Check Data Quality(在Tools菜单里)能给出每张图的质量指标,一般低于B+的我都直接裁掉,不要为了凑样本量把噪声大的数据硬塞进统计。这一步偷懒,后面统计结果里出现半个脑皮层整片假的厚度差异,找原因找三天都找不到。

2.2 预处理链路回顾:表面重建与厚度估计

进入统计之前,每个被试需要完成这么几步:T1分割、表面重建、球形配准、皮层厚度计算、表面平滑。

前四步在CAT12里可以一气呵成。如果你用的是图形界面,直接打开CAT12的Segmentation和Surface Reconstruction模块过一遍就行。这里提醒一个细节:左右半球的数据是分开输出的,最终你会得到类似lh.thickness和rh.thickness这类文件名。后面做统计时,左右半球要分别选数据,不是一次全选。

第五步表面平滑是vertex水平统计里最重要的预处理。CAT12的Smooth Surface模块会对厚度图做高斯平滑,参数是FWHM(半高全宽)。为什么必须平滑?因为顶点水平的厚度图噪声非常大,网格顶点之间的值跳动剧烈,不平滑的话,相邻顶点的统计值会彼此孤立,真伪信号都淹没在噪声里。文献里对这个参数的常规选择是15mm左右,10mm到20mm是一个可接受的范围。太小了噪声压不住,太大了会把解剖细节抹平,组间差异被稀释。我自己的经验是15mm最稳,除非你的样本量特别小或者特别大,否则不要轻易偏离这个值。

2.3 CAT12统计界面的关键设置

这是全文操作量最大的一块。以CAT12的图形界面为例,路径大致是:打开CAT12主界面,选择Statistical Model(有时也叫Statistics),然后选Surface-based analysis。

第一步是选数据。把两组被试的平滑后厚度文件全部添加进来——注意左右半球分开做,也就是说你要跑两次:一次全左半球,一次全右半球。如果觉得手动添加几百个文件太崩溃,可以按文件夹添加,但前提是每个组的所有被试文件都整整齐齐放在一个目录里,且文件名包含固定的组别标记。

第二步是设置组别和协变量。CAT12的设计矩阵界面里,你需要明确每个被试属于哪个组。这里最容易犯的错误是组别编码不统一:在CAT12里,组别通常用0和1来编码,不要用1和2,更不要用A和B。我见过有人拿组别编码当协变量加进模型,结果contrast怎么定义都不对,最后统计出来的T检验方向完全反了。协变量方面,至少把年龄和性别放进去,这是脑影像领域双样本对比的标配。如果样本跨度大,建议把颅内总体积(TIV)也一起放进去,因为皮层厚度虽然不如灰质体积受TIV影响大,但作为协变量带上没有坏处。

第三步是定义对比。双样本T检验的contrast就两种:组1大于组2(写做1 -1),组2大于组1(写做-1 1)。我建议一次跑两套,分别出两个方向的结果。不要只跑一个方向,不然审稿人一问"那你反向的差异呢",你又得重算一遍。

第四步是选校正方式。这个我单独放在后面一节细说,但在这里先给结论:vertex水平直接用TFCE加置换检验(permutation),不要纠结要不要先用FWE看一眼。理由后面讲。

设置完了之后点Estimate,软件会生成SPM设计矩阵和模型参数估计。这一步通常要跑一阵子,浓度太高的时候,我建议你去做点别的,别盯着进度条。

2.4 结果查看和导出

模型估计完成后,结果可以通过CAT12的渲染功能直接显示在皮层表面模型上。你看到的是一个脑模型上叠加热度图,红色/黄色区域表示组间差异显著。这里要提醒:渲染图适合展示,但真正要写进论文的数据,还需要把每个显著簇(cluster)的峰值顶点坐标、体素/顶点数量、峰值T值、p值都导出来。CAT12的结果界面一般会提供这些信息的表格,导出后建议立即用Excel整理好,不然换了电脑就找不到了。

2.5 备选路径:FreeSurfer QDEC和外部工具

如果你的实验室更习惯用FreeSurfer,也可以用QDEC来做vertex水平的组间比较。流程上需要先把CAT12的厚度文件转换成FreeSurfer的mgh格式,或者干脆直接用FreeSurfer的recon-all全程跑完再做QDEC。我自己是CAT12派的,原因在于它的预处理一体化程度更高,和SPM的兼容性也好,但如果你的数据是FreeSurfer处理过的,没必要强行搬到CAT12里。统计工具本身只是手段,重要的是你清楚自己做了什么、参数是什么。

3. ROI水平双样本T检验:两条高效提取数据的路径

vertex水平分析解决的是"哪里有差异",ROI水平要解决的是"这个差异在解剖上落在什么区域、在区域层面是否也显著"。后者要做的第一件事,是把每个被试的ROI数据提取出来。实践中常用的有两条路。

3.1 路径A:基于标准解剖模板批量提取

这是最主流的做法。CAT12自带ROI提取工具,你指定一个解剖模板(Desikan-Killiany模板最常用,分左右半球各34个区域,也就是通常说的DK atlas;Destrieux模板更细,Glasser模板是脑连接组学那边用得多的多模态模板,但区域太多会让多重比较校正很吃力),软件就会自动在每个ROI内做全顶点平均,然后输出每个被试每个ROI的平均皮层厚度。

输出的数据格式一般是XML或CSV。CSV最好,直接就能读。你会得到一个数据表:每一行是一个被试,每一列是一个ROI(比如lh_bankssts、rh_precuneus),最后一列是组别标签。这张表就是ROI水平双样本T检验的原料。

提取过程中最容易翻车的点是左右半球的选择。CAT12的ROI工具会让你选"左半球""右半球"还是"左右合并"。如果你后面打算做左右半球的对称性比较,那就左右分开导;如果只关心特定的单侧ROI,就按需选。千万别左右合并导出后又忘记自己导的是合并数据,然后拿单个半球的解剖名去写结果,这种低级错误在结果报告里会很尴尬。

3.2 路径B:从vertex水平的显著簇提取

第二条路径是从vertex水平结果反推。假设你在vertex水平发现了一个跨越顶叶和颞叶交界的显著簇,现在你想验证这个簇在ROI层面的效应。做法是把这个cluster的mask导出来,用CAT12或SPM的工具把每个被试在这个mask范围内的厚度值做平均,得到"每个被试在这个簇上的平均厚度",然后做双样本T检验。这种做法本质上是把cluster当成一个自定义ROI,特点是检验区域完全由数据驱动,不再依赖解剖模板的边界。

我个人的习惯是两条路径配合用:vertex水平出显著簇之后,先用路径A查一下这个簇落在了哪些标准ROI里,再用路径B针对簇本身提取数据做展示图。这样论文里既有先验驱动的ROI表格,又有数据驱动的cluster图,审稿人一般挑不出什么毛病。

3.3 逐ROI的双样本T检验怎么操作

数据表拿出来了,后面的统计就没那么玄乎了。大部分人直接用SPSS。只要把CSV里的数据粘贴进去,对每个ROI列做一次独立样本T检验(把组别设为分组变量)就行。但我建议你用脚本做,因为ROI数量一多(比如DK模板的全皮层68个区),手动在SPSS里点68遍非常耗时间,而且容易点错。

R的写法很短:

data <- read.csv("roi_thickness.csv", header = TRUE) # 假设group列是0/1编码,thickness列换成具体ROI列名 t.test(thickness ~ group, data = data)

Python的写法也差不多:

import pandas as pd from scipy import stats data = pd.read_csv("roi_thickness.csv") group1 = data.loc[data["group"] == 0, "lh_bankssts"] group2 = data.loc[data["group"] == 1, "lh_bankssts"] t_stat, p_val = stats.ttest_ind(group1, group2, equal_var=False)

注意这里我用了equal_var=False(Welch's t-test),因为两组方差不齐在脑影像小样本里是很常见的事,默认服从方差齐性反而有风险。SPSS里对应的勾选项就是"未假定等方差"。

跑完68个ROI之后,你会得到一张p值表。这时候就到了ROI水平最容易被低估的一关:多重比较校正。68个ROI同时做检验,纯随机情况下也会冒出三四个p<0.05的假阳性。所以ROI水平的p值不能直接拿来写"该区域显著"。

3.4 ROI水平的校正策略:不能手软也不能一刀切

ROI数量少的时候(比如只有三五个针对性地检验),用Bonferroni校正问题不大,把显著阈值除以ROI数量就好。但ROI数量一多,Bonferroni就过于保守,容易把真实效应也灭掉。我推荐用FDR(错误发现率)校正,既能控制假阳性占比,又不会像Bonferroni那样把检验力压得太低。具体到R里,用p.adjust(p_vals, method = "fdr")就行;Python的statsmodels.stats.multitest.multipletests也可以。

这里要特别说一句:ROI水平的FDR校正不同于vertex水平,它是在几十个检验之间做控制,尺度完全不同。不要拿vertex水平的框架来套ROI水平,它们在方法学报告里是两个不同的段落。

4. 多重比较校正的取舍与结果可视化

4.1 vertex水平校正在CAT12里到底怎么选

vertex水平的多重比较校正是初学者最容易懵的地方,因为选项名词太多:FWE、FDR、TFCE,有的界面里还有family-wise过的permutation。我的建议非常明确:优先用TFCE结合置换检验。

为什么?传统的cluster推断方法,比如先设一个顶点水平的统计阈值(cluster-forming threshold),再把显著的顶点聚类成簇,最后对簇做校正,非常依赖你最初那个阈值怎么选。阈值设高了,信号被碎片化;阈值设低了,又容易产生巨大的簇,结果不可解释。TFCE的全称是Threshold-Free Cluster Enhancement,它把每个顶点的统计量同时考虑自身强度和周围邻域的延展程度,相当于不需要你预先选阈值,把所有可能的cluster规模都纳入进来,然后配合置换检验做校正。它的稳健性在近十年的文献里得到过大量验证,也是CAT12界面里比较推荐的选项之一。

置换检验的次数,CAT12默认通常是1000或5000次,但发表级别的结果最好用5000次以上。置换次数越少,p值分辨率越低,可能会出现p略大于0.05但差一点点的情况,换5000次往往就能得到一个更精确的p值。代价就是计算时间变长,但这是值得的。

4.2 FDR与FWE在vertex水平的使用场景

也不是说TFCE之外就不能用。如果你做了很强的先验假设,只关心一个非常小的区域,可以试用小体积校正(small volume correction),这时候FWE或FDR都可用。但作为全脑探索的默认选项,我的排序依然是TFCE优先于FWE,FWE优先于FDR。FDR在vertex水平容易被极端值影响,因为这几十万个检验并不是独立同分布的,空间相关性让FDR的行为变得不太好预测。所以除非你在方法学上有明确的理由,否则不要在vertex水平用FDR当主要结果。

4.3 结果可视化:图要漂亮也要守规矩

vertex水平结果的渲染图是论文的"门面"。CAT12可以直接渲染到皮层表面,输出等高线式的显著性重叠图。但说实话,CAT12自带的渲染效果一般,很多科研组会把显著结果导出为.asc或.obj文件,再用BrainNet Viewer这类工具在更美观的脑模型上做可视化。

可视化时不要踩一个典型的坑:只画p<0.05的显著区域,却不报告未校正的全脑统计图。规范做法是至少把未校正的p图(比如p<0.001的未校正结果)放在补充材料里,让读者看到全脑的真实效应分布。否则只展示被严格的校正后的碎片化结果,容易被质疑"cherry-picking"。ROI水平的结果则更适合用柱状图或箱线图展示:X轴是ROI名称,Y轴是平均厚度,每个ROI里两组并排,显著性星号标在组间。这种图信息密度高,审稿人一眼就能看到哪些区域有差异。

4.4 统计报告里必须写清的信息

写Methods时,最少要交代这些:分析在哪个软件里做的(CAT12版本号)、预处理参数(平滑核多少mm)、统计模型(双样本T检验,协变量有哪些)、校正方法(TFCE置换次数、FDR等)、显著性阈值(p<0.05校正后)。缺任何一项,都有理由被审稿人要求补材料。我每次写论文前都会把这些参数列成一个表,确保所有文本和表里的数字能对上。

5. 实操排雷:我踩过的坑与最终推荐流程

5.1 坑:文件批量导入后左右半球对不上

有一年我处理一批数据,用CAT12的批量导入功能按文件夹添加了所有被试的surface文件。结果统计跑完发现,个别被试的左右半球文件被对调了,左半球数据出现在了右半球列表里。原因是在文件夹里按文件名排序时,lh和rh文件交错排布,脚本导入时按照固定顺序取,又刚好赶上那个被试命名不规范,前后文件对错了位。

排查办法:统计之前认真核对每个被试的左右半球文件是否配对。最简单的做法是生成一个清单,把每个被试左半球的IDs和右半球的IDs打印出来人工过一遍。还有一个土办法,就是看你跑出来的结果是否符合常理——如果左右半球的效应完全对称到不自然的程度,大概率有文件错位,因为真实的组间差异很少会在左右半球出现一模一样的图案。

5.2 坑:组别变量编码与contrast方向

CAT12里组别编码如果用1和2,则contrast写1 -1或-1 1都不一定符合你想比较的方向。这是SPM的底层设计逻辑导致的:它会把你的组别变量当作一个具有连续意义的预测因子,而不是分类标签,所以用0/1编码才是稳妥的。我自己在写设计矩阵时会把每个被试的组别用0/1列出来,再复查一遍contrast矩阵,确保没有把"组1显著大于组2"和"组2显著大于组1"弄反。

5.3 坑:平滑核选了30mm,结果一片光滑

有个朋友跑SBM统计,觉得15mm的平滑结果"不好看",想用30mm的平滑让结果更亮眼。结果跑出来确实是巨大一团显著区域,但区域大到跨越了额叶、顶叶、颞叶,整个脑区连成一片,根本没法解释。平滑的本质是把临近顶点的信息混到一起,平滑核越大,空间分辨率越低,区域界线越模糊。30mm的平滑会让结果失去解剖意义。15mm已经是比较温和的选择了,如果担心噪声大,可以提高到20mm,但超过20mm就要好好斟酌一下。

5.4 坑:ROI提取忘了考虑左脑右脑的顺序

前面提到过提取ROI时要选半球。我早期犯过一次比较低级的错误:ROI数据按"左脑+右脑合并"导出后,我在分析右侧颞叶ROI时用的却是左侧的解剖命名,结果目录里对应的列名看起来和实际区域不匹配,统计结果自然也乱了。解决的办法很笨但有效:导出后先在软件里随便挑两个ROI,把数值和FreeSurfer命令行里提取到的数值对一遍,对上号再用。

5.5 最终推荐流程

结合这么多年的实操,我现在做SBM ROI统计分析的固定流程是这样的:

  1. T1数据统一进行CAT12分割和表面重建;
  2. 逐个检查分割和重建质量,剔除不合格样本;
  3. 对厚度图做15mm表面平滑;
  4. vertex水平:以左右半球为单位,分别在CAT12里做双样本T检验,协变量包含年龄、性别,校正方式用TFCE+5000次置换;
  5. 记录vertex结果的显著簇信息,导出mask;
  6. ROI水平:用DK模板批量提取每个被试每区域的平均厚度;
  7. 在R里对每个ROI做Welch's双样本T检验,p值做FDR校正;
  8. 两个水平的结果互相呼应,显著簇和显著ROI如果对不上就回去查数据,不强行解释。

这套流程下来,既有了全脑探索性结果,也有了假设驱动的区域结果。数据之间的交叉验证会给你很大的信心,写论文和回应审稿意见时也会从容很多。

最后再多说一句。网上关于SBM统计分析的教程不少,但很多只讲了vertex水平,ROI水平常常一句话带过。实际上ROI水平才是很多临床研究真正需要的部分——因为研究者关心的就是特定的几块脑区。建议你把这篇里的两条路径都实际操作一遍,跑通一次之后,以后再遇到"你帮我看看CAT12统计咋弄"的师弟师妹,你就能直接甩给他们一个完整的操作流程了。

返回列表