
跑完CAT12的SBM预处理之后大多数人会在surf文件夹面前愣住看着几百个lh和rh开头的文件下一步到底在哪做双样本T检验是在CAT12的统计界面里直接选数据还是把数据导到FreeSurfervertex水平和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 atlasDestrieux模板更细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_varFalse)注意这里我用了equal_varFalseWelchs t-test因为两组方差不齐在脑影像小样本里是很常见的事默认服从方差齐性反而有风险。SPSS里对应的勾选项就是未假定等方差。跑完68个ROI之后你会得到一张p值表。这时候就到了ROI水平最容易被低估的一关多重比较校正。68个ROI同时做检验纯随机情况下也会冒出三四个p0.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优先于FWEFWE优先于FDR。FDR在vertex水平容易被极端值影响因为这几十万个检验并不是独立同分布的空间相关性让FDR的行为变得不太好预测。所以除非你在方法学上有明确的理由否则不要在vertex水平用FDR当主要结果。4.3 结果可视化图要漂亮也要守规矩vertex水平结果的渲染图是论文的门面。CAT12可以直接渲染到皮层表面输出等高线式的显著性重叠图。但说实话CAT12自带的渲染效果一般很多科研组会把显著结果导出为.asc或.obj文件再用BrainNet Viewer这类工具在更美观的脑模型上做可视化。可视化时不要踩一个典型的坑只画p0.05的显著区域却不报告未校正的全脑统计图。规范做法是至少把未校正的p图比如p0.001的未校正结果放在补充材料里让读者看到全脑的真实效应分布。否则只展示被严格的校正后的碎片化结果容易被质疑cherry-picking。ROI水平的结果则更适合用柱状图或箱线图展示X轴是ROI名称Y轴是平均厚度每个ROI里两组并排显著性星号标在组间。这种图信息密度高审稿人一眼就能看到哪些区域有差异。4.4 统计报告里必须写清的信息写Methods时最少要交代这些分析在哪个软件里做的CAT12版本号、预处理参数平滑核多少mm、统计模型双样本T检验协变量有哪些、校正方法TFCE置换次数、FDR等、显著性阈值p0.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统计分析的固定流程是这样的T1数据统一进行CAT12分割和表面重建逐个检查分割和重建质量剔除不合格样本对厚度图做15mm表面平滑vertex水平以左右半球为单位分别在CAT12里做双样本T检验协变量包含年龄、性别校正方式用TFCE5000次置换记录vertex结果的显著簇信息导出maskROI水平用DK模板批量提取每个被试每区域的平均厚度在R里对每个ROI做Welchs双样本T检验p值做FDR校正两个水平的结果互相呼应显著簇和显著ROI如果对不上就回去查数据不强行解释。这套流程下来既有了全脑探索性结果也有了假设驱动的区域结果。数据之间的交叉验证会给你很大的信心写论文和回应审稿意见时也会从容很多。最后再多说一句。网上关于SBM统计分析的教程不少但很多只讲了vertex水平ROI水平常常一句话带过。实际上ROI水平才是很多临床研究真正需要的部分——因为研究者关心的就是特定的几块脑区。建议你把这篇里的两条路径都实际操作一遍跑通一次之后以后再遇到你帮我看看CAT12统计咋弄的师弟师妹你就能直接甩给他们一个完整的操作流程了。