质谱数据基础:RAW文件格式,峰值列表,特征矩阵
做跨平台合并批次校正,第一步得搞清楚数据长什么样。你拿到的原始文件是RAW格式,但下游分析用的大多是峰值列表或特征矩阵。这三个东西怎么串起来的?我先把基础讲清楚。
RAW 文件:仪器直接吐出来的原始数据
RAW 文件是质谱仪采集结束后直接保存的二进制文件。每家厂商都有自己的格式:Thermo 是 .raw,Bruker 是 .d 文件夹加一堆二进制,SCIEX 是 .wiff。timsTOF 和 Orbitrap 联用后,数据存储其实还是各自管各自的,你需要用厂商提供的 SDK 或转换工具才能读取。
RAW 里存的是什么呢?简单说就是连续扫描得到的离子信号:时间、电压、电流。这部分数据量大得惊人,一个 1 小时梯度能生成 10GB 以上。所以实际分析时没人直接操作 RAW,都是先做峰值检测,提取出峰值列表。
峰值列表:从连续信号到离散峰
峰值列表(peak list)是把 RAW 中每个时间点上的质谱信号压缩成一个个峰。常用的格式有 .mgf、.mzXML、.mzML。每个峰记录三个核心信息:质荷比(m/z)、强度(intensity)、保留时间(retention time)。如果你的仪器是 timsTOF,还会多一个 离子迁移率(ion mobility, 1/K₀)。
| 格式 | 特点 | 典型应用 |
|---|---|---|
| .mgf | 纯文本,每张谱图分段,易读但无保留时间列 | 蛋白质鉴定(MASCOT、Comet) |
| .mzXML | XML 结构,支持保留时间、谱图索引 | 跨平台交换、可视化(如 TOPPView) |
| .mzML | HUPO-PSI 标准,兼容性好 | 质谱数据处理流水线(OpenMS、ProteoWizard) |
msconvert input.raw --mzML --filter "peakPicking true 1-" --filter "msLevel 1-2"
峰值列表已经能做一些定量分析了,但批次校正需要把不同文件里的同一个离子对齐,这时候就得用特征矩阵。
特征矩阵:把离散峰组织成表格
特征(feature)指的是在保留时间、m/z、迁移率三个维度上重复出现的离子峰。特征矩阵就是把所有鉴定到的特征整理成一张大表:每一行是一个特征,每一列是一个样本,单元格里是该特征在对应样本中的强度。
典型的特征矩阵包含以下列:
- feature_id:唯一标识符,比如
FT_00001 - mz:平均质荷比
- rt:保留时间(分钟或秒)
- ion_mobility:离子迁移率(仅 timsTOF 数据有)
- Sample_01 到 Sample_N:每个样本的强度
有了特征矩阵才能做批次归一化、缺失值填补、差异分析。跨平台合并批次校正就是在多个特征矩阵之间做对齐和校正。
下面这张图帮你理清从 RAW 到特征矩阵的完整流程:
常见格式解析:mzML 与 mzXML 的异同
你可能会问:既然 mzML 是标准,那是不是全用 mzML 就行了?实际上 mzXML 在早期蛋白质组学社区里用得很广,很多旧工具只支持 mzXML。两者的主要区别:
- mzML:基于 XML,能存谱图、色谱图、源内信息、仪器配置,结构更完整。ProteoWizard 和 OpenMS 都优先支持。
- mzXML:比 mzML 更紧凑,读写速度稍快,但扩展性差。如果你只用峰值列表做定量,mzXML 也够用。
我建议做跨平台合并项目时,统一转成 mzML,因为它在迁移率维度上的支持更好。尤其是 timsTOF 的四维数据(m/z、RT、IMS、intensity),mzML 的 <cvParam> 节点可以完整保留。
--zlib 压缩,能把文件体积缩小 30%-50%。虽然读取时会解压,但现代磁盘 IO 足够快,不差这点开销。
msconvert input.raw --mzML --zlib --filter "peakPicking true 1-"
特征矩阵生成时的常见陷阱
我在实战中踩过几个坑,列出来你参考:
- 保留时间漂移: 不同批次色谱柱老化导致保留时间偏移,直接合并特征矩阵会把同一个特征当作两个不同特征。必须先做 RT 对齐。
- 灵敏度差异: Orbitrap 和 timsTOF 的离子传输效率不同,同一个肽段在两个平台上的信号强度可能差 10 倍。批次校正时必须考虑全局强度缩放。
- 缺失值处理: 跨平台的特征矩阵里缺失值比例可能高达 40%-60%。如果直接用 0 填充,统计分析会严重偏差。我习惯用 KNN 或随机森林插补,但前提是特征对齐准确。