单细胞数据整合分析——批次效应(batch effect)去除

在单细胞分析当中,经常会遇到整合分析的问题,即去除多样本数据之间的批次效应(batch effect),那么什么是批次效应呢?简而言之,批次效应就是由于不同时间、不同实验人员、不同仪器等因素造成的实验性误差,而非本身的生物学差异。如果我们不去除批次效应,那么这些差异就会和本身的生物学差异相混淆。但是随着测序成本的降低,单细胞测序已经“深入寻常百姓家”,所以在追求大数据量的同时,肯定会伴随着batch effect的产生,自然batch effect的去除就成为单细胞数据分析的重要技能。2020年发表在Genome Biology上的一篇文章系统性总结了目前的batch effect去除方法。

今天给大家分享几种目前使用比较广泛的单细胞数据整合分析的方法。本次演示所使用的示例数据如有需要,可在留言区留言获取。

merge()

首先是直接使用merge()函数对两个单细胞数据进行直接整合,这时我们需要准备的输入文件为一个由需要去除batch effect的Seurat对象组成的列表,那么如何实现呢?

library(Seurat)
library(ggplot2)
library(data.table)
setwd('GSE129139-mouse-T_cells')
samples=list.files('GSE129139_RAW/')

注意,我们这里的数据是怎么存放的,我们在GSE129139_RAW/这个文件夹下面存放着我们需要去除batch effect的样品数据,一个样品,一个文件夹,每个文件夹里面是什么就不用说了吧!

sceList = lapply(samples, function(pro){ 
  folder=file.path('GSE129139_RAW', pro) #file.path(a,b) means the path: a/b
  sce=CreateSeuratObject(counts = Read10X(folder), 
                         project = pro)
  return(sce)
})

上面的code实际上做了这样的一件事:按顺序读取了存放着三个Read10X()输入文件的文件夹,并依次创建了Seurat对象,存放在一个名为sceList的列表中。
然后我们利用merge()函数进行数据的整合:

sce.all = merge(sceList[[1]], y = sceList[[2]], 
                add.cell.ids = samples)

需要注意的是:(1)我们想把sample信息添加到cell barcode上,只需要添加add.cell.ids参数即可,这个参数赋给它一个向量;(2)上述的merge()默认只会简单整合源数据(raw data),如果你的Seurat对象是已经经过NormalizeData()的,可以直接添加merge.data = TRUE,来merge标准化后的数据。

By default, merge() will combine the Seurat objects based on the raw count matrices, erasing any previously normalized and scaled data matrices. If you want to merge the normalized data matrices as well as the raw count matrices, simply pass merge.data = TRUE. This should be done if the same normalization approach was applied to all objects.

Seurat锚点整合

这是Seurat为了适应大需求添加的新功能,锚点整合是从Seurat3开始上线的,其原理在这里不赘述,放出原始论文链接Stuart, Butler, et al., Cell 2019 [Seurat V3]
同样是需要由几个Seurat对象组成的列表作为输入,不同的是,我们需要提前对数据进行NormalizeData()和FindVariableFeatures()处理

sceList <- lapply(sceList, FUN = function(x) {
    x <- NormalizeData(x)
    x <- FindVariableFeatures(x, selection.method = "vst", nfeatures = 2000)
})
# select features that are repeatedly variable across datasets for integration
features <- SelectIntegrationFeatures(object.list = sceList)
sce <- FindIntegrationAnchors(object.list = sceList, anchor.features = features)
# this command creates an 'integrated' data assay
sce <- IntegrateData(anchorset = sce)

需要注意的是,从这里开始,后面的数据分析请指定assay为integrated,否则你还在用原始的RNA assay进行分析,等于没整合。你可以通过以下命令更改默认assay,这样就不用每次都进行声明!

DefaultAssay(immune.combined) <- "integrated"

harmony

harmony单细胞数据整合方法于2019年发表在Nature Methods上,题为Fast, sensitive and accurate integration of single-cell data with Harmony。harmony整合方法算得上是一种比较好的方法,目前应用也是比较多的,原理见文章,这里继续展示具体流程:

#use the sce.all seurat object from the first part
sce.all <- NormalizeData(sce.all, normalization.method = "LogNormalize", scale.factor = 1e4) 
sce.all <- FindVariableFeatures(sce.all)
sce.all <- ScaleData(sce.all)
sce.all <- RunPCA(sce.all, features = VariableFeatures(object = sce.all))

library(harmony)
sce.all <- RunHarmony(sce.all, group.by.vars = "orig.ident") 
#group.by.vars表示按照什么来进行整合,亦即去掉什么方面的差异
#harmony还有参数lambda,这个参数越小,整合力度越大,一般按默认
#……

需要注意的是,如果你用harmony整合,后续的下游分析,请指定 reduction = 'harmony' ,否则你的整合没有意义。

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

推荐阅读更多精彩内容