周末的时光短暂,今天分享处理蛋白质数据中RT校正的软件包Calib-RT,数据非依赖采集 (DIA) 质谱 (MS) 方法在蛋白质组学领域越来越受欢迎。但在 DIA 中,肽离子与其光谱之间的对应关系丢失,使得鉴定变得具有挑战性。减少假阳性鉴定的一种有效方法是计算肽的估计保留时间 (RT) 和测量 RT 之间的偏差。在此过程中,将光谱库 RT 缩放到估计RT,即所谓的 RT 校准,是计算偏差的先决条件。
文章地址:https://academic.oup.com/bioinformatics/article/40/7/btae417/7705521?searchresult=1
代码地址:https://github.com/chenghui03/Calib_RT?tab=readme-ov-file
RT校正:
该算法应满足单调递增约束的要求,同时能够消除拟合数据中的噪声,因为迭代和非迭代识别过程都不可避免地会在校准数据中涉及噪声。基于迭代的识别方法(例如 Spectronaut 和 DIA-NN)在目标肽子集上检测肽,并使用 1% 错误发现率 (FDR) 的肽更新 RT 校准。然而,由于抽样偏差,目标肽子集的 FDR 估计可能会被低估,导致实际噪音超过 1% FDR。对于非基于迭代的识别方法(例如 EncyclopeDIA 和 MSFragger-DIA),它们不估计 FDR,而是根据自定义条件选择肽或直接利用光谱库中的所有肽作为校准输入,这很可能导致校准噪音超过 1% FDR。Rosenbergeret al.提到,谱图库中假目标肽的比例可能达到 0.75,表明噪声水平约为 75% FDR 水平。因此,一个独立的通用校准算法必须具备在遵守单调递增约束的情况下去除噪声和拟合的能力,即使在高达 75% FDR 的噪声水平下也是如此。
Calib-RT:
Calib-RT 的目的是将肽的光谱库 RT/iRT 与其相应的测量 RT 进行拟合,从而将任何光谱库 RT/iRT 转换为估计的 RT。一方面,校准中使用的肽可能含有假阳性。另一方面,光谱库 RT/iRT 与测量 RT 之间的关系呈现单调递增模式。因此,RT 校准问题从根本上讲属于一维非线性拟合挑战,存在噪声干扰并施加单调约束。
Calib-RT原理图如下:
-
数据点的网格化和频率计数。为了方便描述,我们将肽的光谱库 RT/iRT 和测量 RT 称为库测量 RT 平面上的数据点。Calib-RT 将数据点网格化(默认 100×100),并计算落入每个网格单元的数据点数。然后,Calib-RT 保留每行或每列中具有最大值的单元。网格化和非最大值抑制有效地减少了数据量。
-
寻找最优上升路径。Calib-RT 创建一个带权重的有向无环图,节点为第一步得到的所有 cell。图的边必须满足递增条件(即终端节点在两个 RT 维度上都不能小于起始节点)。边的权重为节点频率乘以边长。Calib-RT 在有向无环图中寻找权重和最大的路径对应的节点,以便进行后续的拟合。通过这一步,Calib-RT 在满足单调性约束的同时,进一步滤除噪声。
-
检测异常值并进行拟合。由于真实点密集分布在中心,而稀疏分布在两端,因此上一步找到的点可能会在两端显示出较大的跨度。这些大跨度的点更有可能是异常值。通过设置允许的跨度(通常为两个维度整个范围的 10%),可以过滤潜在的异常值。最后,Calib-RT 使用 LOESS 根据过滤后的点完成校准,并在校准曲线的两端进行线性外推。值得注意的是,默认情况下禁用异常值检测(或跨度过滤)。
代码实现:
非线性曲线拟合使用的是python包,结果图绘制使用的是R包。
#####python环境及相关分析包安装
Python (>= 3.10)
numpy (>= 1.26.0)
pandas (>= 2.1.1)
networkx (>= 3.1)
statsmodels (>= 0.14.0)
scipy (>= 1.11.3)
#####pycalib_rt包安装
pip install pycalib_rt
#####数据分析
import calib_rt
# basic information of all built-in datasets
calib_rt.RTdatasets.get_datasets_list()
sample_type datasets_num
0 distort_left 2
1 distort_right 2
2 exp 2
3 linear 2
4 S 2
# use first of "S" type datasets
datasets = calib_rt.RTdatasets.get_pandas(sample_type="S",index_in_group=1)
x = datasets["Spectral library RT"]
y = datasets["Measured RT"]
# fit and predict
model = calib_rt.Calib_RT()
model.fit(x,y)
y_pred = model.predict(x)
分析结果展示:
为了全面评估Calib-RT在不同数据规模和不同噪声干扰水平下的定标性能,我们对每个测试数据集以不同的速率(即采样率SR,包括0.01、0.1、0.3和0.5)进行采样。由于RT定标需要在最终识别之前进行,因此采样率不包括1。然后将采样数据与随机分布的噪声数据相结合,其中噪声数据的范围不超过采样数据的范围,从而得到1%、5%、35%和75%FDR的噪声水平(x%FDR的噪声水平表示总数据点数中x%的数据点是噪声)。最终通过采样和引入噪声将每个原始数据集扩充为16个数据集。
当噪声水平达到 75% FDR 时,Raw-LOESS、RANSAC-LOESS 和 Quantile-LOESS 都无法校准。相比之下,Calib-RT 能够在所有数据集上在 1% 到 75% 的噪声水平下以最小的偏差拟合。此外,Calib-RT 的执行速度几乎不受数据大小的影响(对于所有测试数据集,在普通笔记本电脑上,其运行时间 <0.1 秒),而相比之下,RANSAC-LOESS 需要更长的时间,在 SI(SR: 0.5,FDR: 0.75)数据集上的运行时间长达 128.90 秒。
从这几个方面可以看出,新提出的RT校正方法在噪声比较大的数据情况下有一定的优势。
欢迎大家留言讨论,如对结果有疑问或者方法实现有疑问的可以联系管理员进行解决:kriswcyYQ。