ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
108 stars 30 forks source link

单细胞数据分析逻辑——WNN算法 #5141

Closed ixxmu closed 3 months ago

ixxmu commented 3 months ago

https://mp.weixin.qq.com/s/LLL7rXLlnZmBplWFLk-5VA

ixxmu commented 3 months ago

单细胞数据分析逻辑——WNN算法 by 生信小知识

单细胞数据分析逻辑——WNN算法

微信公众号:生信小知识
关注可了解更多的生物信息学教程及知识。问题或建议,请公众号留言;

目录

前言1-6. 前期处理7. 相同层面和跨层数据预测8. 针对每个细胞计算2个组学各自权重9. 计算加权后的WNN网络10. 后续分析后记

前言

跨个领域,也许你想要的答案就在眼前。

最近遇到一个问题,类似于单细胞中,如果我同时有单颗细胞的表面蛋白质组数据、RNA-seq的数据,为了更加精准的定义细胞类型,我可能需要联合2个组学的数据进行定义。

例如:对于CD4和CD8而言,单独从转录组定义,他们可能看起来非常相似:

但是如果我们使用细胞表面蛋白的数据,根据CD4和CD8这一个蛋白信息,我们就可以轻松分开这2群细胞了:

想法非常不错,算法如何实现呢?

翻译一下问题:如果我有一个样本的多个层面的数据,我该如何整合这些数据?

而这个问题的核心在于:不同层面数据在整合时,他们的权重如何计算

在2021的Cell上,单细胞专业户 Rahul Satija 提出了WNN算法:

  • https://www.cell.com/cell/fulltext/S0092-8674(21)00583-3

这里我将具体算法细节做一个简单概要:

  1. Normalizing the data:log转化,让数据压缩在一个区间,同时改变数据分布,让数据趋近于正态分布,方便后续的进一步分析

  2. Identification of highly variable features:在细胞与细胞间进行比较,选择表达量差别最大的基因,这些基因在数学上应该包含最多的信息

  3. Scaling the data:对细胞进行zscale处理,去除量纲

  4. Perform linear dimensional reduction:由于单细胞维数多,这里先进行PCA线性降维

  5. Determine the ‘dimensionality’ of the dataset:通过碎石图/肘图确认PCA的最佳PC数目,确保在保留足够信息的前提下,尽量降低数据维度

  6. Constructing k-nearest neighbor graphs for each modality:在PCA高维空间内构建KNN空间关系图,找到每个细胞中最临近的k个细胞关系,为后续分析做铺垫

  7. Performing within and cross-modality predictions:

  • within-modality predictions:对于细胞中每个RNA而言,根据RNA数据中K个最临近细胞中的RNA值取均值得到预测的RNA值;对于细胞中每个蛋白而言,根据蛋白数据中K个最临近细胞中的蛋白值取均值得到预测的蛋白值。

  • cross-modality predictions:对于细胞中每个RNA而言,根据蛋白数据中K个最临近细胞中的RNA值取均值得到预测的RNA值;对于细胞中每个蛋白而言,根据RNA数据中K个最临近细胞中的蛋白值取均值得到预测的蛋白值。

  1. Calculating cell-specific modality weights:根据预测值和实际观测值,利用UMAP算法中的指数核函数计算亲和度,并使用softmax转换得到针对蛋白和RNA的权重值。

  2. Calculating a WNN graph:根据权重值,重建考虑权重后的KNN图,即WNN图

1-6. 前期处理

由于步骤1-6都是单细胞处理的标准步骤,这里不做过多解释。

单细胞数据由于数据维度非常高,所以导致数据中含有大量的噪声和冗余信息。先利用PCA通过线性变换将数据投影到低维空间中,这样可以在保留数据中最大变异的同时,减少噪声和冗余,增强信号。

而如果我们用的不是单细胞数据,或者我们的数据噪音没有那么强,我们也可以直接使用原始数据进行后续分析。

7. 相同层面和跨层数据预测

这里本质上其实是在评估单独使用蛋白或者RNA数据的前提下,找到分群的合理性。

具体来说,这里主要是根据在PCA空间内计算得到的KNN关系。

相同层面的评估中,意图在评估单独使用RNA或者单独使用蛋白数据时的聚类效果:

  • 对于细胞x而言,在RNA数据中细胞x K个最临近细胞中的RNA值取均值得到预测细胞x的RNA值

  • 对于细胞x而言,在蛋白数据中细胞x K个最临近细胞中的蛋白值取均值得到预测细胞x的蛋白值

跨层面的评估中,意图在评估使用RNA聚类的效果在蛋白水平上的验证或者使用蛋白聚类的效果在RNA水平上的验证:

  • 对于细胞x而言,在RNA数据中细胞x K个最临近细胞中的蛋白值取均值得到预测细胞x的蛋白值

  • 对于细胞x而言,在蛋白数据中细胞x K个最临近细胞中的RNA值取均值得到预测细胞x的RNA值

预测值

8. 针对每个细胞计算2个组学各自权重

这部分是WNN算法的核心

本质上是利用UMAP算法中的指数核函数,将上步计算得到的预测值和实际值之间的欧式距离转为bandwidth 亲和力(affinity):

  • 分子:欧式距离

  • 分母:bandwidth,可以理解为细胞i与最临近20个细胞中最远的距离,即细胞i与第20个最临近细胞之间的距离

但是有论文(Umap: Uniform manifold approximation and projection for dimension reduction)证明:一个细胞和它最临近细胞之间的距离,会使得计算过程中分子和分母出现膨胀问题,所以我们需要在计算过程中对分子和分母都减去一个细胞和它最临近细胞之间的距离:

使用的bandwidth目的是能够将类似的细胞放在一组,不同的细胞分开2组。但是如果2个细胞的状态不同,但是在空间上却相距很近,这会导致使用传统bandwidth计算方式出错

为了解决上述问题,作者受到LMNN(large margin nearest neighbors)概念的启发,将设计理念变成:识别将同一类中的数据点与不同类中的数据点分开的内核带宽,即使这些被分开的数据点密切相关

于是作者针对每个细胞x而言, 作者识别数据集中所有与该细胞Jaccard系数不为0且Jaccard系数最低的20个细胞,这意味着这20个细胞与细胞x有一点相关,但是不太可能处于相同的状态

在计算上,如果有超过20个细胞具有相同的Jaccard值,那么则按照欧式距离进行排序,找到距离最远的20个细胞

找到这20个细胞后,我们将这20个细胞的欧式距离取均值作为细胞x的bandwidth值。

具体而言:

接下来就可以计算基于RNA的预测与基于蛋白质的预测之间的亲和力之比(为了避免除以0,在分母加上ε=10e−4):

  • Srna:数值越大,表明在预测RNA时,由RNA预测的20个邻居会比用蛋白预测的20个邻居更好地反映细胞状态

  • Sprotein:数值越大,表明在预测蛋白时,表明由蛋白预测的20个邻居会比用RNA预测的20个邻居更好地反映细胞状态

而后通过softmax转换得到针对蛋白和RNA的权重值:

9. 计算加权后的WNN网络

有了上述的2个权重值,我们便可以联合RNA和蛋白2个层面的数据,计算得到一个加权后的亲和值

利用加权后的亲和网络,我们就可以再次建立一个KNN网络。其中K通过下述方式自动识别:

10. 后续分析

后续无论是根据Louvain算法进行分群,还是UMAP降维,其本质都是基于建立好的KNN网络。

而我们计算得到的WNN网络,本质上也是一个KNN网络,所以后续我们便可以使用Louvain算法进行分群,使用UMAP算法进行降维可视化。

后记

这个算法虽然已经在单细胞层面上被证实了可靠性,目前尚不知其应用在bulk数据中的效果。如果有类似需求,可以在理解其思想的前提下对其进行算法改写~

如有错误欢迎指出,如有需求再做深入探讨~