带有树状图的 scanpy 相关矩阵

scanpy correlation matrix with dendrogram

我尝试使用我自己的 RNAseq 数据集重新创建 scanpy 教程中描述的相关矩阵。

scanpy 中的相关函数是:sc.pl.correlation_matrix 绘图如下所示:

这里的主要问题是:不同细胞类型之间的皮尔逊相关性是如何计算的,而每种细胞类型的矩阵大小不同?

例如:我有 1000 个基因作为列,500 个 CD34+ 细胞作为行,只有 200 个 CD19+ B 细胞。那么如何计算两种细胞类型之间的相关性呢?

此外,计算两个矩阵之间的相关性会产生另一个矩阵(而不是单个标量,如上图中所示)。例如,numpy 的 corrcoef() 函数应用于两个相同大小的矩阵会产生另一个矩阵,而不是标量...

我尝试对每种细胞类型的细胞基因表达进行平均,因此计算包含相同大小的向量,但它仍然与 scanpy 的结果不匹配。

我遇到了这个对话:https://github.com/theislab/scanpy/pull/425提到在计算层次聚类时,创建了上面的这个相关矩阵(但没有提供代码)。

如果有任何建议、解释和一些可能的 python/代码实现,我将很高兴。

我通过反复试验设法解决了这个问题。

事实上,不可能从两个 unequal-sized 矩阵之间的相关性中获得单个标量。

事实上,这个函数中的相关性根本不是针对基因进行的!它是根据一个50-components-PCA的数据集的结果计算出来的!

进行 PCA 后,您必须对每种细胞类型的每个分量的值进行平均(因为每种细胞类型包含不同数量的细胞)。因此,对于每种细胞类型,您将获得一个向量 (1*50)。

您最终将拥有一个数据框,其中每一列都是不同的细胞类型,每一行是每种细胞类型的 PCA 的平均成分。

皮尔逊相关性的计算可以简单地使用pandas的corr()函数在最终平均PCA数据帧上实现。

图的排列,包括树状图,可以用seaborn的clustermap()函数实现。

就是这样:)