scCancer包:自动分析肿瘤单细胞转录组利器

scCancer包是2020年 清华大学Jin Gu团队开发的一个专门用于分析肿瘤单细胞转录组的工具包。它集成了单细胞数据分析的基本流程(Seurat),增添若干适合肿瘤数据特征的进阶分析;并且操作简单,两行代码,即可跑完全部分析流程;同时分析结果html格式简洁明了、可读性高,并且提供最后保存的Seurat对象给使用者执行个性化的分析。
checkPkg <- function(pkg){
    return(requireNamespace(pkg, quietly = TRUE))
}
if(!checkPkg("BiocManager")) install.packages("BiocManager")
if(!checkPkg("devtools")) install.packages("devtools")

library(devtools)
if(!checkPkg("harmony")) install_github("immunogenomics/harmony")

if(!checkPkg("RcppArmadillo")) install.packages("RcppArmadillo")
if(!checkPkg("RcppProgress")) install.packages("RcppProgress")
if(!checkPkg("NNLM")) install_github("linxihui/NNLM")

if(!checkPkg("liger")) install_github("MacoskoLab/liger")

install_github("wguo-research/scCancer")

1、分析流程(只需要两步)

(1)准备数据[单样本]

  • 示例数据:http://lifeome.net/software/sccancer/KC-example.tar.gz
  • 经cellranger处理得到的10X单细胞表达数据。sampleFolder即为代表单个样本。raw_feature_bc_matrixfiltered_feature_bc_matrix分别代表处过滤empty
    droplet前后的单细胞表达数据。
list.files("./data",recursive = T)
#[1] "sample1/filtered_feature_bc_matrix/barcodes.tsv.gz"
#[2] "sample1/filtered_feature_bc_matrix/features.tsv.gz"
#[3] "sample1/filtered_feature_bc_matrix/matrix.mtx.gz"  
#[4] "sample1/raw_feature_bc_matrix/barcodes.tsv.gz"     
#[5] "sample1/raw_feature_bc_matrix/features.tsv.gz"     
#[6] "sample1/raw_feature_bc_matrix/matrix.mtx.gz"

list.files("./results",recursive = T,include.dirs = T)
#[1] "sample1"

(2)实战分析[只需两步]

library(scCancer)
  • 第一步:计算QC过滤指标runScStatistics
dataPath <- "./data/sample1"     # The path of cell ranger processed data
savePath <- "./results/sample1"  # A path to save the results
sampleName <- "sample1"          # The sample name
authorName <- "Xiaobei"           # The author name to mark the report

stat.results <- runScStatistics(
  dataPath = dataPath,
  savePath = savePath,
  sampleName = sampleName,
  authorName = authorName
)
# 大概2-3 min

查看分析报表,即计算、可视化的过滤指标


  • 第二步:全部分析流程runScAnnotation
dataPath <- "./data/sample1"      # The path of cell ranger processed data
statPath <- "./results/sample1"   # The path of the scStatistics results
savePath <- "./results/sample1"   # A path to save the results
sampleName <- "sample1"           # The sample name
authorName <- "Xiaobei"            # The author name to mark the report

anno.results <- runScAnnotation(
  dataPath = dataPath,
  statPath = statPath,
  savePath = savePath,
  authorName = authorName,
  sampleName = sampleName,
  geneSet.method = "average"       # or "GSVA"
)
# 大概25min

查看分析报表,即全部分析结果。根据报表里的解释也能很清楚做了哪些分析,得到哪些结论。下面会有具体解读~

(3)其它输入文件情况

我们处理自己或公共的数据集有时单细胞数据可能并不会提供完全的两套数据,而是


情况1:只有filtered_feature_bc_matrix(~1w cells)

由于raw_feature_bc_matrix只起辅助作用,所以没有太大影响;而且也没有解决办法,如果作者没提供的话。

情况2:只有raw_feature_bc_matrix(~50w cells)

此时我们可以提前加载DropletUtils包,runScStatistics()函数会自动调用该包,过滤raw_feature_bc_matrix里的empty droplet,再进行计算过滤指标操作。

情况3:只有单细胞表达矩阵(一般是过滤empty droplet后的count矩阵)信息

我们可以使用scCancer包提供的generate10Xdata()函数根据表达矩阵生成filtered_feature_bc_matrix文件夹,然后进行上述的分析。

情况4:多个样本的合并

首先对每个样本进行上述的两部分析;
然后使用scCombination()函数进行合并校正,涉及多种校正算法。示例代码如下

  • raw:直接合并,不做校正
  • SeuratMNN:调用Seurat包(V3)的MNN合并算法
  • NormalMNN:考虑到肿瘤恶性细胞异质性,故结合runScAnnotation()注释结果,仅对非肿瘤恶性细胞进行MNN合并校正【默认校正方法】
  • Regression:对假设的系统性的批次效应进行回归校正
  • LIGER: 调用liger包的合并算法
  • Harmony:调用harmony包的合并算法
#因为暂时没有合适示例数据,先假设有sample1,sample2,sample3三个样本

# The paths of all sample's "runScAnnotation" results
single.savePaths <- c("./results/sample1", "./results/sample1", "./results/sample1")
sampleNames <- c("sample1", "sample2", "sample3")    # The labels for all samples
savePath <- "./results/sample123-comb"       # A path to save the results
combName <- "sample123-comb"                 # A label of the combined samples
authorName <- "Xiaobei"                # The author name to mark the report
comb.method <- "NormalMNN"               # Integration methods ("NormalMNN", "SeuratMNN", "Harmony", "Raw", "Regression", "LIGER")

comb.results <- runScCombination(
    single.savePaths = single.savePaths, 
    sampleNames = sampleNames, 
    savePath = savePath, 
    combName = combName,
    authorName = authorName,
    comb.method = comb.method
)  

2、报表结果解读

2.1 runScStatistics报表解读

这一步如上所说主要计算了低质量细胞的过滤指标,产生了cell.QC.thres.txt筛选阈值结果文件。过滤细胞主要以下两个层面,计算思路均基于outliner。

(1)UMI:细胞当前状态捕获的cDNA总数,即细胞文库大小
  • 首先UMI过低的细胞,会被cellranger算法识别为empty droplet过滤掉(raw→empty,不需要我们计算)


  • 其次UMI过高,则可能是混合了多个细胞的测序结果。类似的,表达基因种类数过低则表示捕获cDNA效率低,不能反映细胞的真实状态;过高则表示潜在的多细胞混杂。


    image.png
  • 最后是根据特征基因的含量
    高线粒体/核糖体基因表达比例该细胞在分离、被捕获的过程中出现了溶解、老化等不正常状态,需要去除。



    此外作者考虑到肿瘤细胞在分离过程中,容易产生 stress response。为避免干扰,所以需要去除 dissociation-associated gene异常高表达的细胞


    image.png
  • 综上基于outliner角度,计算了6个过滤细胞的指标;如若按照此阈值的过滤流程,最后会保留8980个细胞。
    Raw : 434012 -> cellranger3 : 10227 -> nUMI<12496 : 9876 -> nGene>=200 : 9828 -> nGene<3268 : 9806 -> mito.percent<0.229 : 9507 -> ribo.percent<0.371 : 9454 -> diss.percent<0.055 : 8980
    我们也可以自定义修改cell.QC.thres.txt阈值文件,设置成认为自己认为更合适的阈值,提供给runScAnnotation过滤。
    image.png

此外报表中还提到了ambient RNA contamination的因素,具体就不多介绍了。在之前的OSCA笔记中也有相关的学习,详见OSCA单细胞数据分析笔记-13、Multi-sample comparison

2.2 runScAnnotation报表解读

(1) QC质控过滤

首先按照cell.QC.thres.txt阈值指标过滤细胞;然后过滤低表达的基因(expressed in too less (nCell < 3)

(2) 创建Seurat对象,按照Seurat标准流程分析

  • 标准化/log转换/归一化、高变基因;


  • 降维(线性/非线性),默认选择的PCA主成分数为Top30;聚类,默认的resolution分辨率为0.8


  • 按照cluster间差异分析[optional],默认展示Top5 差异基因


以上为单细胞分析的最基础部分。下面的分析runScAnnotation()默认均执行,但可以设置对应的bool逻辑值参数选择部分执行

(3) Doublet打分预测

调用了scdsR包的算法,计算每个细胞为Doublet(双细胞的磁珠)的可能性。

(4) 肿瘤微环境细胞类型预测

  • 根据参考数据集,采用OCLR(one-class logistic regression)算法,预测每个细胞分别属于各个细胞类型的可能性,取最高的作为该细胞的类型标签。如果对于给定的细胞类型可能性均很低,则会贴上Unknown的标签。
  • scCancer包根据肿瘤微环境组成,提供的参考数据集包含:endothelial cells, fibroblasts, immune cells (CD4+ T cells, CD8+ T cells, B cells, nature killer cells, and myeloid cells)
  • 我们也可以提供自己的细胞类型参考数据集,供该包自动注释。详见https://github.com/wguo-research/scCancer/wiki/5.-Other-personalized-settings#train-new-cell-type-templates

(5) 恶性肿瘤细胞预测

  • 调用infercnvR包,在肿瘤恶性细胞存在较多 copy number alterations (CNV)变异背景下,计算每个细胞的Malignant score。同时再计算内置的正常细胞的Malignant score,观察分布,确定Malignant score判定阈值。

(6) 恶性肿瘤细胞间异质性评价

如上得到恶性肿瘤细胞的分类之后,可以进一步从以下4个方面探究恶性肿瘤细胞之间的异质性。

A:细胞周期:主要使用Seurat包的AddModuleScore() 函数计算细胞周期相关基因(G2/M and S phase markers)在每个细胞的相对表达程度。
B:细胞干性:主要使用参考数据集(stem/progenitor cells),类似上述细胞注释的方法,使用OCLR算法,计算每个细胞在表达水平上的相关性。
image.png
C:特定(通路)基因集表达活性:scCancer包默认会计算来自MSigDB数据库的 50 hallmark gene sets。算法有GSVA与Seurat的AddModuleScore()[默认]两种。此外我们也可以提供自己感兴趣的基因集。
D: 潜在特征基因表达谱分析:上一种方法是已知基因集具有确定的生物学意义。另一方面,我们可以通过NMF非负矩阵分解的方法:首先根据表达矩阵分为若干个主成分(默认为50,每个主成分代表一种未知的表达模式),然后计算每个细胞对于这些主成分的表达情况。最后可根据感兴趣的cluster表达分布特征,赋予选定的主成分以某个生物学意义。
image.png

(7) 基于cluster的细胞间相互作用分析

主要根据参考ligand–receptor(配体-受体) gene pairs,判断cluster两两之间是否存在配对基因平均高表达的基因之一。

we estimated the global interaction strength between any two cell clusters by
the number of the remaining gene pairs and the sum of their scores.
如下图所展示的: The size of point means the number of ligand-receptor paris with scores larger than 0.1. The color of point means the sum of the ligand-receptor pairs scores. To compare conveniently, the bottom subplot shows the predicted cell type fraction of each cell set.


image.png
  • 以上就是runScAnnotation()报表结果的基本组成。里面有很多参数可以调整,或者加载结果提供的Seurat对象进行感兴趣的个性分析。

最后的最后,关于这个scCancer包,我目前的感受是集成了很多单细胞数据包的分析手段;分析html结果对于我们理解单细胞数据或者说肿瘤单细胞数据集分析流程很会很大帮助。而且其中一些分析也适用于其它单细胞数据集。实际使用时,可以根据预期以及结果,灵活调整细节参数,以得到满意的结果。


所遇到的坑:

  • 细胞名不能是纯数字类型,会报错
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容