单细胞数据标准化SCTransform

当比较不同细胞的基因表达时,特定基因的read数被用作表达的代理指标。然而,这一指标会受到技术差异的影响,比如样本之间的测序深度差异,或者部分样本中未被检测到的表达基因。因此,要充分比较细胞间的基因表达水平,首先需要将它们归一化为相对的基因表达水平。最流行的归一化方法是Log归一化,然而,最近开发的SCTransform方法显示出能够更好的提高下游分析的表现。

单细胞RNA-seq数据的生物学异质性经常受到包括测序深度在内的技术因素的干扰。即使是在相同的细胞类型中,每个细胞中检测到的分子数量在不同的细胞之间可能有显著差异。scRNA-seq数据的解释需要有效的预处理和标准化,以消除这种技术的可变性。这里我们介绍了一个能从scRNA-seq实验中标准化和稳定统计分子数的模型框架,这个过程省去了包括伪计数加法或对数转换在内的启发式步骤的需要,并改进了常见的下游分析任务,如可变基因选择、降维和差异表达。

SCTransform 使用正则化负二项回归算法计算了一个技术噪音的模型,这个模型的输出是标准化后的值,可以是正值,也可以是负值。正值表示观察到了更多的UMI,比预期的该基因在群体和细胞测序深度中的平均表达要多,而负值则相反。

library(Seurat) 
library(ggplot2) 
library(sctransform)

导入数据,创建Seurat对象:

pbmc_data <- Read10X(data.dir = "../data/pbmc3k/filtered_gene_bc_matrices/hg19/") 
pbmc <- CreateSeuratObject(counts = pbmc_data)

标准化:

以前的Seurat入门教程中都是NormalizeData(),ScaleData(),FindVariableFeatures(),但是现在要使用SCTransform()来代替。

使用SCTransform()转化后的数据是SCT assay形式。

在标准化过程中,我们还可以去除混杂的变异源,例如线粒体百分比

# store mitochondrial percentage in object meta data 
pbmc <- PercentageFeatureSet(pbmc, pattern = "^MT-", col.name = "percent.mt") 

# run sctransform 
pbmc <- SCTransform(pbmc, vars.to.regress = "percent.mt", verbose = FALSE)

新版的SCTransform还支持glmGamPoi来加速处理过程。可以通过method="glmGamPoi"指定。

if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") 

BiocManager::install("glmGamPoi") 
pbmc <- SCTransform(pbmc, method = "glmGamPoi", vars.to.regress = "percent.mt", verbose = FALSE)

降维和可视化都使用常规Seurat流程:

# These are now standard steps in the Seurat workflow for visualization and clustering 
pbmc <- RunPCA(pbmc, verbose = FALSE) 
pbmc <- RunUMAP(pbmc, dims = 1:30, verbose = FALSE) 
pbmc <- FindNeighbors(pbmc, dims = 1:30, verbose = FALSE) 
pbmc <- FindClusters(pbmc, verbose = FALSE) 
DimPlot(pbmc, label = TRUE) + NoLegend()

还可以使用一行代码:

pbmc <- CreateSeuratObject(pbmc_data) %>% 
    PercentageFeatureSet(pattern = "^MT-", col.name = "percent.mt") %>%
    SCTransform(vars.to.regress = "percent.mt") %>% 
    RunPCA() %>% FindNeighbors(dims = 1:30) %>% 
    RunUMAP(dims = 1:30) %>% 
    FindClusters()

标准化数据的获取:

  • SCTransform()结果存储在 “SCT” assay中。就可以使用pbmc[["SCT"]]@scale.data获取数据。 但是这个矩阵不是稀疏矩阵,因此如果要存所有基因的信息就会占很大内存。为了节省内存,可以设置return.only.var.genes = TRUE来返回variable基因的值。这也是默认设置。
  • 为了协助可视化和解释。我们还将皮尔逊值转换回“corrected”的UMI counts。可以将这些解释为我们希望观察到的UMI counts,如果所有细胞被测序到相同的深度。
  • The ‘corrected’ UMI counts are stored in pbmc[["SCT"]]@counts。它是一个log-normalized的值,可以很方便的可视化。
  • 可以使用corrected log-normalized counts做差异表达和数据整合。但原则上最好是直接对scale.data slot进行计算。

关于注释结果的差异:

sctransform 标准化后的结果与标准Seurat 流程的结果有以下几个差异:

  • 分群分的更开了,基于CD8A,GZMK,CCL5这些marker显示分出了至少3个CD8T 细胞的群(naive,memory, e)
  • 基于S100A4、CCR7、IL32和ISG15,明确分离三种CD4 T细胞群体(naive, memory, ifn activated)
  • 基于TCL1A, FCER2的B细胞簇的额外发育亚结构
  • 基于XCL1和FCGR3A, NK细胞进一步分离为CD56dim vs bright cluster.
# These are now standard steps in the Seurat workflow for visualization and clustering # Visualize canonical marker genes as violin plots. 
VlnPlot(pbmc, features = c("CD8A", "GZMK", "CCL5", "S100A4", "ANXA1", "CCR7", "ISG15", "CD3D"), pt.size = 0.2, ncol = 4)
image
# Visualize canonical marker genes on the sctransform embedding. 
FeaturePlot(pbmc, features = c("CD8A", "GZMK", "CCL5", "S100A4", "ANXA1", "CCR7"), pt.size = 0.2, ncol = 3)
image
FeaturePlot(pbmc, features = c("CD3D", "ISG15", "TCL1A", "FCER2", "XCL1", "FCGR3A"), pt.size = 0.2, ncol = 3)
image

参考:

https://genomebiology.biomedcentral.com/articles/10.1186/s13059-019-1874-1
https://satijalab.org/seurat/articles/sctransform_vignette.html

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

推荐阅读更多精彩内容