很多做蛋白组学数据分析的同学,第一次拿到DIA数据时,心情往往比较复杂。数据量大、二级谱重叠严重,拿传统的MaxQuant去跑,要么内存直接爆炸,要么鉴定结果惨不忍睹。这时候,DIA-NN基本就是我给所有人的推荐答案。
DIA-NN是一款专门面向DIA(数据非依赖采集)质谱蛋白质组学数据的免费搜索软件。它用深度学习模型在无谱图库的情况下直接从DIA原始数据中挖掘肽段信号,速度快、定量稳定、自带跨样本匹配能力,这几年在蛋白组学实验室里几乎成了标配。我见过很多课题组用Orbitrap采集完DIA数据,默认流程就是打开DIA-NN跑一轮,再配合Perseus或R做下游统计。
这篇文章适合两类人:一类是刚接手DIA项目、需要一个靠谱分析工具的新手;另一类是已经在跑DIA-NN,但总觉得鉴定数不稳定、参数不敢动的进阶用户。我会把DIA-NN从安装准备、参数配置、结果解读到问题排查整个流程的关键经验讲清楚,尽量把每个参数背后的“为什么”也说透。
1. DIA-NN是什么
1.1 DIA数据长什么样
要理解DIA-NN,先得知道DIA这种采集方式和其他采集方式的区别。传统的DDA(数据依赖采集)是质谱仪先扫一张一级质谱,挑出丰度最高的几十个前体离子,逐个碎裂采集二级谱。这种方式采集效率高,但存在明显偏见——丰度低的肽段很难被选中,而且同一个样本重复进样时,挑选到的肽段不稳定,定量重现性差。
DIA的做法完全不同:它把整个质荷比范围划分成一系列固定窗口(比如400到1000 m/z分成49个窗口),每个窗口内所有离子一起碎裂,再采集二级谱。这样循环一遍下来,理论上所有能被离子化的肽段都有机会被检测到,偏差小、覆盖率高、定量稳定。
但代价是二级谱变得极其复杂:一个窗口里可能有几十上百种肽段同时碎裂,碎片离子全部叠在一张谱图里,传统搜索引擎很难从中分辨出谁是谁。这就是为什么DIA数据不能直接套用DDA那套搜索逻辑。
1.2 DIA-NN为什么又快又准
DIA-NN把深度学习用在了肽段识别上。传统搜索是对每一张谱图计算理论碎片的匹配度,而DIA-NN会先根据样本的液相色谱条件和离子淌度信息,训练神经网络来预测肽段的保留时间、离子迁移率等参数,再结合精确质量数,在复杂的DIA谱图中定位并量化信号。
很多同学刚打开DIA-NN时会发现,它允许只给一个FASTA蛋白序列库,连谱图库都不用准备。这是因为DIA-NN会先用FASTA生成理论肽段列表,再结合DIA数据本身优化这个候选库。这种“无库分析”模式对没有DDA建库条件、或者样本量很大的团队来说,省下的时间和成本非常可观。
另外,DIA-NN的跨样本匹配(MBR,Match Between Runs)也做得比较成熟。它先把不同样本的定量信号对齐,再把低丰度样本里有信号、但在其他样本中信号更高的肽段信息迁移过去,从而减少缺失值。这对临床大队列这种样本间差异大的数据特别重要。
1.3 适合什么场景
从我接触的项目来看,DIA-NN最值得用在这么几种场景:
- 多中心队列的血清、血浆蛋白组数据,需要统一流程、稳定定量;
- 组织或细胞样本只做了DIA采集,没有DDA建库,希望直接无库分析;
- 需要输出基因或蛋白级别的定量矩阵,继续喂给Perseus、R或Python做差异分析;
- 课题组想把分析流程标准化,让不同人、不同批次的结果可以横向比较。
当然,DIA-NN也不是万能的。如果你的样本已经做了非常成熟的DDA谱图库,那么用“有库模式”结合DIA数据提高鉴定可靠性,也是常见的做法。后面我会把这两种模式的选择逻辑说清楚。
2. 动手装好DIA-NN
2.1 下载与安装的细节
DIA-NN主要在Windows下使用,官方提供的是Windows图形界面版本,下载解压后直接双击DIA-NN.exe就能运行。不需要License,也不用激活码,对实验室用户相当友好。
有三个容易踩的坑,我提前说一下:
- 安装目录千万别放在带中文或空格的路径里,否则读取raw文件时容易出莫名其妙的问题;
- 运行需要电脑有.NET相关组件,Windows 10/11基本都自带,但偶尔会有老版本系统报缺文件,去微软官网补装一次就行;
- 内存建议32GB起步。如果你要跑100个以上样本,做无库分析加MBR内存最好到64GB以上。
我见过有同事把DIA-NN放在桌面上的“新建文件夹(2)”里跑,结果每次读raw都报错。换到D盘根目录下的英文路径后,问题立刻消失。这类环境问题最让人抓狂,但排查起来其实很简单。
2.2 输入文件准备
DIA-NN的输入可以简化为三类。
第一类是DIA质谱原始文件,比如Thermo的.raw、Bruker的.d、SCIEX的.wiff。DIA-NN可以直接读取大多数主流格式;如果你用的是比较冷门的仪器,可以考虑先转成mzML再导入。
第二类是蛋白序列FASTA文件。一般到UniProt下载对应物种的参考蛋白组,人类就选“Reviewed (Swiss-Prot)”版本。这里有一个经验值得分享:直接下载的FASTA文件很大,里面包含大量异构体,DIA-NN搜索时会变慢,蛋白推断也容易变复杂。我通常会稍微处理一下,保留常用转录本,再加一个常见污染物库,后续定量矩阵会干净不少。
第三类是可选的谱图库文件。通过DDA方法建好的谱图库需要转换成DIA-NN支持的格式(比如.speclib)再使用。没有现成谱图库完全没关系,DIA-NN会通过FASTA生成自己的预测库,这是它的招牌功能。
2.3 三种工作模式怎么选
DIA-NN界面最显眼的用法区别,就是“无库”还是“有库”。我按实际项目需求拆成三种模式:
| 模式 | 输入 | 优点 | 典型场景 |
|---|---|---|---|
| 无库模式 | DIA数据 + FASTA | 不需要额外建库,省时省力 | 常规DIA项目、临床大队列 |
| 生成库模式 | DIA数据 + FASTA | 会输出预测谱图库,后续可复用 | 第一批样本分析,顺便为后续批次建库 |
| 有库模式 | 已生成的.speclib + DIA数据 | 搜索速度更快,结果更稳定 | 已有成熟谱图库,或做验证性分析 |
我自己的习惯是:同一个项目的第一批DIA数据,第一次一定用无库模式,同时勾选生成谱图库。等第一批跑完,检查鉴定数、定量质量没问题后,这个谱图库就留下来。到第二批样本进来时,再改用有库模式做快速分析。这样既保证第一批结果可靠,又让整个项目的后续效率提升明显。
3. 核心参数怎么调
3.1 质谱类型与实验设计
DIA-NN界面上方会让你设置质谱类型。Orbitrap和TOF两类仪器在碎片谱质量和离子迁移率上有差异,对应的参数模板也不同。这一步选错,保留时间预测模型和窗口划分逻辑会整体偏离。
在“Experimental design”区域,可以选择是否做内标归一化。如果用iRT肽段做了校准,可以在这里指定;没有特殊要求时一般保持默认。界面里还有一个“Fast”和“Accurate”的切换,代表快速模式和精确模式。精确模式会做更精细的信号定型和保留时间校正,时间代价更高。我的建议是:数据量少于50个样本、对结果质量要求高时选Accurate;如果只是先看个大概趋势,用Fast快速试参就够了。
3.2 酶切、修饰与肽段范围
这部分必须和实验端严格对齐。如果样本是用Trypsin酶解的,DIA-NN这里就选Trypsin/P;如果加了LysC或者别的酶,也要对应修改。漏切位点默认是1,我实测下来常规消化条件的项目用1就够了,改成2会让搜索空间变大、耗时变长,但鉴定数并不一定显著提升。
可变修饰至少要把Oxidation(M)勾上。如果样品做过TMT或者iTRAQ标记,还要按试剂盒说明书加对应标记修饰。这里常见的坑是:修饰设置和实验实际不一致。比如样本有乙酰化修饰,你却只勾了氧化,大量发生质量偏移的肽段就搜不出来,鉴定数会明显偏低。
肽段长度默认是7到30个氨基酸,一般保持默认。肽段质量我通常不加限制,让软件自动处理。还要注意“Specific”级别选的是Trypsin,不能用“Unspecific”,否则搜索空间会大得离谱,跑批时间翻几倍。
3.3 搜库、定量与跨样本匹配的关键选项
在“Search”选项卡里,几个比较关键的参数是:
- 蛋白推断(Protein inference):选Protein Groups,它会把能够被同一组肽段支持的蛋白合并输出,结果可读性好,后续也方便做基因级别分析。
- 定量方法:默认是Robust LC(高精度),高分辨率Orbitrap数据保持默认即可。
- 全局FDR:一般设0.01,也就是1%。这个值控制最终报告的可靠程度,太高会带来很多假阳性,太低又损失鉴定数。
- 质量精度容差:Orbitrap高精度数据用10 ppm左右,TOF仪器根据采集情况适当放宽。
- MBR(跨样本匹配):建议样本数不超过50且内存充足时开启。它显著降低低丰度蛋白的缺失值,后续差异分析会好做很多。
DIA-NN里还有一个“No shared peptides”选项,勾选后会过滤掉所有共享肽段,只保留可唯一映射到单个蛋白的肽段用于定量。这对理解某个蛋白丰度更严谨,但也会损失一部分信息。我做细胞样本时通常关掉,做血浆样本时会开,因为血浆样本共享肽段干扰更大。
3.4 一套可以直接用的推荐参数
这里给出一套常规Orbitrap DIA项目的参数,场景是细胞裂解液、120分钟梯度、一共27个RAW文件:
| 参数项 | 推荐值 | 理由 |
|---|---|---|
| 质谱类型 | Orbitrap | 对应高分辨率采集模板 |
| 模式 | Accurate | 数据量不大,求质量 |
| 酶切 | Trypsin/P,漏切1 | 与常规溶液内酶解一致 |
| 修饰 | Oxidation(M);Acetyl(Protein N-term) | 覆盖最常见可变修饰 |
| 肽段长度 | 7-30 | 默认即可 |
| 蛋白推断 | Protein Groups | 输出易读,下游友好 |
| 全局FDR | 0.01 | 兼顾可靠性和鉴定数 |
| MBR | 开启 | 27个样本量不算大 |
| 定量方法 | Robust LC (high accuracy) | 匹配高分辨质谱采集 |
| 输出 | 勾选生成谱图库 | 后续批次复用 |
这套参数在我项目里,人类细胞样本一般能鉴定到9000到11000个蛋白组,具体数看样本复杂度和色谱分离度。如果鉴定数明显低于这个水平,大概率不是参数问题,而是样本制备或LC梯度的问题,这个后面会细说。
4. 跑完之后怎么看结果
4.1 输出文件到底有哪些
DIA-NN跑完后,会在输出目录里生成一批文件。新手上路最容易弄混的是各个文件的作用,我整理成一张表:
| 文件 | 内容 | 常用场景 |
|---|---|---|
| report.tsv | 前体级别的全部搜索结果,包含定量值和质控列 | 深度质控、前体定量分析 |
| report.pr_matrix.tsv | 肽段定量矩阵,行为肽段,列为样本 | 肽段级别差异分析 |
| report.pg_matrix.tsv | 蛋白组定量矩阵(去掉共享肽段) | 蛋白级别定量、下游统计 |
| report.unique_peptide_matrix.tsv | 唯一肽段定量矩阵 | 保守定量分析 |
| report.quantification.tsv | 每个样本的定量总览 | 样本质量评估 |
| *.speclib | 预测生成的谱图库 | 后续批次搜索复用 |
4.2 report.tsv里的核心列怎么读
report.tsv是信息最全、也最容易让人绕晕的文件。每一行代表一个前体,也就是一个特定的肽段电荷状态。常见列包括:
- Protein.Group:DIA-NN给蛋白组分配的唯一编号;
- Protein.Ids:候选蛋白ID列表;
- Genes:对应的基因名;
- Quantity:这个前体在当前样本中的定量值;
- Q.Value和Global.Q.Value:局部和全局FDR估计值,越小越可靠,一般筛选阈值就是0.01;
- Potential.Contaminant:是否为潜在污染蛋白,跑完后要专门过滤掉标记为TRUE的行。
很多人拿到report.tsv后直接当蛋白表用,这是不对的。这个文件是前体级别,同一个蛋白会对应多行不同前体。要做蛋白差异分析,应该用pg_matrix.tsv,或者用report.tsv按Protein.Group聚合后再处理。
4.3 如何清洗DIA结果得到一张蛋白定量表
从DIA-NN输出到最终用于统计的蛋白定量表,我固定走三步。
第一步,过滤。把Potential.Contaminant为TRUE的条目全部删掉,同时确认没有反库(decoy)条目混在最终报告里。
第二步,决定缺失值规则。蛋白组学数据天然存在缺失值。我会把某个蛋白在至少70%以上样本中有定量值作为保留标准。后续用Perseus做分析时,缺失值通常要替换为从分布底部抽样的数值,而不是直接填0。
第三步,归一化。DIA-NN内部已经做了基本归一化,但跨批次比较时建议再用R或Perseus做一轮中位数归一化,或者用内参蛋白校正。这一步对临床样本尤其重要,能明显降低进样量不同带来的批次差异。
4.4 下游分析怎么接
清洗好的蛋白定量表可以直接导入Perseus。我常用的流程是:读入表格,按分组定义样本列,做缺失值过滤,用t检验或ANOVA找差异蛋白,最后导出火山图数据和热图数据。如果要在R里做,可以用DEP包读取DIA-NN的报告,也可以用limma处理差异分析。
有些同学喜欢在report.tsv里用Excel做筛选,小样本勉强可以,样本一多就非常容易出错。最稳妥的方法是:从DIA-NN只拿相对原始的数据,所有清洗和统计交给脚本或Perseus,整个过程可追溯,也好复现。
5. 常见报错与实战排坑速查表
5.1 运行层面的问题
先说三件大家最容易撞上的事。
程序双击打不开。常见原因是系统组件缺失或者目录权限不对。把整个文件夹换到C盘根目录下一个不带中文的路径,多数能解决;如果还不行,补装.NET组件。
软件能开,但读取raw文件失败。优先检查raw文件是不是被其他软件占用,以及文件本身是否完整。其次看格式兼容性。如果遇到旧版本文件格式或自定义采集参数,建议先用质谱厂家软件导出成mzML再导入。
跑批过程中内存溢出。无库模式加MBR是内存大户。如果电脑只有32G内存,跑40个以上样本的队列会比较吃力。我的处理办法是减少并行线程数,或者把样本分批跑,生成谱图库后再用有库模式合并。
5.2 鉴定数与定量质量异常
鉴定数太少,远低于预期,这种问题最让人头大。根据我的排坑经验,按以下优先级排查:
- 先查FASTA。有没有选对物种?是不是只保留了参考蛋白组而不是整个泛基因组?
- 再查修饰设置。是否遗漏了样本制备中实际发生的修饰?
- 然后查梯度。120分钟梯度和60分钟梯度的窗口优化参数不同,DIA-NN里“Sliding window”等选项要跟液相条件匹配。
- 最后查质量精度容差。如果采集质量偏移大,10 ppm定太严会丢信号,可以适当放宽。
定量CV高(重复样本之间偏差大),除了仪器稳定性,多半是MBR没开或者样本前处理批次差异过大。可以看report.quantification.tsv中各样本的定量总量是否在一个量级,如果差异超过几倍,进样量方面大概率有问题。
5.3 问题排查速查表
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 软件打不开 | 系统组件缺失、路径带中文 | 换纯英文路径,补装.NET组件 |
| raw读取失败 | 文件被占用、格式不兼容 | 关闭其他软件,必要时转mzML |
| 跑批极慢 | 线程配置不合理、无库模式复杂度高 | 调整线程,先小样本试跑 |
| 内存溢出 | MBR+无库模式内存消耗大 | 分批跑,减少线程,增大内存 |
| 鉴定数远低于预期 | FASTA不全、修饰设置错误、梯度不匹配 | 按5.2顺序排查 |
| 定量CV高 | 样本制备差异、MBR未开 | 检查仪器稳定性,开启MBR |
| 报告读入R报错 | 列名重复、类型不一致 | 设置check.names=FALSE |
| 蛋白矩阵大量缺失 | 低丰度蛋白、MBR未开启 | 考虑开启MBR,调整过滤阈值 |
5.4 我实测下来的几条独门心得
第一,不要拿一个超大规模数据集直接开跑。我第一次用DIA-NN时,一次性把200个队列样本丢进去,结果跑了三天,日志里全是内存告警。后来改成先跑前5个样本,确认结果没问题后再分批跑完整队列,效率反而高很多。
第二,DIA-NN的log文件是极好的排坑入口。跑批时它会记录每个步骤耗时、跳过多少谱图、识别到多少前体。多看看log,很多异常在结果出错之前就能发现。比如某个样本采集数量异常低,log里会显示“Processed only XXX spectra”,这时候就要检查raw文件本身是否有问题。
第三,样本名称规划很重要。DIA-NN输出矩阵的列名就是raw文件名。如果你一开始命名为“sample1”“sample2”,后面做差异分析时根本分不清分组。建议上机采集前,用“组别_样本编号_重复编号”的方式命名raw文件,DIA-NN跑出来的矩阵就会一目了然。
做蛋白组学数据分析这条路,DIA-NN给了我一个很大的感触:工具选对了,很多之前觉得“不靠谱”的数据,往往只是没有用对方法。DIA数据本身是高度规则化的采集方式,只要把参数逻辑理顺,让软件的理解和实验室的操作对得上,大多数项目都能稳定地产出可用结果。我至今还保留着第一次用DIA-NN跑出来的那个谱图库文件,不是因为它有多特殊,而是它让我意识到,好的分析工具不是替你做实验,而是把实验信息翻译成你能理解的语言。希望这篇分享能帮你在蛋白组学数据分析里少走一段弯路。