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

1. 写在前面

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

2.用到的包

rm(list = ls())
library(Seurat)
library(tidyverse)
library(SingleR)
library(celldex)
library(RColorBrewer)
library(SingleCellExperiment)

3. 示例数据

3.1 读取10X文件

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

adj.matrix <- Read10X("./soupX_pbmc10k_filt")


3.2 创建Seurat对象

srat <- CreateSeuratObject(adj.matrix,project = "pbmc10k") 
srat


3.3 查看Seurat对象

str(srat)

4. 提取meta.data

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

  • dataset ID
  • UMI/cell (nCount_RNA);
  • detected genes/cell (nFeature_RNA)。
meta <- srat@meta.data
head(meta)

5.添加信息

5.1 添加线粒体基因信息

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

srat[["percent.mt"]] <- PercentageFeatureSet(srat, pattern = "^MT-")

head(srat$percent.mt)


5.2 添加核糖体基因信息

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

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做过处理了,这里就直接导入准备好的文件吧。

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探索一下特征的分布情况。

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 散点图

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

FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "percent.mt")


FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")


FeatureScatter(srat, feature1 = "nCount_RNA", feature2 = "percent.rb")


FeatureScatter(srat, feature1 = "percent.rb", feature2 = "percent.mt")


FeatureScatter(srat, feature1 = "nFeature_RNA", feature2 = "Doublet_score")

Note!

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

8. 添加信息

8.1 过滤

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

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 可视化

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

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))


花蛤
最后祝大家早日不卷!~

需要示例数据的小伙伴,在公众号回复Seurat获取吧!

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

<think>好的,我现在要帮助用户了解如何使用R语言进行单细胞测序数据分析。首先,我需要回忆单细胞测序分析的基本流程和相关工具包。记得Seurat是常用的R包,还有Bioconductor的些工具,比如SingleCellExperiment。用户可能想从数据预处理到最终可视化的整个流程,所以我得步步拆解。 首先,用户可能需要安装必要的工具包。这时候要列出常用的包,比如Seurat、dplyr、ggplot2,还有Bioconductor的安装方法。需要确认这些包的最新版本和安装命令是否正确,避免用户遇到问题。 接下来是数据导入。单细胞数据通常来自10X Genomics,所以需要说明如何用Read10X函数读取数据,并创建Seurat对象。这里要确保路径正确,提醒用户注意文件路径的问题。 然后是数据预处理,包括质控、归化、特征选择和降维。质控部分需要提到线粒体基因比例的计算,如何过滤低质量的细胞。归化可能用LogNormalize,特征选择用FindVariableFeatures,降维用PCA,接着是UMAP或t-SNE。这些步骤的顺序和参数设置需要准确,比如nfeatures设为2000,npcs=50可能常见,但可能需要根据数据调整。 然后是细胞聚类,使用FindNeighbors和FindClusters函数,这里的分辨率参数会影响聚类数目,可能需要用户自己调整。之后是差异表达分析,用FindAllMarkers来找每个群的标记基因,并提到常用的基因如线粒体基因作为质控指标。 可视化部分,UMAP图、热图和特征图都是常用的,需要给出具体的代码示例,比如DimPlot、DoHeatmap和FeaturePlot的使用方法。热图部分可以引用用户提供的资料中的内容,比如使用计算亲和力矩阵的方法,这里结合引用[3]。 最后,高级分析部分,比如拟时序分析,需要提到monocle3包,以及细胞类型注释的方法,比如用SingleR或手动标记。整合多组学数据可能涉及引用[2]中的多模态分析,比如RNA速度和多组学因子分析,所以需要提到这些未来的方向。 教程资源部分,要推荐官方文档和知名社区,比如Satija Lab的教程和Bioconductor的课程,确保用户有进步学习的资料。 在问题生成部分,需要围绕用户可能的后续疑问,比如数据预处理的具体步骤、聚类参数调整、工具包比较、可视化方法以及多组学整合,这些都能帮助用户深入理解。 需要检查每个步骤的代码是否正确,比如Seurat的版本是否兼容,函数名是否有变化。比如,Seurat v3之后的些函数可能有变动,比如NormalizeData默认方法是否是LogNormalize,是否需要SCTransform替代。但用户可能使用的是基础流程,所以保持简单。 还要注意引用标记,比如在提到热图时引用[3],在整合多组学部分引用[2],以及在分析流程中提到实验设计时引用[1]。确保引用位置自然,不打断内容流畅。 最后,确保语言口语化,避免术语堆砌,逐步引导用户完成整个分析流程,并提示可能遇到的问题和解决方法,比如数据过滤的阈值选择,参数调整的影响等。</think>以下是如何使用R语言进行单细胞测序数据分析的详细指南,结合生物信息学工具包和实际代码示例: ### 、工具包准备 常用R语言工具包: - `Seurat`:单细胞数据分析核心工具,支持数据预处理、降维、聚类和可视化[^1] - `SingleCellExperiment`:Bioconductor生态系统中的标准化数据容器 - `scater`/`scran`:提供单细胞特异性统计分析方法 - `monocle3`:用于拟时序分析 ```r # 安装命令示例 install.packages("Seurat") BiocManager::install("SingleCellExperiment") ``` ### 二、数据加载预处理 1. **数据导入** ```r library(Seurat) # 读取10X Genomics数据 pbmc.data <- Read10X(data.dir = "filtered_gene_bc_matrices/hg19/") pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k") ``` 2. **质量控制** ```r pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-") pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5) ``` 3. **数据标准化** ```r pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000) ``` ### 三、特征选择降维 ```r pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000) pbmc <- ScaleData(pbmc) pbmc <- RunPCA(pbmc, npcs = 50) pbmc <- RunUMAP(pbmc, dims = 1:30) ``` ### 四、细胞聚类分析 ```r pbmc <- FindNeighbors(pbmc, dims = 1:30) pbmc <- FindClusters(pbmc, resolution = 0.5) DimPlot(pbmc, reduction = "umap") ``` ### 五、差异表达分析 ```r cluster_markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25) top10 <- cluster_markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC) DoHeatmap(pbmc, features = top10$gene) + NoLegend() ``` ### 六、高级分析(引用[2]技术) 1. **拟时序分析** ```r library(monocle3) cds <- new_cell_data_set(expression_matrix = GetAssayData(pbmc)) cds <- preprocess_cds(cds, num_dim = 30) cds <- reduce_dimension(cds) cds <- cluster_cells(cds) cds <- learn_graph(cds) ``` 2. **多组学整合**(基于引用[2]的方法) ```r # 使用Seurat v5的多模态整合功能 multiome <- merge(pbmc_rna, pbmc_atac) multiome <- FindMultiModalNeighbors(multiome) ``` ### 七、可视化技术(引用[3]热图应用) ```r FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E")) VlnPlot(pbmc, features = c("nFeature_RNA", "percent.mt")) ``` ### 八、教程资源推荐 1. Seurat官方教程:https://satijalab.org/seurat/ 2. Bioconductor单细胞课程:https://bioconductor.org/help/course-materials/ 3. 10X Genomics官方分析指南:https://support.10xgenomics.com/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值