单细胞转录组|单细胞转录组|Seurat 4.0 使用指南

简介: 10X Genomics免费提供的外周血单核细胞(PBMC)数据集。通过Illumina NextSeq 500测序的2700个单细胞。

Seurat 4.0 使用指南


设置Seurat对象


示例数据

10X Genomics免费提供的外周血单核细胞(PBMC)数据集。通过Illumina NextSeq 500测序的2700个单细胞。示例数据下载:https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz。

setwd(".../filtered_gene_bc_matrices/hg19") #设置工作环境到数据所在文件夹
#安装和加载所需包
BiocManager::install("Seurat") 
BiocManager::install("dplyr")
BiocManager::install("patchwork")
library(dplyr)
library(Seurat)
library(patchwork)


#导入示例数据
pbmc.data <- Read10X(data.dir = ".../filtered_gene_bc_matrices/hg19/")#自行填写数据所在文件夹
#创建Seurat对象
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)
#过滤检测少于200个基因的细胞(min.features = 200)和少于3个细胞检测出的基因(min.cells = 3)
pbmc


#参数解释
CreateSeuratObject(
  counts, #未标准化的数据,如原始计数或TPMs
  project = "CreateSeuratObject",#设置Seurat对象的项目名称
  assay = "RNA", #与初始输入数据对应的分析名称
  names.field = 1,#对于每个cell的初始标识类,从cell的名称中选择此字段。例如,如果cell在输入矩阵           #中被命名为BARCODE_CLUSTER_CELLTYPE,则设置名称。字段设置为3以将初始标识设置为          #CELLTYPE。
  names.delim = "_", #对于每个cell的初始标识类,从cell的列名中选择此分隔符。例如,如果cell命名       #为bar - cluster - celltype,则将此设置为“-”,以便将cell名称分离到其组成部分         #中,以选择相关字段。
  meta.data = NULL, #要添加到Seurat对象的其他单元级元数据。应该是data.frame,其中行是单元格名称,列      #是附加的元数据字段。
  ...
  min.cells #包含至少在这些细胞检测到的features。
  min.features #包含至少检测到这些features的细胞
> pbmc
An object of class Seurat 
13714 features across 2700 samples within 1 assay 
Active assay: RNA (13714 features, 0 variable features)
#1个数据集,包含2700个细胞,13714个基因。

数据矩阵

# 查看这三个基因的前三十行矩阵
pbmc.data[c("CD3D", "TCL1A", "MS4A1"), 1:30]
> pbmc.data[c("CD3D", "TCL1A", "MS4A1"), 1:30]
3 x 30 sparse Matrix of class "dgCMatrix"
   [[ suppressing 30 column names ‘AAACATACAACCAC-1’, ‘AAACATTGAGCTAC-1’, ‘AAACATTGATCAGC-1’ ... ]]
CD3D  4 . 10 . . 1 2 3 1 . . 2 7 1 . . 1 3 . 2
TCL1A . .  . . . . . . 1 . . . . . . . . . . .
MS4A1 . 6  . . . . . . 1 1 1 . . . . . . . . .
CD3D   3 . . . . . 3 4 1 5
TCL1A  . 1 . . . . . . . .
MS4A1 36 1 2 . . 2 . . . .

.在矩阵中的值表示0(未检测到分子)。由于scRNA-seq矩阵中的大多数值为0,因此Seurat在任何可能的情况下都使用稀疏矩阵表示。这为Drop-seq/inDrop/10x数据节省了大量内存和速度。


标准的预处理流程


下面的步骤包含了Seurat中的scRNA-seq数据的标准预处理流程。包括QC(质控)、数据归一化以及细胞的选择和过滤。


QC和细胞筛选


常用的质控指标:


每个细胞在检测到的特异基因数

低质量细胞或空液滴通常只能检测到非常少的基因

两个或多个细胞被同时捕获通常会有很高的基因数

每个细胞检测到的分子总数(与基因密切相关)

每个细胞的线粒体基因比例

低质量/濒死细胞常表现出广泛的线粒体污染

使用PercentageFeatureSet()函数计算线粒体QC指标

使用所有以MT-开头的基因作为一组线粒体基因

#向pbmc新增一列percent.mt数据
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")

QC指标储存在哪?


每个细胞基因数和总分子数在建立seurat对象时就已经自动计算好了。

#展示前5个细胞的QC指标
head(pbmc@meta.data, 5)
> head(pbmc@meta.data, 5)
                 orig.ident nCount_RNA
AAACATACAACCAC-1     pbmc3k       2419
AAACATTGAGCTAC-1     pbmc3k       4903
AAACATTGATCAGC-1     pbmc3k       3147
AAACCGTGCTTCCG-1     pbmc3k       2639
AAACCGTGTATGCG-1     pbmc3k        980
                 nFeature_RNA percent.mt
AAACATACAACCAC-1          779  3.0177759
AAACATTGAGCTAC-1         1352  3.7935958
AAACATTGATCAGC-1         1129  0.8897363
AAACCGTGCTTCCG-1          960  1.7430845
AAACCGTGTATGCG-1          521  1.2244898
#使用小提琴图可视化QC指标
VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)

nFeature_RNA代表每个细胞测到的基因数目。

nCount_RNA代表每个细胞测到所有基因的表达量之和。

percent.mt代表测到的线粒体基因的比例。

image.png

#FeatureScatter通常用于可视化 feature-feature 相关性,
#nCount_RNA 与percent.mt的相关性
plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
#nCount_RNA与nFeature_RNA的相关性
plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot1 + plot2 #合并两图

image.png


过滤线粒体基因表达比例过高的细胞,和一些极值细胞(可以根据小提琴图判断,查看两端离群值)。

pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
#滤掉 2500 > nFeature_RNA >200 和percent.mt < 5的数据

数据标准化


默认情况下,使用全局缩放归一化方法“LogNormalize”,用总表达量对每个细胞的基因表达式进行归一化,再乘以一个缩放因子(默认为10,000),然后对结果进行log转换。标准化的数值存储在pbmc[["RNA"]]@data中。

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

若所有调用的参数都是默认值,则可省去。

pbmc <- NormalizeData(pbmc)

鉴定高变基因


接下来,计算数据集中表现出高细胞间变异的特征基因(即,它们在某些细胞中高表达,而在其他细胞中低表达)。这些基因有助于突出单细胞数据集中的生物信号。


用FindVariableFeatures()函数实现。默认情况下,每个数据集返回2000个features 。这些将用于下游分析,如PCA。

pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
# 查看最高变的10个基因
top10 <- head(VariableFeatures(pbmc), 10)
# 画出不带标签或带标签基因点图
plot1 <- VariableFeaturePlot(pbmc)
plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE)
plot1 + plot2

image.png


数据缩放


线性变换(“缩放”),是在PCA降维之前的一个标准预处理步骤。ScaleData()函数功能:


转换每个基因的表达值,使每个细胞的平均表达为0


转换每个基因的表达值,使细胞间的方差为1


此步骤在下游分析中具有相同的权重,因此高表达的基因不会占主导地位

结果存储在pbmc[["RNA"]]@scale.data中

all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)

线性降维


接下来,对缩放的数据执行PCA。默认情况下,只使用前面确定的变量特性作为输入,但是如果想选择不同的子集,可以使用features参数来定义。

pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

Seurat提供了几种有用的方法来可视化细胞和定义PCA的特性,包括VizDimReduction、DimPlot和DimHeatmap

#查看PCA结果
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)
> print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)
PC_ 1 
Positive:  CST3, TYROBP, LST1, AIF1, FTL 
Negative:  MALAT1, LTB, IL32, IL7R, CD2 
PC_ 2 
Positive:  CD79A, MS4A1, TCL1A, HLA-DQA1, HLA-DQB1 
Negative:  NKG7, PRF1, CST7, GZMB, GZMA 
PC_ 3 
Positive:  HLA-DQA1, CD79A, CD79B, HLA-DQB1, HLA-DPB1 
Negative:  PPBP, PF4, SDPR, SPARC, GNG11 
PC_ 4 
Positive:  HLA-DQA1, CD79B, CD79A, MS4A1, HLA-DQB1 
Negative:  VIM, IL7R, S100A6, IL32, S100A8 
PC_ 5 
Positive:  GZMB, NKG7, S100A8, FGFBP2, GNLY 
Negative:  LTB, IL7R, CKB, VIM, MS4A7
VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")

image.png

DimPlot(pbmc, reduction = "pca")

image.png

DimHeatmap()可以方便地探索数据集中异质性的主要来源,并且可以确定哪些PC维度可以用于下一步的下游分析。细胞和基因根据PCA分数来排序。

DimHeatmap(pbmc, dims = 1, cells = 500, balanced = TRUE) #1个PC 500个细胞

image.png


DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE) #15个PC

image.png


确定数据的维度


主成分分析的原理非常简单,概括来说就是选择包含信息量大的维度(features),去除信息量少的“干扰”维度。所以这里会有个问题——如何知道保留几个维度是最佳的呢?我们希望通过保留尽可能少的维度来留存尽可能多的信息。Seurat有两种方法来确定维度。


JackStraw

pbmc <- JackStraw(pbmc, num.replicate = 100)
pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
JackStrawPlot(pbmc, dims = 1:15)


image.png

可以看出,在10-12个PC之后,显著性大幅下降,也就是前10-12个维度包含了大部分的样本信息。


Elbow plot

ElbowPlot(pbmc)


image.png

可以看出,PC9-10附近有一个拐点(“elbow”),这表明大部分真实信号是在前10个pc中捕获的。


综合以上方法,选择10个主成成分作为参数用于后续分析。


细胞聚类


Seurat使用KNN算法进行聚类。

pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)
#dims = 1:10 即选取前10个主成分来分类细胞。
#查看前5个细胞的分类ID
head(Idents(pbmc), 5)

非线性降维(UMAP/tSNE)


pbmc <- RunUMAP(pbmc, dims = 1:10)
DimPlot(pbmc, reduction = "umap")
# 显示在聚类标签
DimPlot(pbmc, reduction = "umap", label = TRUE)
# 使用TSNE聚类
pbmc <- RunTSNE(pbmc, dims = 1:10)
DimPlot(pbmc, reduction = "tsne")
# 显示在聚类标签
DimPlot(pbmc, reduction = "tsne", label = TRUE)
#保存rds,用于后续分析
saveRDS(pbmc, file = "../output/pbmc_tutorial.rds")

找差异表达基因(聚类标志cluster biomarkers)

利用 FindMarkers 命令,可以找到找到各个细胞类型中与其他类别的差异表达基因,作为该细胞类型的生物学标记基因。


dent.1参数设置待分析的细胞类别


min.pct参数,在两组细胞中的任何一组中检测到的最小百分


thresh.test参数,在两组细胞间以一定数量的差异表达(平均)


max.cells.per.ident参数,通过降低每个类的采样值,提高计算速度

# cluster 1的标记基因
cluster1.markers <- FindMarkers(pbmc, ident.1 = 1, min.pct = 0.25)
head(cluster1.markers, n = 5)
#找出区分cluster 5与cluster 0和cluster 3的所有标记
cluster5.markers <- FindMarkers(pbmc, ident.1 = 5, ident.2 = c(0, 3), min.pct = 0.25)
head(cluster5.markers, n = 5)
# 找出每个cluster的标记与所有剩余的细胞相比较,只报告阳性细胞
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
pbmc.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_log2FC)

可视化


VlnPlot(pbmc, features = c("MS4A1", "CD79A"))

image.png

# you can plot raw counts as well
VlnPlot(pbmc, features = c("NKG7", "PF4"), slot = "counts", log = TRUE)

image.png

FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", 
    "CD8A"))

image.png


#每个聚类前10个差异基因表达热图(如果小于10,则绘制所有标记)

top10 <- pbmc.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC)
DoHeatmap(pbmc, features = top10$gene) + NoLegend()

image.png


鉴定细胞类型

这个数据集的markers与已知细胞的marker可以轻松配对。也可以通过查阅相关文献人工注释,或者利用singleR(挖个坑,有空再来填)自动注释。image.png


image.png

new.cluster.ids <- c("Naive CD4 T", "CD14+ Mono", "Memory CD4 T", "B", "CD8 T", "FCGR3A+ Mono", 
    "NK", "DC", "Platelet")
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)
DimPlot(pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()

image.png

#保存
saveRDS(pbmc, file = "../output/pbmc3k_final.rds")


相关文章
|
20天前
|
算法 数据挖掘 Go
文献速读|5分生信+免疫组化单细胞联合bulk转录组肿瘤预后模型
研究摘要: 在《Cancer Immunology Immunotherapy》上发表的一篇文章,通过整合Bulk和单细胞RNA-seq数据,探讨了非小细胞肺癌(NSCLC)中癌相关纤维细胞(CAF)的作用。研究者识别出CAF的预后标志物,构建了一个基于CAF的模型,该模型在四个独立队列中区分了预后良好的和较差的患者。WGCNA分析鉴定出CAF标记基因,而CAF分数与免疫微环境和免疫治疗反应相关。高CAF分数关联较差的免疫治疗反应,FBLIM1被发现为CAF的主要来源,其高表达预测了免疫疗法的不良反应。该研究揭示了CAF在NSCLC免疫抑制和治疗策略中的重要地位。
80 1
|
22天前
|
存储 编解码 数据可视化
单细胞分析|Seurat中的跨模态整合
在单细胞基因组学中,新方法“桥接整合”允许将scATAC-seq、scDNAme等技术的数据映射到基于scRNA-seq的参考数据集,借助多组学数据作为桥梁。研究展示了如何将scATAC-seq数据集映射到人类PBMC的scRNA-seq参考,使用10x Genomics的多组学数据集。Azimuth ATAC工具提供了自动化的工作流程,支持在R和网页平台上执行桥接整合。通过加载和预处理不同数据集,映射scATAC-seq数据并进行评估,证明了映射的准确性和细胞类型预测的可靠性。此方法扩展了参考映射框架,促进了不同技术间的互操作性。
22 5
|
数据挖掘
Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
1426 0
Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
|
20天前
|
搜索推荐 数据挖掘 Java
文献速读|7分的干湿结合胃癌单细胞联合bulk转录组+线粒体自噬
研究人员通过单细胞和bulk RNA测序,鉴定出18个线粒体自噬相关基因(MRGs),在胃癌中的预后作用。这些基因可能成为新的生物标志物和治疗靶点。分析显示GABARAPL2和CDC37在上皮细胞中高度表达,与免疫浸润和预后相关。构建的风险模型在多个独立队列中验证有效,表明MRGs可改善预后预测,并提示免疫治疗潜力。研究强调了单细胞分析在理解疾病复杂性和指导个性化治疗中的价值。
20 3
|
8月前
|
数据可视化 数据挖掘 Go
RNA-seq丨转录组分析标准流程与常用工具
RNA-seq丨转录组分析标准流程与常用工具
|
8月前
|
数据挖掘 Go
文献丨群体转录组分析锁定关键转录因子
文献丨群体转录组分析锁定关键转录因子
|
8月前
|
数据挖掘 Go
文献丨转录组分析流程和常用软件
文献丨转录组分析流程和常用软件
|
8月前
|
数据挖掘
文献丨转录组RNA seq——青年阶段!(上)
文献丨转录组RNA seq——青年阶段!
文献丨转录组RNA seq——青年阶段!(上)
|
8月前
|
编解码 芯片
文献丨转录组RNA seq——青年阶段!(下)
文献丨转录组RNA seq——青年阶段!(下)
|
10月前
|
Linux Windows Perl
没有生物学重复的转录组数据怎么进行差异分析?
设置生物学重复这个环节也是你实验设计很重要的一part,设置的好对你下游分析也有利,通常我们做转录组测序,需要的样本量每组至少为3个生物学重复,这个处理起来就很合理,并且现在流行的差异分析软件DEseq2,limma,edgeR等等都是针对有重复的数据去做的,但有时候会不幸碰到样品测序失败不能用,导致每组就给你剩一个重复时候该怎么办,之前我有批数据就是这样,但是办法总比困难多不能放过任何实验数据,搜了搜其实还是有一些方法可以去解决的,在这里介绍下我搜到的几种方法。
535 0