蛋白组DIA定量分析¶
一句话说明¶
DIA(数据非依赖采集)蛋白组学是新一代蛋白质定量技术——它不像DDA那样"挑选"离子进行碎裂,而是把所有离子按m/z范围"全部扫一遍",实现更全面、更可重复的蛋白质定量,就像考试从"抽题考"变成"全考"。
核心知识点¶
要点1:DDA vs DIA核心区别¶
- DDA(数据依赖采集):每个扫描周期只选Top N强度的前体离子碎裂——随机性大,不同样本可能选到不同的肽段
- DIA(数据非依赖采集):把整个m/z范围分成若干窗口(如每25 Da一个),每个窗口内所有离子同时碎裂——无遗漏,可重复
- 比喻:DDA像老师随机点名提问,每次问的学生不一样;DIA像全班一起答卷,每个人都有成绩
要点2:DIA数据分析策略¶
- 谱库搜索(Library-Based):先用DDA数据建立谱库,再用谱库解析DIA数据
- 工具:OpenSWATH、Spectronaut、DIA-NN
- 无谱库搜索(Library-Free):直接从DIA数据中提取肽段信息
- 工具:DIA-NN(directDIA模式)、DIA-Umpire
- 混合策略:先library-free生成伪谱库,再做library-based搜索
要点3:DIA-NN(2024-2025最热门工具)¶
- 作者:Vadim Demichev,开源免费
- 优势:速度快、灵敏度高、支持library-free模式
- 核心算法:基于深度学习预测肽段保留时间和碎片离子强度
- 输出:蛋白/肽段定量矩阵、FDR控制、条件对比等
要点4:DIA数据质控要点¶
- 肽段/蛋白鉴定数:好的DIA实验每次能鉴定5000-8000种蛋白(人类样本)
- 缺失值:DIA的缺失值远少于DDA,通常<5%
- CV值:技术重复的蛋白定量CV通常<20%
- FDR控制:肽段和蛋白层面都要求FDR<1%
实战代码¶
# === DIA-NN分析流程(命令行版本) ===
# DIA-NN 1.9+ 安装:从 https://github.com/vdemichev/DiaNN 下载
# 1. Library-free模式直接分析DIA数据
diann \
--f raw_data/sample1.raw \ # 输入原始数据(支持.raw/.mzML/.d)
--f raw_data/sample2.raw \
--f raw_data/sample3.raw \
--lib "" \ # 空字符串表示library-free模式
--fasta human_uniprot.fasta \ # 蛋白质序列数据库
--threads 8 \ # 使用8个线程
--out results/report.tsv \ # 输出报告文件
--out-lib results/spectral_lib.tsv \# 生成的谱库(可用于后续分析)
--qvalue 0.01 \ # FDR阈值1%
--matrices \ # 输出蛋白/肽段矩阵
--met-excision \ # 考虑N端Met切除
--missed-cleavages 1 \ # 允许1个漏切
--min-pep-len 7 \ # 最短肽段长度7个氨基酸
--max-pep-len 30 \ # 最长肽段长度30个氨基酸
--min-pr-charge 2 \ # 最小前体电荷2+
--max-pr-charge 4 # 最大前体电荷4+
# === DIA-NN结果下游分析 ===
import pandas as pd
import numpy as np
from scipy.stats import ttest_ind
from statsmodels.stats.multitest import multipletests
# 1. 读取DIA-NN输出的蛋白定量矩阵
protein_matrix = pd.read_csv("results/report.pg_matrix.tsv", sep="\t", index_col=0)
print(f"鉴定蛋白数: {protein_matrix.shape[0]}") # 查看鉴定到的蛋白数量
print(f"缺失率: {protein_matrix.isnull().sum().sum() / protein_matrix.size:.2%}")
# 2. 过滤和填补
# 保留至少在70%样本中有定量值的蛋白
min_valid = int(0.7 * protein_matrix.shape[1]) # 至少70%样本有值
protein_filtered = protein_matrix.dropna(thresh=min_valid) # 过滤
# 对数变换
protein_log = np.log2(protein_filtered) # log2变换
# 3. 差异蛋白分析
group_disease = ["sample1", "sample2", "sample3"] # 疾病组样本名
group_control = ["sample4", "sample5", "sample6"] # 对照组样本名
results = []
for protein in protein_log.index:
d = protein_log.loc[protein, group_disease].dropna() # 疾病组数据
c = protein_log.loc[protein, group_control].dropna() # 对照组数据
if len(d) >= 2 and len(c) >= 2: # 至少2个有效值
fc = d.mean() - c.mean() # log2 fold change
_, pval = ttest_ind(d, c) # t检验
results.append({"Protein": protein, "log2FC": fc, "pvalue": pval})
df_results = pd.DataFrame(results)
# FDR校正
df_results["padj"] = multipletests(df_results["pvalue"], method="fdr_bh")[1]
# 筛选差异蛋白
sig = df_results[(df_results["padj"] < 0.05) & (abs(df_results["log2FC"]) > 1)]
print(f"差异蛋白数: {len(sig)}")
面试常问点¶
Q1: DIA比DDA好在哪里?¶
参考答案:DIA的核心优势是"不遗漏、可重复"。DDA因为只选Top N离子碎裂,低丰度蛋白经常被遗漏,而且不同样本选到的肽段可能不同,导致缺失值多(30-50%)。DIA把整个m/z范围全部扫描,理论上不遗漏任何肽段,缺失值通常<5%,而且不同样本间的定量结果高度可重复。但DIA的数据更复杂,需要更强的计算解析能力。
Q2: DIA-NN的library-free模式和谱库模式哪个更好?¶
参考答案:各有优势。谱库模式如果谱库质量高(来自同类样本的DDA数据),鉴定灵敏度更高。但需要额外做DDA实验建谱库,费时费力。Library-free模式不需要谱库,用深度学习预测肽段碎裂模式,方便快捷。DIA-NN 1.8+版本的library-free模式已经非常成熟,鉴定数量接近甚至超过谱库模式,所以现在越来越多人直接用library-free。
速查卡片¶
| 问题 | 一句话答案 |
|---|---|
| DIA全称? | Data-Independent Acquisition(数据非依赖采集) |
| DIA vs DDA缺失值? | DIA <5%,DDA 30-50% |
| DIA-NN是什么? | 2024-2025最流行的DIA数据分析工具,基于深度学习 |
| Library-free模式需要什么? | 只需要FASTA蛋白序列库,不需要DDA谱库 |
| DIA FDR标准? | 肽段和蛋白层面都<1% |
| DIA适合什么场景? | 大队列、需要高重复性和低缺失值的定量蛋白组学 |