前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Seurat:用于分析10X单细胞转录组数据的R包

Seurat:用于分析10X单细胞转录组数据的R包

作者头像
生信修炼手册
发布2019-12-19 11:47:11
2.2K0
发布2019-12-19 11:47:11
举报
文章被收录于专栏:生信修炼手册

欢迎关注”生信修炼手册”!

Seurat是一个分析单细胞转录组数据的R包,提供了t-SNE降维分析,聚类分析,mark基因识别等多种功能,网址如下

https://satijalab.org/seurat/

基本用法如下

1. 导入10X 单细胞数据
代码语言:javascript
复制
library(Seurat)
input_dir <- "/scRNA/outs/filtered_gene_bc_matrices/GRCh38/"
pbmc.data <- Read10X(data.dir = input_dir)
pbmc <- CreateSeuratObject(raw.data = pbmc.data, project = "10X")
2. 预处理

预处理就是根据基因的表达量等特征,对细胞进行过滤,通常的做法就是指定一个阈值,比如要求一个细胞中检测到的基因数必须大于100,才可以进入到下游分析,如果小于这个数字,就过滤掉该细胞。

需要强调的是,预处理这一步是可选的,在设定过滤的阈值时,需要人为判断,这样的设定方式会受到主观因素的干扰,所以往往都会指定一个非常小的过滤范围,保证只过滤掉极少数的离群值点。

为了指定一个合适的阈值,我们首先需要查看细胞中不同特征的分布,常见的有以下几个指标

代码语言:javascript
复制
1.nGene
2.nUMI
3.mito.percent

nGene代表的是在该细胞中共检测到的表达量大于0的基因个数,nUMI代表的是该细胞中所有基因的表达量之和,mito.percent代表的是线粒体基因表达量的百分比,通过小提琴图来展示对应的分布,代码如下

代码语言:javascript
复制
# 提取线粒体基因列表
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)# 将统计的百分比数据添加对象中
pbmc <- AddMetaData(
 object = pbmc,
 metadata = percent.mito,
 col.name = "percent.mito")# 小提琴图
VlnPlot(
 object = pbmc,
 features.plot = c("nGene", "nUMI", "percent.mito"),
 nCol = 3)

生成的图片示意如下

图中每个点代表的是一个细胞,反应的是对应特征在所有细胞的一个分布情况。通过观察上图,我们可以确定一个大概的筛选范围。以nGene为例,可以看到数值在4000以上的细胞是非常少的,可以看做是离群值,所以在筛选时,如果一个细胞中检测到的基因个数大于4000,就可以进行过滤。

在过滤阈值时,我们还需要考虑一个因素,就是这3个指标之间的相互关系,可以通过以下方式得到

代码语言:javascript
复制
par(mfrow = c(1, 2))
GenePlot(object = pbmc, gene1 = "nUMI", gene2 = "percent.mito")
GenePlot(object = pbmc, gene1 = "nUMI", gene2 = "nGene")

结果示意如下

以UMI和gene之间的关系图为例,可以看到非常明显的一个相关性,当gene个数为4000时对应的umi在20000左右,所以在设定阈值,我们想过滤掉gene大于4000的细胞,此时umi的阈值就应该设置在20000左右。

结合以上两种图表,判断出一个合适的阈值之后,就可以进行过滤了,代码如下

代码语言:javascript
复制
pbmc <- FilterCells(
 object = pbmc,
 subset.names = c("nGene", "percent.mito"),
 low.thresholds = c(200, -Inf),
 high.thresholds = c(2500, 0.05))

subset指定对应的特征,lowhigh分别指定合理取值的两个范围。

3. 归一化

预处理之后,首先进行归一化,代码如下

代码语言:javascript
复制
pbmc <- NormalizeData(
 object = pbmc,
 normalization.method = "LogNormalize",
 scale.factor = 10000)

默认采用LogNormalize归一化算法,首先将原始的表达量转换成相对丰度,然后乘以scale.factor的值,在取对数。

归一化之后,Seurat提取那些在细胞间变异系数较大的基因用于下游分析,代码如下

代码语言:javascript
复制
pbmc <- FindVariableGenes(
 object = pbmc,
 mean.function = ExpMean,
 dispersion.function = LogVMR,
 x.low.cutoff = 0.0125,
 x.high.cutoff = 3,
 y.cutoff = 0.5)

在进行下游的降维和聚类分析之前,有必要进一步降低系统误差,代码如下

代码语言:javascript
复制
pbmc <- ScaleData(
 object = pbmc,
 vars.to.regress = c("nUMI", "percent.mito")
)
3. 聚类分析

聚类分析用于识别细胞亚型,在Seurat中,不是直接对所有细胞进行聚类分析,而是首先进行PCA主成分分析,然后挑选贡献量最大的几个主成分,用挑选出的主成分的值来进行聚类分析。

第一步,PCA分析,代码如下

代码语言:javascript
复制
pbmc <- RunPCA(
 object = pbmc,
 pc.genes = pbmc@var.genes)

第二步,评估最显著的主成分,代码如下

代码语言:javascript
复制
pbmc <- JackStraw(
 object = pbmc,
 num.replicate = 100,
 display.progress = FALSE)

这一步特别费时,运行完之后,可以进行如下可视化

代码语言:javascript
复制
JackStrawPlot(object = pbmc, PCs = 1:12)

数值小于0.05的,认为是显著的,从上图可以看出,PC1-9是最显著的主成分。 第三步,聚类分析,代码如下

代码语言:javascript
复制
pbmc <- FindClusters(
 object = pbmc,
 reduction.type = "pca",
 dims.use = 1:9,
 resolution = 0.6,
 print.output = 0,
 save.SNN = TRUE)

聚类的结果通过以下代码可以查看

代码语言:javascript
复制
pbmc@ident
4. t-SNE降维分析

采用t-SNE降维算法,用2d-plot的方式展示细胞的表达量分布,同时根据聚类结果,将同一cluster的细胞用相同颜色表示,代码如下

代码语言:javascript
复制
pbmc <- RunTSNE(
 object = pbmc,
 dims.use = 1:10,
 do.fast = TRUE)
TSNEPlot(object = pbmc)

生成的图片如下

还支持在图上标注每个cluster的名字,代码如下

代码语言:javascript
复制
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)
5. mark基因识别

通过差异分析来识别每个cluster下的标记基因,将该cluster下的细胞作为一组,其他cluster下的细胞作为另一组,然后进行差异分析,代码如下

代码语言:javascript
复制
> all_markers <- FindAllMarkers(object = pbmc)
> head(all_markers)
              p_val avg_logFC pct.1 pct.2    p_val_adj cluster    gene
UBA52   1.344025e-52 -1.133346 0.327 0.919 4.507589e-48       0   UBA52
RPL39   1.708604e-52 -1.241172 0.398 0.924 5.730315e-48       0   RPL39
MT-ATP6 7.859458e-51  1.092949 0.995 1.000 2.635905e-46       0 MT-ATP6
RPS24   4.304581e-50 -1.116990 0.445 0.934 1.443670e-45       0   RPS24
TPT1    1.552635e-49 -1.106253 0.611 0.965 5.207229e-45       0    TPT1
MT-CYB  2.423599e-49  1.125433 0.991 0.999 8.128265e-45       0  MT-CYB

同时提供了基因在不同cluster下的小提琴图,代码如下

代码语言:javascript
复制
VlnPlot(
 object = pbmc,
 features.plot = "UBA52")

生成的图片如下

更多的用法请参考官方文档。

·end·

—如果喜欢,快分享给你的朋友们吧—

扫描关注微信号,更多精彩内容等着你!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 导入10X 单细胞数据
  • 2. 预处理
  • 3. 归一化
  • 3. 聚类分析
  • 4. t-SNE降维分析
  • 5. mark基因识别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档