从预处理完的fMRI数据到一张能写进论文的脑网络图论指标表,中间这条路很多人走得磕磕绊绊。过去想算个聚类系数、小世界属性,要么自己啃SPM/GRETNA脚本,要么求师兄帮忙跑一段跑不通的MATLAB函数。DPABINet这个工具我用了大概两年,最大的感受就是——它真把脑网络分析的门槛拉下来了。整个流程全在图形界面里点选,不需要写一行MATLAB代码,从功能连接矩阵到全局/节点层面的图论指标都能一次性出结果,而且结果文件直接就能进SPSS或R做统计。这篇文章我打算把整个流程从数据准备、软件设置、图论参数选择到结果导出,完整捋一遍,把我踩过的坑和验证过的稳定做法都写清楚,适合刚接触脑网络分析、又不想在编程上花太多时间的研究生和科研助理。
1. DPABINet到底能干什么:先搞清楚它在整个fMRI分析链条里的位置
很多刚上手的人会混淆一件事:DPABINet不是用来做预处理和统计分析的,它是专门做脑网络构建与图论分析的一站式工具。它能把你已经预处理好的fMRI数据,自动提取各脑区时间序列,计算功能连接矩阵,然后在这个矩阵基础上计算一整套图论指标。换句话说,它解决的是“从每个被试的功能像,到得出网络拓扑属性”这一段问题。
1.1 从DPARSF到DPABINet:数据流转的关键节点
说清楚DPABINet,必须先说清楚它在整个fMRI分析流水线中的位置。一般情况下,你会先用DPARSF、SPM或者fMRIPrep对原始DICOM数据进行预处理,主要包括时间层校正、头动校正、配准到标准空间、协变量回归、滤波等步骤。预处理完成后,每个被试会得到一份标准空间下的功能像数据,通常是FunImg文件夹下的若干nii文件,以及一个结构像分割出来的灰质概率图(GrayMatter,通常命名为mwc1*.nii)。
DPABINet接收的,正是这类已经预处理、已经标准化到MNI空间的数据。它不负责处理原始数据,也不负责做组间统计,它负责的是把这些干净的功能数据变成矩阵、变成图论指标。所以你在跑DPABINet之前,一定要先确认自己的数据已经走完了预处理流程,否则后面算出来的一切都是空中楼阁。
提示:如果你还没有预处理数据,建议先用DPARSF跑一遍标准流程。DPABINet和DPARSF是同一个大团队开发的,数据接口非常顺畅,很多目录结构都是预设好的,能省掉很多整理文件的功夫。
1.2 零代码的底气:图形界面背后的分析逻辑
“零代码”听起来像营销话术,但DPABINet确实做到了全程图形化操作。你只需要在窗口里把自己想做的分析勾选出来,然后点个“Run”就行。不过,不要以为不用写代码就等于不需要理解原理。图形界面帮你省掉的是输入输出和循环遍历这类工程性工作,但内在的分析逻辑仍然需要你自己把握。
举一个最常见的例子:图论计算里稀疏度(sparsity)这个概念。在DPABINet里你可以直接勾选一个区间比如0.05到0.5、步长0.05,然后软件会帮你在这个区间内自动生成一系列阈值,每个阈值下都算一遍网络指标。这个操作本身很简单,几秒钟就能学会。但你得知道为什么选择这个区间、为什么步长是0.05而不是0.01、不同阈值下结果之间的差异意味着什么。这些知识层面的东西,软件代劳不了,恰恰也是审稿人最常追问的问题。
2. 环境准备与数据组织:这一步错了后面全白搭
DPABINet最大的优点是操作简单,最大的坑也恰恰藏在简单的背后——它对数据目录结构和文件名规范有不成文的要求,一旦不符合,软件就会报错或者静默算出错误结果。我在最初使用的时候就吃过亏,目录建得随意,结果软件读不到灰质模板,最后只能返工。
2.1 MATLAB与DPABINet安装的几个细节
DPABINet是MATLAB环境下的工具包,所以你得先有一份MATLAB。版本方面,我个人建议至少用R2017b以上的版本,太老的版本有概率出现界面兼容问题,尤其是字体、按钮显示不全这类小毛病。DPABINet目前在持续更新,新版会依赖一些较新的MATLAB函数,如果你用的是R2015a这种老古董,可能连点击“Run”都会卡死。
安装步骤非常简单,就是把DPABINet文件放到一个纯英文路径的目录下,然后在MATLAB里把它的路径加到搜索路径中。这里有一个容易被忽略的细节:最好在MATLAB的“预设”中把当前文件夹也指向这个目录,同时确保工作目录里没有中文字符。MATLAB在Windows系统下遇到中文路径经常发生莫名其妙的编码错误,我见过有人因为用户名是中文导致脚本一直跑不通,最后换了个英文账户才解决。
安装完成后,在MATLAB命令行输入dpabinentalent或者dpabinet(根据版本不同,启动指令可能略有差异),就能弹出主界面。如果你用的是DPABI全家桶,也可以在DPABI主界面里找到对应的按钮跳转。
2.2 数据目录到底要怎么放
这是很多人栽跟头的地方。DPABINet对数据目录有约定俗成的规范。我强烈建议你在项目根目录下,像这样组织数据:
ProjectRoot/ ├── Participants/ │ ├── Sub001/ │ │ ├── FunImg/ │ │ │ ├── swraSub001_001.nii │ │ │ ├── swraSub001_002.nii │ │ │ └── ... │ │ └── T1Img/ │ │ └── mwc1Sub001.nii │ ├── Sub002/ │ │ └── ... └── (Output)/为什么非要这样?因为DPABINet在读取数据时会自动寻找Participants目录下每个被试的FunImg文件夹,然后读取里面的时间序列nii文件。如果你用了别的目录名,软件会报“No files found”之类的错误。我建议你把预处理完的数据,按DPARSF输出风格整理一遍再跑DPABINet,能省下大量调试时间。
另外,关于“是否需要结构像分割的灰质图”,这取决于你是否要做“灰质体积校正”。在构建网络时,如果不同被试的灰质模板差异较大,软件需要用它来限制提取时间序列范围内的体素。如果不放这个文件,某些版本会默认只做全脑提取,这样会引入较多噪声。稳妥做法是,每个被试的目录下都放一份由T1分割得到的mwc1文件。
注意:文件名中的个体标识必须和文件夹名保持一致。比如
Sub001文件夹里的人脑功能像最好命名为Sub001_xxx.nii,不要出现Sub001文件夹里放sub002文件这种错位情况。虽然软件有时能识别出顺序,但一旦文件顺序错乱,你后面所有统计结果都会张冠李戴。
2.3 协变量文件与头动参数的准备
DPABINet在进行连接矩阵计算之前,会要求你指定协变量,也就是头动参数(motion parameters)等需要回归掉的信号。不同被试的头动文件在预处理中就已经生成,通常是.txt或.mat格式,里面每一行对应一个时间点的头动参数。
选择头动回归策略时,很多人不知道选多少维,这里我直接说结论:默认用Friston-24模型,即6个头动参数 + 它们的一阶导数 + 平方 + 一阶导数的平方,共24个回归量。这个策略是目前文献中的主流选择,能最大限度减少头动伪迹对连接估计的影响。
如果你在预处理时没有生成头动文件,也可以在DPABINet里选择“无协变量”,但这会明显降低功能连接估计的质量。我见过不少初学者的数据因为头动过大且没有回归,最后图论指标出现很多异常值,组间差异完全测不出来。所以不要嫌麻烦,头动文件一定要准备好,并且每个被试的头动文件行数要与功能像的时间点数严格对应。
3. 大脑网络构建:从预处理结果到功能连接矩阵
这是DPABINet的核心输出之一,也是整个图论分析的前置步骤。说通俗点,脑网络构建就是把大脑划分成若干个节点(脑区),然后算每个节点之间的功能连接强度,最后得到一个矩阵。这个矩阵就是后续所有图论计算的原材料。
3.1 启动DPABINet与界面导航
在MATLAB命令窗口输入启动指令后,你会看到DPABINet的操作面板。界面整体分为几个区域:数据选择区、参数设置区、分析流程区。第一次打开的人可能会觉得密密麻麻,其实你只需要关注几个关键的区域。
- Participants:点击后选择你存放数据的根目录(也就是上面说的
ProjectRoot文件夹)。 - DDN/Atlas(有的版本叫“Template”):用来确定你要使用哪个脑区模板来定义网络的节点。
- Covariate:设置协变量文件目录或格式。
- Analysis:勾选你要做的分析模块,比如FC计算、图论计算等。
重要的一点:DPABINet很多面板按英文习惯命名,如果你英文不熟,建议对照一下软件里自带的README文档,先逐项翻译一遍,不要凭感觉乱勾。
3.2 模板与灰质mask选择
选择模板就是决定你要把大脑划分成多少个“节点”。最经典的模板是AAL90,它把大脑分成左右半球各45个脑区,共90个节点。此外常用的还有AAL1024、CC200、CC400、Destrieux等更细的模板。
初入门的同学我建议第一阶段用AAL90就好。90个节点左右的网络,计算量适中,结果也容易和文献对齐。很多已发表论文用的正是AAL90模板,你后续结果讨论时可以直接对比参考。如果你想做更精细的分析,比如验证某一个亚区层面上的连接改变,那可以换用CC400或者Schaefer2018这类高分辨率模板。
不过更细的模板不一定是好事。模板越细,节点数越多,每个节点包含的体素就越少,时间序列信噪比会下降,网络矩阵也会变得稀疏。我的经验是,如果你样本量只有三四十例,用AAL90做基础分析,再用一个400节点左右的模板做验证性分析,是比较稳妥的组合。
灰质mask方面,DPABINet会使用每个被试的灰质图来确保只提取灰质体素的时间序列。通常这个文件能在预处理阶段的T1分割后得到,路径上放到对应被试目录下就行,一般命名为mwc1*.nii。如果没有,软件会退而求其次使用模板自带的灰质mask。你需要检查界面上“Use individual gray matter mask”这类选项是否勾选,建议勾上,个体灰质mask能把灰白质边界差异造成的影响压到最低。
3.3 Fast FC计算功能连接矩阵
从界面操作角度来说,计算功能连接矩阵几乎是傻瓜式的。你选定数据、选好模板、指定输出目录,然后勾选“Functional Connectivity”选项,再点“Run”即可。软件会根据模板提取每个节点内所有体素的时间序列,求平均后得到该节点代表时间序列,然后计算任意两个节点时间序列的Pearson相关系数,最后得到N×N的连接矩阵。
这个过程看似简单,但我还是要强调几个别人容易忽略的细节:
- 在计算FC之前,软件会自动做带通滤波。通常设置是0.01到0.1Hz(低频振荡频段),这是静息态功能连接的标准频段。如果你想做更高频段或全频段分析,要在参数面板里手动改。大多数文献用的都是0.01~0.1,没有特殊理由不要乱动。
- z转换问题。软件输出的是Fisher-z转换后的连接矩阵,而不是原始相关系数矩阵。原因是原始相关系数受分布限制,不能直接做后续的统计,转成z值后接近正态分布,更适合作图论分析和组间比较。这个细节能帮你读懂输出文件——打开矩阵看到数值大于1、小于-1也不要奇怪,因为那是z值,不是r值。
- 输出文件格式。一般会生成
.mat或.csv格式的连接矩阵,文件名会包含被试ID和模板名称。建议确认一下你的版本输出的是哪种格式,方便后续读取。
当所有被试都算完后,DPABINet通常会生成一个汇总界面,告诉你完成情况。这一步结束后,你就拥有了一份全被试的FC矩阵集,接下来的图论计算,就是在这个矩阵集上做文章。
4. 图论计算:关键参数设置与指标选择
图论计算是DPABINet名字里最有分量的部分。把每一个脑区看作网络里的节点,把连接强度看作边,整个大脑就形成了一个复杂网络。图论分析要做的,是量化这个网络的拓扑属性,比如信息传递效率、局部聚集程度、模块化结构等。这些指标对研究神经精神疾病的脑网络异常非常敏感。
4.1 稀疏度阈值到底怎么定
先解释一个概念:稀疏度(sparsity,简称Sp)指网络中实际存在的边数占最大可能边数的比例。如果你不设置阈值,把所有连接都保留下来,那网络就是个全连接网络,很多图论指标(比如小世界属性)就没意义了。所以通常的做法是设置一个稀疏度范围,只保留连接强度最高的百分之几的边。
DPABINet里一般会让你输入一个稀疏度范围,比如0.05到0.5,步长0.05。含义是:在0.05这个阈值下,只保留权重最靠前的5%的边来构建网络;在0.10阈值下保留10%,依此类推。然后软件会在每一个阈值下都算一遍图论指标,最终得到一组随稀疏度变化的指标曲线。
这个范围怎么选?目前最常用的区间是0.05到0.50,步长0.05。不建议小于0.05,因为这时候网络的边太少,容易变成不连通图,很多指标算不出来;也不建议大于0.50,边太多,网络接近随机,小世界属性会被稀释。
关键提醒:做组间比较时,要检查所有被试在每个稀疏度下网络是否都连通。如果某个被试在0.05的阈值下网络不连通,软件会把这一点的指标算成NaN或者0,最后统计时就会出现大量缺失值。如果这种情况出现,可以把稀疏度下限提高到0.1,或者改用连通度阈值法。
4.2 二值网络还是加权网络
很多初学者会在“二值化”和“加权”之间犯难。简单来说,二值网络只保留边的有无信息,边权都是1;加权网络保留边的强度信息,权重就是功能连接强度。两者各有优劣:二值网络更简洁、受伪迹影响小,分析时不需要担心权重尺度差异;加权网络保持了更多信息,对连接强度的变化更敏感。
DPABINet的图论分析模块中,你可以勾选计算二值网络指标,也可以计算加权网络指标,甚至可以两者都算。我的建议是:在网络构建阶段,加权网络指标作为主要分析对象,二值网络指标作为补充验证。因为加权指标利用了FC矩阵的连续信息,统计效力通常更高。要是审稿人要求与既往文献比较,你再把二值网络指标拿出来也来得及。
不过要注意,加权网络在计算路径长度这类指标时,权重定义方向不对会影响结果。DPABINet内部已经帮你做了处理——它使用连接强度的倒数来定义“距离”,也就是连接越强、距离越短。你不需要手动干预,但写论文时要把这个定义说清楚。
4.3 需要重点关注的图论指标
图论指标种类繁多,DPABINet一次性会输出一大堆结果。初学者经常被几十个指标淹没,不知道论文里该写哪些。我按使用频率和可解释性,给你列一个核心指标清单:
| 指标 | 类型 | 含义 | 常用于 |
|---|---|---|---|
| 小世界属性(Small-worldness) | 全局 | 网络在局部隔离与全局整合之间达到平衡 | 几乎所有脑网络研究 |
| 全局效率(Global efficiency) | 全局 | 全脑信息传递的并行效率 | 精神分裂症、AD研究 |
| 局部效率(Local efficiency) | 全局 | 网络局部容错与信息交换能力 | 抑郁症、脑发育研究 |
| 聚类系数(Clustering coefficient) | 局部 | 节点邻居之间互相连接的程度 | 识别特定脑区功能分化 |
| 特征路径长度(Characteristic path length) | 局部 | 节点间平均最短路径,衡量整体通达性 | 老化和认知障碍研究 |
| 节点度(Degree) | 节点 | 该节点与其他节点连接的数量 | 识别枢纽节点、核心脑区 |
| 模块度(Modularity) | 模块 | 网络分成相对独立子模块的程度 | 大尺度功能网络分离研究 |
在论文里,我建议你至少报告全局效率、局部效率和聚类系数这三个核心指标,因为它们同时覆盖了全局整合和局部隔离两个互补视角。如果你研究的疾病涉及某个具体脑区(比如海马、前额叶),再补上该脑区的节点度或节点效率。DPABINet会为每个节点都计算节点层面的指标,你可以直接从结果表格中把对应脑区找你需要的列。
4.4 多重比较校正与统计策略
图论指标计算完以后,真正的科研重头戏才开始——对指标进行组间比较或相关性分析。DPABINet本身不直接提供完整的统计检验模块(有些新版集成了简单的组比较,但功能有限),所以通常的做法是把指标导入SPSS/R/GraphPad做统计。
这里有一个极易被忽略的点:当你对多个稀疏度下都计算了同一指标,就会出现“多重比较”问题。比如你在10个稀疏度下计算了聚类系数,那这笔账就要算作10次比较。很多期刊会要求你对这组结果进行FDR校正或基于置换检验的校正。DPABINet虽然不直接帮你做置换检验,但它输出了每个稀疏度下的指标结果,你可以用R包fdr之类的方法自行校正。
如果嫌麻烦,有一个变通方法:使用曲线下面积(AUC)作为综合指标。把稀疏度作为横轴、图论指标作为纵轴,求出曲线与横轴围成的面积,每个被试就能得到一个单一数值。这个AUC值把所有稀疏度下的信息浓缩成一个指标,天然躲开了多重比较的烦恼,而且DPABINet输出结果里通常会直接给出AUC值,用起来非常方便。
5. 结果导出与读取:别在最后一步翻车
辛苦跑完分析,结果却读不出来或者看错列,这种悲剧我见过太多次。DPABINet输出的结果其实组织得很清晰,但如果你对文件结构不熟悉,很容易拿错文件。
5.1 结果文件结构
如果你使用的是DPABINet的图论分析模块,完成后输出目录下一般会分为几个子文件夹,分别存放每个被试的原生指标、组水平汇总、AUC文件等。大致结构如下:
Output/ ├── FC_Matrix/ │ ├── Sub001_FC.csv │ ├── Sub002_FC.csv │ └── ... ├── GraphTheory/ │ ├── Sub001/ │ │ ├── GlobalMetrics_Sp0.05.csv │ │ ├── GlobalMetrics_Sp0.10.csv │ │ ├── NodalMetrics_Sp0.05.csv │ │ └── ... │ └── AUC/ │ ├── GlobalMetrics_AUC.csv │ └── NodalMetrics_AUC.csv有些版本会把所有被试的结果汇总到一个大表里,方便你直接导入统计软件。但我建议你仍然检查一下单个被试的文件,确认数值合理(没有全是0、没有全是NaN),再使用汇总结果。
5.2 结果整理进阶技巧
当你同时算了二值网络和加权网络指标时,DPABINet输出的文件后缀可能会有区分(Binary/Weighted),导出后要及时合并成一张总表。这里分享一个我常用的整理流程:
- 打开AUC汇总表,确认首列是被试ID。
- 把你需要的指标列复制到一个新表,按被试ID排列好。
- 加上分组变量(比如患者/对照)、年龄、性别等人口学变量。
- 缺失值检查:凡是有NaN或0的指标,和原始文件核对一遍,确认是真实值还是计算错误。
- 保存成
.csv格式,再导入SPSS或R。
这套流程看着简单,但很多人在第4步翻车——他们把AUC为0的被试当成数据缺失直接剔除,后来被我提醒才知道那是稀疏度0.05下网络不连通导致的极值,最后通过提高下限阈值解决了问题,保住了样本量。
5.3 单被试水平结果的可视化
除了数值结果,DPABINet还能输出连接矩阵的彩色图和小世界属性的曲线图。这些图可以直接用于报告或组会展示。如果你需要更精美的图,有两种方案:一是把FC矩阵或图论指标导出到BrainNet Viewer、Circos这类可视化软件里,制作脑区间的弦图或大脑表面连接图;二是在MATLAB里用内置绘图函数自定义风格。
提示:在图论分析中,你还可以输出某个节点的“节点度”映射到大脑结构上的NIfTI文件,这样就能在MRIcron等软件里看到某个脑区在全脑网络中的枢纽地位。这个功能在展示“核心脑区异常”时特别有用,审稿人看到这种图通常好感度会提升不少。
6. 常见问题与排错实录:我把能踩的坑都帮你踩了一遍
做这个教程之前,我在自己电脑上重新跑了两套数据,把最常见的问题又完整经历了一遍。下面这些问题,几乎每个初学者都会遇到,整理出来供你对照自查。
6.1 点Run后显示No Files Found
这是最最常见的问题。几乎90%的原因是目录结构不对。DPABINet内部的读取逻辑非常死板,它会向Participants下的每个被试文件夹寻找FunImg子目录。如果你的数据放在别的位置,或者文件夹名大小写不一致,就会认不出文件。
解决办法:严格按前面说的Participants → 被试 → FunImg结构重建数据目录,确认文件名中没有中文和特殊符号。如果你是用DPARSF做的预处理,它的输出目录结构通常已经是规范的,直接选到Participants这一级即可。
6.2 结果里出现大量NaN或0
出现这种情况,先检查是不是网络不连通。在低稀疏度下,部分被试的功能连接矩阵可能比较弱,网络被切断,导致最短路径等指标无法计算。我的排查顺序是:
- 打开该被试的FC矩阵,看看连接强度整体是不是比其他被试低一个数量级。
- 如果FC矩阵数值都很小,优先怀疑是预处理时滤波或去协变量做的有问题,或者是头动过大。
- 如果FC矩阵看着正常,只是个别稀疏度下有不连通,就把稀疏度下限调高到0.1,再看结果。
6.3 同一批被试,运行时间差异巨大
有次我发现一个被试的图论计算比其他人慢了将近10倍,最后发现是因为这个被试的功能像分辨率特别高,体素数量多了好几倍,导致提取时间序列时计算量暴增。解决办法是,预处理阶段统一重采样到3mm各向同性体素,这不仅是省时间问题,也保证所有被试的节点定义完全一致。
6.4 MATLAB版本引起的闪退
如果你用的MATLAB版本较旧,打开DPABINet界面后有可能点击按钮就闪退或报Undefined function错误。我的建议是升级到MATLAB R2020a以上版本,再更新到DPABINet最新版。另外,不要在Windows系统下的网络驱动器路径上运行,数据尽量放在本地磁盘,避免网络延迟导致的文件读写错误。
6.5 协变量文件行数与功能像时间点不匹配
这个坑最隐蔽。有些被试因为预处理时去了前几个时间点,功能像只剩140个时间点,但头动文件仍然是150行。DPABINet在回归协变量时会提示维度不匹配。解决办法很简单:到预处理时留存的信息里找到每个被试实际保留的时间点数,把头动文件截断到对应行数。
7. 再谈一点:怎么像写“故事”一样用好DPABINet
我从第一次用DPABINet到现在,最大的体会是:它确实让你“不写代码”,但不等于让你“不思考”。工具把计算细节封装好了,但你得知道自己每一步在算什么,否则结果错了也看不出来。
我给新手的建议路线是:先拿一套公开的测试数据(比如ADNI里面下的几个被试),从数据处理到图论指标输出完整跑通一遍,然后再处理自己的真实数据。这样可以排除很多因软件操作不熟导致的低级错误。
另一个建议是,把DPABINet每次运行生成的参数记录文件都保留下来,因为不同版本的软件默认参数可能略有不同,有了这些记录,你在写论文的方法部分时,可以直接复制粘贴使用的参数,逻辑上更严谨。
最后,如果你想在DPABINet结果基础上进一步做个性化分析(比如自定义脑区坐标、自定义协变量、置换检验),它支持导出中间矩阵和指标,从这些文件出发,你后续用R或Python分析也都完全可行。也就是说,DPABINet并不会把你禁锢在一个黑盒子里,它更像一个高效的前端,把复杂繁琐的工程处理完成,把核心数据交给你自己支配。
做了两年多的脑网络课题,如果只让我给出一条经验,那就是:先把数据质量控制做到位,再来谈方法有多高级。DPABINet再好用,也扛不住到处是伪迹的输入数据;反过来,只要数据干净,哪怕只用最基础的AAL模板和标准化流程,也足够你写出扎实的文章。希望这篇教程能帮你少走点弯路,早日跑通自己的脑网络分析流程。