Seurat:Guided Clustering Tutorial

说明:仅根据官网指南加个人理解,相应图片参考官网(目前官网上最新的Tutorial已经更新成Seurat3.0版本,下面的流程是2.4版本,有些许出入。新版本将会在2019年4月16日通过CRAN下载)

以下是Seurat(v2.4版本)标准的数据处理过程,包括构建Seurat对象、QC、数据标准化、检测高变异基因等

1.构建Seurat对象

library(Seurat)
library(dplyr)
#读取10X数据
pbmc.data <- Read10X(data.dir = "~/Downloads/filtered_gene_bc_matrices/hg19/")
#构建Seurat对象,这里会有个初筛,保证所有基因在至少3个细胞中表达(0.1%细胞数),保证每个细胞至少能检测到200个基因。
pbmc <- CreateSeuratObject(raw.data = pbmc.data, min.cells = 3, min.genes = 200, project = "10X_PBMC")

2. QC选择细胞进行后续分析

#UMI (Unique Molecular Identifier)是一段固定长度的随机小片段,用以区别不同的PCR扩增模板
#barcode,标记不同的样品或者细胞

#根据细胞内基因数以及线粒体基因所占比例进行过滤细胞
#提取线粒体DNA并计算其比例
mito.genes <- grep(pattern = "^MT-", x = rownames(x = pbmc@data), value = TRUE)
percent.mito <- Matrix::colSums(pbmc@raw.data[mito.genes, ])/Matrix::colSums(pbmc@raw.data)

#使用AddMetaData函数,将上面合并到pbmc对象中,方便后续的QC
pbmc <- AddMetaData(object = pbmc, metadata = percent.mito, col.name = "percent.mito")
VlnPlot(object = pbmc, features.plot = c("nGene", "nUMI", "percent.mito"), nCol = 3)

#过滤细胞,细胞数控制在200~2500之间,如果不希望设定阈值,用-Inf表示,线粒体DNA所占比例控制在0.05以内
pbmc <- FilterCells(object = pbmc, subset.names = c("nGene", "percent.mito"), low.thresholds = c(200, -Inf), high.thresholds = c(2500, 0.05))

3.对数据进行标准化

pbmc <- NormalizeData(object = pbmc, normalization.method = "LogNormalize", scale.factor = 10000)

4.在单细胞水平上检测变异基因

#这里参数的设置根据数据的类型、样本的异质性以及标准化的方法,存在差异
pbmc <- FindVariableGenes(object = pbmc, mean.function = ExpMean, dispersion.function = LogVMR, x.low.cutoff = 0.0125, x.high.cutoff = 3, y.cutoff = 0.5)
#查看筛选出来的变异基因的数量,一般是2000多
length(x = pbmc@var.genes)

5.除去不想要的变异来源

#这里就包括除去技术水平的噪音、批次效应、细胞状态等
pbmc <- ScaleData(object = pbmc, vars.to.regress = c("nUMI", "percent.mito"))

6.PCA降维处理

pbmc <- RunPCA(object = pbmc, pc.genes = pbmc@var.genes, do.print = TRUE, pcs.print = 1:5, genes.print = 5)

#通过下面的几种function可以查看定义特定PC的细胞和基因
PrintPCA(object = pbmc, pcs.print = 1:5, genes.print = 5, use.full = FALSE)
VizPCA(object = pbmc, pcs.use = 1:2)
PCAPlot(object = pbmc, dim.1 = 1, dim.2 = 2)

#PCHeatmap这个功能可以很清楚的展示一个数据集的异质性,同时对于确定下游分析中用哪一个PC有着很大的帮助。对于探索相关的基因集合有着很大的帮助
PCHeatmap(object = pbmc, pc.use = 1, cells.use = 500, do.balanced = TRUE, label.columns = FALSE)#用PC1作图
PCHeatmap(object = pbmc, pc.use = 1:12, cells.use = 500, do.balanced = TRUE, label.columns = FALSE, use.full = FALSE)#用PC1~12作图

7.确定在统计学上显著的PC

#这一步耗时很长
pbmc <- JackStraw(object = pbmc, num.replicate = 100, display.progress = FALSE)
#这一步可以看一下每一个PC的相关性和显著性,实线在虚线上方
JackStrawPlot(object = pbmc, PCs = 1:12)
#确定需要选取的PC,通过曲线的走势
PCElbowPlot(object = pbmc)

8.对细胞进行聚类

#resolution这一参数一般设定在0.6~1.2之间(细胞数3K左右),聚类结果放在object@ident中
pbmc <- FindClusters(object = pbmc, reduction.type = "pca", dims.use = 1:10, resolution = 0.6, print.output = 0, save.SNN = TRUE)

9.进行非线性降维(tSNE)

#tSNE的输入,建议和之前聚类所用的PC一样
pbmc <- RunTSNE(object = pbmc, dims.use = 1:10, do.fast = TRUE)
#这一步,你可以添加参数do.label=T,显示每一类群的label
TSNEPlot(object = pbmc)
#保存这一对象
saveRDS(pbmc, file = "~/Projects/datasets/pbmc3k/pbmc_tutorial.rds")

10. 找差异表达的基因(聚类marker)

#找到cluster1所对应的marker(positive+negative)
#ident.1 用来指定cluster
#min.pct 用来指定特定基因需要在%的细胞中被检测到
cluster1.markers <- FindMarkers(object = pbmc, ident.1 = 1, min.pct = 0.25)
print(x = head(x = cluster1.markers, n = 5))

#找到区分cluster5和cluster0,3的marker
cluster5.markers <- FindMarkers(object = pbmc, ident.1 = 5, ident.2 = c(0, 3), min.pct = 0.25)
print(x = head(x = cluster5.markers, n = 5))

#找到区分所有cluster的marker
#只展示positive
pbmc.markers <- FindAllMarkers(object = pbmc, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
pbmc.markers %>% group_by(cluster) %>% top_n(2, avg_logFC)

#可视化marker的表达
VlnPlot(object = pbmc, features.plot = c("MS4A1", "CD79A"))
#可以选择用raw UMI counts
VlnPlot(object = pbmc, features.plot = c("NKG7", "PF4"), use.raw = TRUE, y.log = TRUE)

#用PCA或者tSNE图可视化基因的表达
FeaturePlot(object = pbmc, features.plot = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"), cols.use = c("grey", "blue"), reduction.use = "tsne")

#针对给定的细胞和基因,用DoHeatmap函数画出表达热图
#这里选定的是每个cluster中表达量前十的基因
top10 <- pbmc.markers %>% group_by(cluster) %>% top_n(10, avg_logFC)
#slim.col.label= TRUE表示,只展示cluster的ID而不是名字
DoHeatmap(object = pbmc, genes.use = top10$gene, slim.col.label = TRUE, remove.key = TRUE)
VlnPlot

FeaturePlot

DoHeatmap

11.更改cluster的名字(确定细胞类型的前提下)

current.cluster.ids <- c(0, 1, 2, 3, 4, 5, 6, 7)
new.cluster.ids <- c("CD4 T cells", "CD14+ Monocytes", "B cells", "CD8 T cells", "FCGR3A+ Monocytes", "NK cells", "Dendritic cells", "Megakaryocytes")
pbmc@ident <- plyr::mapvalues(x = pbmc@ident, from = current.cluster.ids, to = new.cluster.ids)
TSNEPlot(object = pbmc, do.label = TRUE, pt.size = 0.5)

12.进一步细分细胞类型

#如果你修改分辨率参数resolution或者改变PC的个数,有可能会使得原来的细胞类群进一步的细分。这样你可以进一步探究在这个细分的cluster中,两者之间的marker有什么区别
#在此之前,需要对新的聚类群进行重命名,不然会导致之前的结果被覆盖

#分辨率为0.6
pbmc <- StashIdent(object = pbmc, save.name = "ClusterNames_0.6")
#分辨率为0.8
pbmc <- FindClusters(object = pbmc, reduction.type = "pca", dims.use = 1:10, resolution = 0.8, print.output = FALSE)

#出图
plot1 <- TSNEPlot(object = pbmc, do.return = TRUE, no.legend = TRUE, do.label = TRUE)
plot2 <- TSNEPlot(object = pbmc, do.return = TRUE, group.by = "ClusterNames_0.6", no.legend = TRUE, do.label = TRUE)
plot_grid(plot1, plot2)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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