蛋白质组DIA分析¶
一句话概述:DIA(数据非依赖采集)蛋白质组学通过对所有前体离子同时碎裂实现高通量、高重复性的蛋白定量,DIA-NN和Spectronaut是两大主流分析软件,2026年Benchmark显示两者在>7600个蛋白中有>7000个重叠。
核心知识点速览¶
| 概念 | 白话解释 |
|---|---|
| DIA | 数据非依赖采集,把所有m/z范围分窗口同时碎裂 |
| DDA | 数据依赖采集(传统方法),只选Top N强度的前体碎裂 |
| MS1 | 一级质谱,测量前体离子(完整肽段)的m/z |
| MS2 | 二级质谱,碎裂后测量碎片离子的m/z |
| 谱库 | 已知肽段的碎裂模式参考库(spectral library) |
| library-free | 不需要预先建谱库,用AI预测碎裂模式 |
| DIA-NN | 开源DIA分析软件,支持library-free模式 |
| Spectronaut | 商业DIA分析软件,GUI友好 |
| FragPipe | 开源蛋白质组学流水线,支持DIA |
| FDR | 假发现率,蛋白/肽段鉴定的统计阈值 |
| LFQ | 无标记定量,不用同位素标记的蛋白定量方法 |
一、DIA vs DDA基础¶
1.1 DDA的局限性¶
传统DDA采集方式:
MS1扫描 → 选择强度最高的Top10-20个前体离子
→ 逐个碎裂做MS2 → 回到MS1 → 重复
DDA的问题:
1. "有钱人效应"——只选最强的离子,低丰度蛋白被忽略
2. 随机性——不同样本选到不同的离子,重复性差
3. 缺失值多——50%以上的蛋白可能在部分样本中检测不到
4. 动态范围有限——高丰度蛋白占用大量采集时间
1.2 DIA的原理¶
DIA采集方式:
把整个m/z范围(如400-1200 m/z)分成若干窗口(如25 Da一个窗口)
每个窗口内所有前体离子同时碎裂
→ 结果是每个窗口的混合MS2谱
DIA的优势:
1. 全覆盖——不遗漏任何前体离子
2. 高重复性——每次采集相同的m/z范围
3. 缺失值少——蛋白在不同样本中都能定量
4. 定量准确——因为采集全面且一致
DIA的挑战:
每个窗口的MS2谱是多个肽段的混合谱
→ 需要强大的算法"解卷积"(deconvolution)
→ 这就是DIA-NN和Spectronaut的核心任务
DIA窗口示意:
窗口1: 400-425 m/z → 混合MS2
窗口2: 425-450 m/z → 混合MS2
窗口3: 450-475 m/z → 混合MS2
...
窗口32: 1175-1200 m/z → 混合MS2
二、DIA-NN分析流程¶
2.1 安装和基本使用¶
# DIA-NN 2.5.1(2025-2026最新版)
# 下载地址:https://github.com/vdemichev/DiaNN/releases
# Linux安装
wget https://github.com/vdemichev/DiaNN/releases/download/2.5.1/diann-2.5.1.tar.gz # 下载
tar -xzf diann-2.5.1.tar.gz # 解压
./diann --help # 测试安装
# DIA-NN有两种版本:
# Academia版:有限功能,免费用于非营利学术研究
# Enterprise版:全功能,通过Aptila Biotech或Thermo Fisher获取
2.2 谱库生成(Library Generation)¶
# ===== 方法1:从FASTA预测谱库(library-free,推荐) =====
# DIA-NN内置深度学习模型预测肽段碎裂模式
diann \
--fasta uniprot_human.fasta \ # UniProt蛋白序列库
--fasta-search \ # 从FASTA搜索
--lib \ # 生成谱库
--threads 8 \ # 线程数
--predictor \ # 使用深度学习预测碎裂
--out-lib predicted_lib.tsv # 输出预测谱库
# ===== 方法2:从DDA数据建谱库(经验谱库) =====
# 如果有DDA采集的原始数据
diann \
--f DDA_file1.raw \ # DDA原始数据
--f DDA_file2.raw \
--fasta uniprot_human.fasta \
--lib \
--threads 8 \
--out-lib empirical_lib.tsv # 输出经验谱库
# library-free方法已经足够好
# 只有追求最大深度或靶向分析时才需要建经验谱库
2.3 DIA数据分析¶
# 使用DIA-NN分析DIA原始数据
diann \
--f sample1.raw \ # DIA原始数据文件1
--f sample2.raw \ # DIA原始数据文件2
--f sample3.raw \ # DIA原始数据文件3
--lib predicted_lib.tsv \ # 谱库(或用--fasta直接搜索)
--fasta uniprot_human.fasta \ # 蛋白序列库
--threads 16 \ # 线程数
--out report.tsv \ # 主输出报告
--out-lib refined_lib.tsv \ # 精炼后的谱库
--qvalue 0.01 \ # FDR阈值1%
--matrices \ # 输出定量矩阵
--smart-profiling \ # 智能谱图分析
--met-excision \ # 考虑N端甲硫氨酸切除
--cut K*,R* \ # 胰蛋白酶切割规则
--missed-cleavages 1 \ # 允许1个漏切位点
--min-pep-len 7 \ # 最小肽段长度7
--max-pep-len 30 \ # 最大肽段长度30
--min-pr-charge 2 \ # 最小前体电荷2+
--max-pr-charge 4 \ # 最大前体电荷4+
--var-mods 1 \ # 可变修饰数
--var-mod UniMod:35,15.994915,M # 甲硫氨酸氧化修饰
# DIA-NN输出文件说明:
# report.tsv — 所有鉴定的肽段和蛋白
# report.pg_matrix.tsv — 蛋白组定量矩阵
# report.pr_matrix.tsv — 前体离子定量矩阵
# report.gg_matrix.tsv — 基因组定量矩阵
# report.stats.tsv — 运行统计信息
2.4 Library-free直接搜索¶
# 完全不需要预先建库,直接从FASTA搜索
# 2025-2026年推荐的方法
diann \
--f sample1.raw \
--f sample2.raw \
--fasta uniprot_human.fasta \ # 直接用FASTA
--fasta-search \ # 启用FASTA搜索模式
--threads 16 \
--out report.tsv \
--qvalue 0.01 \
--matrices \
--smart-profiling \
--predictor # 用深度学习预测碎裂
# Library-free模式的优势:
# 1. 不需要DDA数据建库
# 2. 不需要购买谱库数据库
# 3. 结果通常和经验谱库相当
# 4. 更适合非模式生物
三、Spectronaut分析¶
3.1 Spectronaut概述¶
Spectronaut是Biognosys公司的商业DIA分析软件
特点:
- GUI界面友好,适合不会命令行的用户
- 自动参数优化
- 内置统计分析和可视化
- 标准化的报告输出
- 支持directDIA(library-free)模式
价格:需要购买License,学术版约$2000-5000/年
Spectronaut vs DIA-NN对比(2026年Benchmark):
- 两者在肺腺癌样本中都鉴定>7600个蛋白
- 共同鉴定7180个蛋白(重叠率>94%)
- Spectronaut差异蛋白:1250上调/266下调
- DIA-NN差异蛋白:1819上调/174下调
- Top50差异蛋白中34个重叠
3.2 Spectronaut后处理(R语言)¶
# 使用SpectroPipeR处理Spectronaut输出
# install.packages("SpectroPipeR") # 2025年Bioinformatics发表
library(SpectroPipeR)
# 读取Spectronaut导出的报告
data <- read_spectronaut("spectronaut_report.tsv") # 读取报告
# 自动化分析流水线
result <- spectropiper(
data = data,
condition_col = "Condition", # 条件列名
comparison = c("Tumor", "Normal"), # 比较组
fdr_threshold = 0.01, # FDR阈值
log2fc_threshold = 1 # log2FC阈值
)
# 输出包括:
# - 标准化的蛋白定量矩阵
# - 差异蛋白列表
# - 火山图和热图
# - 功能富集结果
四、R语言下游分析¶
# DIA-NN输出的下游统计分析
library(tidyverse)
# 1. 读取DIA-NN蛋白定量矩阵
protein_matrix <- read.delim("report.pg_matrix.tsv") # 读取蛋白矩阵
rownames(protein_matrix) <- protein_matrix$Protein.Group # 设置行名
# 2. 数据预处理
# 移除反库和污染物蛋白
protein_clean <- protein_matrix %>%
filter(!grepl("^REV_", Protein.Group)) %>% # 去除反库蛋白
filter(!grepl("^CON_", Protein.Group)) # 去除污染物
# log2转换
quant_cols <- grep("raw$", colnames(protein_clean)) # 定量列
protein_log2 <- protein_clean
protein_log2[, quant_cols] <- log2(protein_clean[, quant_cols]) # log2转换
# 缺失值处理
missing_pct <- rowMeans(is.na(protein_log2[, quant_cols])) # 缺失比例
protein_filtered <- protein_log2[missing_pct < 0.5, ] # 保留<50%缺失的蛋白
cat("过滤后蛋白数:", nrow(protein_filtered), "\n")
# 3. 差异蛋白分析(limma)
library(limma)
# 设计矩阵
group <- factor(c(rep("Tumor", 3), rep("Normal", 3))) # 分组
design <- model.matrix(~ 0 + group) # 设计矩阵
colnames(design) <- levels(group)
# limma分析
fit <- lmFit(protein_filtered[, quant_cols], design) # 拟合
contrast <- makeContrasts(Tumor - Normal, levels = design) # 对比
fit2 <- contrasts.fit(fit, contrast) # 对比拟合
fit3 <- eBayes(fit2) # 贝叶斯估计
# 提取结果
dep_results <- topTable(fit3, number = Inf) # 所有结果
sig_proteins <- dep_results %>%
filter(adj.P.Val < 0.05 & abs(logFC) > 1) # 显著差异蛋白
cat("显著差异蛋白数:", nrow(sig_proteins), "\n")
# 4. 火山图
library(EnhancedVolcano)
EnhancedVolcano(dep_results,
lab = rownames(dep_results), # 蛋白名标签
x = "logFC", # X轴:log2FC
y = "adj.P.Val", # Y轴:调整后P值
pCutoff = 0.05, # P值阈值线
FCcutoff = 1, # FC阈值线
title = "Tumor vs Normal") # 标题
# 5. 功能富集
library(clusterProfiler)
library(org.Hs.eg.db)
# 上调蛋白的GO富集
up_proteins <- sig_proteins %>% filter(logFC > 0) # 上调蛋白
ego <- enrichGO(
gene = rownames(up_proteins),
OrgDb = org.Hs.eg.db,
keyType = "UNIPROT", # UniProt ID
ont = "BP",
pvalueCutoff = 0.05
)
dotplot(ego, showCategory = 15) # 气泡图
五、方法选择指南¶
# DIA分析工具选择决策树
┌─ 预算充足 + GUI偏好?
│ └─ 是 → Spectronaut
│ └─ 否 → DIA-NN(免费开源)
│
├─ 有DDA数据建库?
│ └─ 是 → 经验谱库 + DIA-NN/Spectronaut
│ └─ 否 → Library-free模式(推荐)
│
├─ 需要自动化流水线?
│ └─ 是 → FragPipe(开源,CI友好)
│ └─ 否 → DIA-NN命令行足够
│
├─ 磷酸化蛋白组?
│ └─ Spectronaut覆盖最高
│ └─ DIA-NN变异性最低
│
└─ 临床大队列(>100个样本)?
└─ DIA-NN(速度快,library-free)
常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
DIA-NN: raw file not found | 文件路径错误或格式不支持 | 检查路径,确认支持的格式(.raw/.mzML/.d) |
Too few identifications | 谱库不匹配或参数错误 | 检查物种是否正确,用library-free模式 |
FDR: all filtered | FDR阈值太严格 | 放宽到0.05或检查数据质量 |
Memory error | 样本太多或谱库太大 | 分批处理或增加内存 |
Spectronaut: license expired | 许可证过期 | 续费或转用DIA-NN |
Missing values >80% | 样本间定量一致性差 | 检查样本制备质量,使用MBR |
速查表¶
# DIA分析流程
原始数据(.raw/.mzML) → DIA-NN/Spectronaut搜索
→ 蛋白定量矩阵 → 标准化 → 缺失值处理
→ 差异分析(limma) → 功能富集(clusterProfiler)
# DIA-NN关键参数
--fasta-search: library-free模式
--qvalue 0.01: 1% FDR
--matrices: 输出定量矩阵
--smart-profiling: 智能谱图分析
--predictor: 深度学习碎裂预测
--threads: 线程数(建议≥8)
# FDR控制标准
肽段FDR: ≤1%
蛋白FDR: ≤1%
推荐同时使用target-decoy策略
# 工具对比
DIA-NN: 免费,命令行,library-free优秀
Spectronaut: 商业,GUI友好,报告完善
FragPipe: 免费,流水线,适合自动化
SpectroPipeR: R包,后处理Spectronaut数据
# 典型鉴定数量(人类细胞系)
DIA-NN library-free: 6000-8000蛋白
Spectronaut directDIA: 6000-8000蛋白
DDA+谱库方法: 7000-9000蛋白
面试高频问题¶
Q1:DIA和DDA的核心区别是什么?¶
答:DDA(数据依赖采集)在每个MS1扫描后只选择信号最强的Top-N个前体离子做MS2碎裂,导致低丰度蛋白被遗漏且重复性差。DIA(数据非依赖采集)把整个m/z范围分成固定窗口,每个窗口内所有前体离子同时碎裂,实现全覆盖。DIA的缺失值少、重复性高、定量更准确,但MS2是混合谱需要复杂算法解析。目前DIA已经成为蛋白质组学的主流采集方式。
Q2:DIA-NN的library-free模式原理是什么?¶
答:Library-free模式不需要预先从DDA实验建谱库。DIA-NN内置的深度学习模型可以从蛋白序列(FASTA文件)直接预测每个肽段的碎裂模式(MS2谱图)和保留时间。分析时,DIA-NN用预测的碎裂模式去匹配实际DIA数据中的MS2信号,通过比对色谱峰形和碎片离子比例来鉴定和定量肽段。2025-2026年的评估显示library-free的结果已经接近甚至达到经验谱库的水平。
Q3:DIA-NN和Spectronaut怎么选?¶
答:2026年ACS Omega的Benchmark显示两者性能非常接近——在肺腺癌样本中都鉴定>7600个蛋白,共同蛋白>7000个。选择主要看需求:①预算有限或需要命令行自动化→DIA-NN(免费开源);②偏好GUI操作和标准化报告→Spectronaut(商业软件);③磷酸化蛋白组→Spectronaut覆盖略高,DIA-NN变异性略低;④大队列临床研究→DIA-NN(速度快,library-free)。
Q4:DIA数据的缺失值怎么处理?¶
答:DIA的缺失值比DDA少很多,但仍然存在。处理策略:①Match Between Runs(MBR)——利用不同样本间的保留时间对齐,从一个样本的鉴定结果去匹配另一个样本的信号,减少缺失值;②过滤——移除在>50%样本中缺失的蛋白;③填补——对于随机缺失用KNN/最小值/中位数填补;④统计方法——使用能处理缺失值的统计方法(如Perseus的imputation或DAPAR/ProStaR)。
Q5:蛋白质组差异分析为什么用limma而不是DESeq2?¶
答:DESeq2是为测序计数数据(离散分布)设计的,蛋白质组的定量数据是连续强度值(log2转换后近似正态分布),不适合用DESeq2的负二项分布模型。limma基于线性模型+经验贝叶斯,适合小样本、连续型定量数据,是蛋白质组差异分析的标准方法。对于大样本量(>20个),也可以用t检验或方差分析,但limma通过借用跨蛋白的方差信息,在小样本时表现更稳健。