前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🤫 Seurat | 强烈建议收藏的单细胞分析标准流程(基础质控与过滤)(一)

🤫 Seurat | 强烈建议收藏的单细胞分析标准流程(基础质控与过滤)(一)

作者头像
生信漫卷
发布2023-02-24 13:43:09
8.3K0
发布2023-02-24 13:43:09
举报
文章被收录于专栏:R语言及实用科研软件

1写在前面

作为现在最火scRNAseq分析包,Seurat当之无愧。😘 本期开始我们介绍一下Seurat包的用法,先从基础质控过滤开始吧。🥳

2用到的包

代码语言:javascript
复制
rm(list = ls())
library(Seurat)
library(tidyverse)
library(SingleR)
library(celldex)
library(RColorBrewer)
library(SingleCellExperiment)

3示例数据

3.1 读取10X文件

这里我们提供一个转成gene symbols的可读文件,如果大家拿到的是Ensemble ID,可以用之前介绍的方法进行转换。

代码语言:javascript
复制
adj.matrix <- Read10X("./soupX_pbmc10k_filt")

3.2 创建Seurat对象

代码语言:javascript
复制
srat <- CreateSeuratObject(adj.matrix,project = "pbmc10k") 
srat

3.3 查看Seurat对象

代码语言:javascript
复制
str(srat)

4提取meta.data

这里我们提取一下meta.data,顺便查看一下表头,主要是三列: 👇

  • dataset ID
  • UMI/cell (nCount_RNA);
  • detected genes/cell (nFeature_RNA)。
代码语言:javascript
复制
meta <- srat@meta.data
head(meta)

5添加信息

5.1 添加线粒体基因信息

不知道大家还记得线粒体基因吗???🤒 在scRNA-seq中,线粒体基因高表达往往代表细胞状态不佳。🧐

代码语言:javascript
复制
srat[["percent.mt"]] <- PercentageFeatureSet(srat, pattern = "^MT-")

head(srat$percent.mt)

5.2 添加核糖体基因信息

这里我们试一下添加核糖体基因的信息。👀

代码语言:javascript
复制
srat[["percent.rb"]] <- PercentageFeatureSet(srat, pattern = "^RP[SL]")

head(srat$percent.rb)

6去除双细胞

scRNAseq理想情况是每个barcode下只有一个细胞,但在实际情况中会有两个多个细胞共用一个barcode,我们称之为doublets。🫠

识别并去除doublets的方法很多,常用的有:👇

  • Scrublet;
  • doubletCells;
  • cxds;
  • bcds;
  • Hybrid;
  • DoubletDetection;
  • DoubletFinder;
  • Solo;
  • DoubletDecon

这里推荐大家使用DoubletFinder,我们就不进行演示了,以后再做具体介绍。🤗

因为我们事先使用Scrublet做过处理了,这里就直接导入准备好的文件吧。

代码语言:javascript
复制
doublets <- read.table("./scrublet_calls.tsv",header = F,row.names = 1)
colnames(doublets) <- c("Doublet_score","Is_doublet")
srat <- AddMetaData(srat,doublets)
head(srat[[]])

7可视化

7.1 小提琴图

这里我们用VlnPlot探索一下特征的分布情况。

代码语言:javascript
复制
VlnPlot(srat, 
        fill.by = "feature", # "feature", "ident"
        features = c("nFeature_RNA","nCount_RNA","percent.mt","percent.rb"),
        ncol = 4, pt.size = 0.1) +
  theme(plot.title = element_text(size=10))

7.2 散点图

这里利用散点图,我们看一下不同变量间的相关性

代码语言:javascript
复制
FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "percent.mt")

代码语言:javascript
复制
FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")

代码语言:javascript
复制
FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "percent.rb")

代码语言:javascript
复制
FeatureScatter(srat, feature1 = "percent.rb", feature2 = "percent.mt")

代码语言:javascript
复制
FeatureScatter(srat, feature1 = "nFeature_RNA", feature2 = "Doublet_score")

Note!

  • 这里我们可以看到高线粒体基因与低UMI计数相关,可以理解为死细胞。 🫠
  • 再看一下核糖体基因与线粒体基因,显著负相关。 😉
  • doublet基因表达数之间也有一定的相关性

8添加信息

8.1 过滤

接着我们定义一下过滤条件,将质量差非单细胞的数据剔除掉。🫵

代码语言:javascript
复制
srat[['QC']] <- ifelse(srat@meta.data$Is_doublet == 'True',
                       'Doublet','Pass')

srat[['QC']] <- ifelse(srat@meta.data$nFeature_RNA < 500 & 
                       srat@meta.data$QC == 'Pass',
                       'Low_nFeature', srat@meta.data$QC
                       )

srat[['QC']] <- ifelse(srat@meta.data$nFeature_RNA < 500 & 
                       srat@meta.data$QC != 'Pass' & 
                       srat@meta.data$QC != 'Low_nFeature',
                       paste('Low_nFeature', srat@meta.data$QC, sep = ','),
                       srat@meta.data$QC
                       )

srat[['QC']] <- ifelse(srat@meta.data$percent.mt > 15 &
                       srat@meta.data$QC == 'Pass',
                       'High_MT',srat@meta.data$QC
                       )

srat[['QC']] <- ifelse(srat@meta.data$nFeature_RNA < 500 &
                       srat@meta.data$QC != 'Pass' & 
                       srat@meta.data$QC !='High_MT',
                       paste('High_MT',srat@meta.data$QC,sep = ','),
                       srat@meta.data$QC
                       )

table(srat[['QC']])

8.2 可视化

这里我们只将通过过滤条件的数据展示出来,大家可以和过滤前的比较一下。

代码语言:javascript
复制
VlnPlot(subset(srat, subset = QC == 'Pass'), 
        features = c("nFeature_RNA", "nCount_RNA", "percent.mt","percent.rb"), 
        ncol = 4, pt.size = 0.1) +
  theme(plot.title = element_text(size=10))

最后祝大家早日不卷!~

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

本文分享自 生信漫卷 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1写在前面
  • 2用到的包
  • 3示例数据
    • 3.1 读取10X文件
      • 3.2 创建Seurat对象
        • 3.3 查看Seurat对象
        • 4提取meta.data
        • 5添加信息
          • 5.1 添加线粒体基因信息
            • 5.2 添加核糖体基因信息
            • 6去除双细胞
            • 7可视化
              • 7.1 小提琴图
                • 7.2 散点图
                • 8添加信息
                  • 8.1 过滤
                    • 8.2 可视化
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档