SC3 : 单细胞转录组聚类分析R包

Kiselev VY, Kirschner K, Schaub MT, Andrews T, Yiu A, Chandra T, Natarajan KN, Reik W, Barahona M, Green AR, Hemberg M (2017). “SC3 - consensus clustering of single-cell RNA-Seq data.” Nature Methods.

一开始我觉得这么火的单细胞数据分析,一定很高大上吧!当我知道单细胞一个主要的功能是揭示细胞异质性,而这个异质性是有聚类算法来实现的。一听聚类,我乐了。关于聚类我能说出一本书啊:

所谓聚类, 就是将一个数据单位的集合分割成几个称为簇或类别的子集 , 每个类中的数据都有相似性,它的划分依据就是“物以类聚”。数据聚类分析是根据事物本身的特性, 研究对被聚类的对象进行类别划分的方法 。聚类分析依据的原则是使同一聚簇中的对象具有尽可能大的相似性, 而不同聚簇中的对象具有尽可能大的相异性, 聚类分析主要解决的问题就是如何在没有先验知识的前提下, 实现满足这种要求的聚簇的聚合。聚类分析称为无监督学习 (Unsuper-vised Study),主要体现在聚类学习的数据对象没有类别标记,需要由聚类学习算法自动计算 。

在我做过的上百场的培训中,每每讲到聚类,我都会提到一句话:说到聚类,有一个概念一定要像思想钢印一样刻在脑子里:距离。不管哪种算法,都需要一个统计量来判断对象之间的远近(或相似性)关系,这个就是距离。同样的对象,不同的距离来度量亲疏不同,就像现在我站你面前,距离很近,但是血缘关系来讲呢,就没有那么近了。

今天我们来认识一种聚类算法(其实是一种组合的聚类算法, Nature Methods,2017)单细胞RNA-seq能够基于转录组特征对细胞类型进行定量表征。我们提出了单细胞一致性聚类(single cell consensus clustering, SC3),这是一种用户友好的无监督聚类工具,它通过一致方法将多个聚类解决方案组合在一起,从而得到高精度和鲁棒性的分群结果(http://bioconductor.org/packages/SC3)。这中聚类算法允许用户自定义聚类的个数,这个自由不是任何人都消受得起的:一些人根本不知道聚多少类是合适自己的。

我是SC3聚类的一般流程

(a)使用SC3框架进行聚类的概述(参见方法)。用Treutlein数据举例说明了一致步骤。
(b)用于设置SC3参数的已发布数据集。N是数据集中的细胞数;k为作者最初确定的簇数;单位:RPKM是每千碱基每百万次读的转录本,RPM是每百万次读的转录本,FPKM是每千碱基每百万次读的转录本片段,TPM是每百万次读的转录本片段。
(c) ARI>处d值的直方图。金标准数据集达到95。黑色竖线表示细胞总数N的d = 4-7%,分类准确率高。
(d) (b)中所示数据集的SC3聚类的100个实现。条对应点的中位数。红色和灰色分别对应有一致步长和无一致步长时的聚类。这条黑线对应的ARI=0。8。黑色虚线分隔了金和银标准数据集。

文献用到的数据集包含了420个细胞中20000余个基因的表达信息,直接进行聚类资源消耗较大且由于数据噪声过大会导致效果不佳。其实,先降维(特征选择)再聚类已经是通识了。SC3算法的第一步也是要进行基因过滤,文中将表达率低于6%和高于94%的基因都从数据集中去除,将数据集的规模减少了50%。不同的是,SC3第二步会计算细胞与细胞之间的“距离”,为了算法的普适性,这里一共计算了三种距离,分别是欧氏距离,皮尔森相关系数与斯皮尔曼相关系数,最终得到了三个420维的距离矩阵。基于距离矩阵来做pca降维,而后再用k-means聚类。所以SC3与其说优化了聚类算法,不如说是调整了降维的算法。

实现起来是很简单的,因为已经有成熟的R包了:SC3。下载安装就可以用来解锁细胞异质性啦!

卑微小王就不再一步一步跑官网的教程了,SC3也是基于SingleCellExperiment对象,如果是10X的数据可以直接用Seurat过滤QC一下,转化为SingleCellExperiment即可分析。

library(Seurat)
library(SingleCellExperiment)
library(SC3,lib.loc = "D:/R-3.5.1/library")
library(scater,lib.loc = "D:/R-3.5.1/library")
pbmc <- readRDS(file = "D:\\Users\\Administrator\\Desktop\\Novo周运来\\SingleCell\\scrna_tools/pbmc3k_final.rds")

sce <- SingleCellExperiment(
  assays = list(
    counts = as.matrix(pbmc@assays$RNA@counts),
    logcounts = as.matrix(pbmc@assays$RNA@data)
  ), 
  colData = pbmc@meta.data
)

当然,也可以用seurat直接转:

sce <- as.SingleCellExperiment(pbmc)
library(future)
# check the current active plan
plan()
# change the current plan to access parallelization
plan("multiprocess", workers = 4)
plan()
sce <- sc3(sce, ks = 2:10, biology = TRUE) # too time
sc3_plot_expression(
    sce, k = 3, 
    show_pdata = c(
        "cell_type1", 
        "log10_total_features",
        "sc3_3_clusters", 
        "sc3_3_log2_outlier_score"
    )
)
我只是官网示例


SC3聚类算法实现初探
vignettes||SC3
SC3: consensus clustering of single-cell RNA-seq data

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 章节主要内容 “聚类”(clustering)算法是“无监督学习”算法中研究最多、应用最广的算法,它试图将数...
    闪电随笔阅读 5,378评论 1赞 24
  • 前言 这篇笔记是StatQuest系列教程的第47,48,49节。第47节与第48节有很在一部分内容是重复的,主要...
    backup备份阅读 2,568评论 1赞 11
  • 本篇结构 简介 聚类算法的分类 K-Means聚类算法 DBSCAN聚类算法 本篇介绍了聚类算法的种类,重点关注K...
    w1992wishes阅读 7,758评论 0赞 14
  • 无形的力量:真正的兴趣爱好,去一路跟随它(也就是天命所在,说的通俗一点就是,我知道了我是谁,我应该做什么) 所谓的...
    边柳_d637阅读 1,005评论 0赞 4
  • 一提到心里,或者说心理医生,我们就会想到很多,和他本来不一样的。 今天我有幸走进心理学,揭开她美丽的面纱进一步了解...
    lygly9阅读 257评论 0赞 0

友情链接更多精彩内容