单细胞空间转录分析之Seurat-多样本整合(浅谈空间批次)

单细胞空间转录组和单细胞分析类似,不可避免的会遇到多样本的问题,这就需要使用多样本整合分析策略
Seurat提供了多张切片(slices)整合分析(Merge合并)

Seurat

单细胞空间转录分析之Seurat:https://www.jianshu.com/p/c9a601ced91f
单细胞空间转录分析之Seurat-多样本整合(浅谈空间批次):https://www.jianshu.com/p/609b04096b79

从10X官网,我们可以下载获得小鼠大脑同一张切片前端和后端空转数据,包括anterior1,anterior2,posterior1,posterior2。https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Mouse_Brain_Sagittal_Anterior
https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Mouse_Brain_Sagittal_Anterior_Section_2
https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Mouse_Brain_Sagittal_Posterior
https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Mouse_Brain_Sagittal_Posterior_Section_2
导入包

library(Seurat)
library(ggplot2)
library(patchwork)
library(cowplot)
library(dplyr)

读取数据,并分别进行SCT标准化

dir = c('./Mouse/Brain_Section1_Sagittal_Anterior/Brain_anterior1/outs',
        './Mouse/Brain_Section2_Sagittal_Anterior/Brain_anterior2/outs',
        './Mouse/Brain_Section1_Sagittal_Posterior/Brain_posterior1/outs',
        './Mouse/Brain_Section2_Sagittal_Posterior/Brain_posterior2/outs')
names(dir) = c('anterior1', 'anterior2', 'posterior1', 'posterior2')
brain <- list()
for(i in 1:length(dir)){
brain[[i]] <-Seurat::Load10X_Spatial(data.dir = dir[i])
brain[[i]]@meta.data$orig.ident <-names(dir)[i]
}
for (i in 1:length(brain)) {
    brain[[i]] <- SCTransform(brain[[i]], assay = "Spatial", return.only.var.genes = FALSE, verbose = FALSE)} ##SCT标准化

merge合并

setwd("./Merge_Data") #设置输出路径
brain.merge <- merge(brain[[1]], y=c(brain[[2]], brain[[3]], brain[[4]]))
dim(brain.merge)
table(brain.merge@meta.data$orig.ident)
DefaultAssay(brain.merge) <- "SCT"
VariableFeatures(brain.merge) <- c(VariableFeatures(brain[[1]]), VariableFeatures(brain[[2]]), VariableFeatures(brain[[3]]), VariableFeatures(brain[[4]])) 

降维,聚类,可视化 这儿和单一样本处理方式相同

brain.merge <- RunPCA(brain.merge, verbose = FALSE)
brain.merge <- FindNeighbors(brain.merge, dims = 1:30)
brain.merge <- FindClusters(brain.merge,resolution = 0.8, verbose = FALSE)
brain.merge <- RunUMAP(brain.merge, dims = 1:30)
pdf("merge_umap.pdf",width=10,height=5)
DimPlot(brain.merge, reduction = "umap", group.by = c("ident", "orig.ident"))
dev.off()
pdf("merge_umap_slice.pdf",width=10,height=5)
SpatialDimPlot(brain.merge) 
dev.off()
pdf("merge_umap_gene.pdf",width=10,height=5)
SpatialFeaturePlot(brain.merge, features = c("Hpca", "Plp1"))
dev.off()

merge_umap

image.png

merge_umap_gene

识别簇marker genes

saveRDS(brain.merge,"merge.rds") #保存数据
brain.markers <- FindAllMarkers(brain.merge, only.pos = FALSE, min.pct = 0.25, logfc.threshold = 0.25,test.use = "wilcox")
write.table(brain.markers,"marker.txt",row.names=TRUE,col.names=TRUE,sep="\t")
topgene<-brain.markers %>% group_by(cluster) %>% top_n(n = 3, wt = avg_logFC)
pdf("merge_heatmap.pdf",width=10,height=8)
DoHeatmap(brain.merge, features = topgene$gene,size = 2) + NoLegend()
dev.off()
image.png

我们可以发现重复切片之间分类几乎一样,但是anterior和posterior之间有很大差异,尤其中间切断位置不能连接起来,观察marker genes表达,进一步说明merge直接整合,分类不是很准确,样本间还是有批次存在的,这儿我们可以使用单细胞去批次方法去除空间批次。

这儿,我们可以尝试使用Seurat FindIntegrationAnchors函数来整合表达谱,去除批次。
读取数据

dir = c('./Mouse/Brain_Section1_Sagittal_Anterior/Brain_anterior1/outs',
        './Mouse/Brain_Section1_Sagittal_Posterior/Brain_posterior1/outs')
names(dir) = c('anterior1', 'posterior1')
brain <- list()
for(i in 1:length(dir)){
brain[[i]] <-Seurat::Load10X_Spatial(data.dir = dir[i])
brain[[i]]@meta.data$orig.ident <-names(dir)[i]
}

标准化NormalizeData

for (i in 1:length(brain)) {
    brain[[i]] <- NormalizeData(brain[[i]]) #未使用SCT标准化
    brain[[i]] <- FindVariableFeatures(brain[[i]], selection.method = "vst", nfeatures = 2000)}
##
features <- SelectIntegrationFeatures(object.list = brain)
brain.anchors <- FindIntegrationAnchors(object.list = brain, anchor.features = features)
brain_in <- IntegrateData(anchorset = brain.anchors)
dim(brain_in)
DefaultAssay(brain_in) <- "integrated"
brain_in <- ScaleData(brain_in, verbose = FALSE)
brain_in <- RunPCA(brain_in, npcs = 30, verbose = FALSE)
brain_in <- RunUMAP(brain_in, reduction = "pca", dims = 1:30)
brain_in <- FindNeighbors(brain_in, reduction = "pca", dims = 1:30)
brain_in <- FindClusters(brain_in, resolution = 0.8,verbose = FALSE)
pdf("merge_umap1.pdf",width=10,height=5)
DimPlot(brain_in, reduction = "umap", group.by = c("ident", "orig.ident"))
dev.off()
pdf("merge_umap_slice1.pdf",width=10,height=5)
SpatialDimPlot(brain_in)
dev.off()

merge_umap1.

merge_umap_slice1

图片上看,两张切片连接处分类相比未去批次前更为合理。
SCT标准化

for (i in 1:length(brain)) {
    brain[[i]] <- SCTransform(brain[[i]], assay = "Spatial", return.only.var.genes = FALSE, verbose = FALSE)} #使用SCT标准化
features <- SelectIntegrationFeatures(object.list = brain, nfeatures = 3000)
brain <- PrepSCTIntegration(object.list = brain, anchor.features = features)
brain.anchors <- FindIntegrationAnchors(object.list = brain, normalization.method = "SCT", anchor.features = features)
brian.sct <- IntegrateData(anchorset = brain.anchors, normalization.method = "SCT")
dir.create("Integrate_SCT_data")
setwd("Integrate_SCT_data")
dim(brian.sct)
brian.sct <- RunPCA(brian.sct, npcs = 30, verbose = FALSE)
brian.sct <- RunUMAP(brian.sct, reduction = "pca", dims = 1:30)
brian.sct <- FindNeighbors(brian.sct, reduction = "pca", dims = 1:30)
brian.sct <- FindClusters(brian.sct, resolution = 0.8,verbose = FALSE)
pdf("merge_umap2.pdf",width=10,height=5)
DimPlot(brian.sct, reduction = "umap", group.by = c("ident", "orig.ident"))
dev.off()
pdf("merge_umap_slice2.pdf",width=10,height=5)
SpatialDimPlot(brian.sct)
dev.off()
merge_umap2

merge_umap_slice2

相比上面,感觉spots会混乱一些,一些类别中含有更多错误分类的的spots。

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

推荐阅读更多精彩内容