在单细胞数据分析中,在确定细胞类型后,除了可以进行差异表达基因分析外,还可以针对单个细胞类型进行分析特定分析,这时就需要我们提取细胞子集分开处理了。
一、Seurat数据格式
首先我们需要先对Seurat生成的数据格式有所了解:
图片来源:周运来老师的简书:为什么要以数据库的思维来理解单细胞数据
解释:
Assays
默认情况下,Seurat对象是一个叫RNA的Assay。在我们处理数据的过程中,做整合(integration),或者做变换(SCTransform),或者做去除污染(SoupX),或者是融合velocity的数据等,都会生成新的相关的Assay,用于存放这些处理之后的矩阵。
在之后的处理中,我们可以根据情况使用指定Assay下的数据。不指定Assay使用数据的时候,Seurat调用的是Default Assay下的内容。我们可以通过对象名@active.assay
查看当前Default Assay,通过DefaultAssay函数
更改当前Default Assay。
Assay数据中,counts为raw原始数据,data为normalized(归一化),scale.data matrix为scaled(标准化的数据矩阵)。
调用方法: PBMC@assays$RNA@data
:调用normalized后数据
meta.data
元数据,对每个细胞的描述。一般计算的nFeature_RNA等信息就以metafeature的形式存在Seurat对象的metadata中。计算的分类信息一般以RNA_snn_res.x(x指使用的resolution)存放在metadata中。
orig.ident nCount_RNA nFeature_RNA percent.mito percent.HB RNA_snn_res.0.6 seurat_clusters
AAACCCAAGCGTATGG-1 pbmc 13509 3498 10.659560 0 1 1
AAACCCAGTCCTACAA-1 pbmc 12637 3382 5.610509 0 1 1
AAACGCTAGGGCATGT-1 pbmc 5743 1798 10.691276 0 7 7
AAACGCTGTAGGTACG-1 pbmc 13107 2888 7.866026 0 9 9
AAACGCTGTGTCCGGT-1 pbmc 15510 3807 7.446809 0 3 3
AAACGCTGTGTGATGG-1 pbmc 6131 2348 9.982058 0 5 5
调用方法:pbmc$orig.ident
或pbmc[["orig.ident"]]
active.assay和active.ident
前者是查看当前使用的assays,后者是查看当前的使用分群方式(可使用levels
函数)
reduction
用于储存降维之后的每个细胞的坐标信息。
调用方法:
每个细胞在PC轴上的坐标
head(pbmc@reductions$pca@cell.embeddings)
每个基因对每个PC轴的贡献度(loading值)
head(pbmc@reductions$pca@feature.loadings)
二、提取数据的函数
对Seurat对象结构有所了解之后,我们其实可以直接在Seurat对象中提取数据。可能为了方便,Seurat也提供了一些函数来帮助我们提取一些我们想要的数据。例如:
提取基因ID和细胞ID
-
获取全部基因ID:
rownames(object)
-
获取整个object的细胞ID:
Cells(object)
,colnames(object)
- 按照idents获取部分细胞ID:
WhichCells(object, idents = c(1, 2))
- 按照基因表达获取部分细胞ID:
WhichCells(object, expression = gene1 > 1)
WhichCells(object, expression = gene1 > 1, slot = "counts")
提取降维之后的坐标信息
Embeddings(object = object[["pca"]])
Embeddings(object = object[["umap"]])
提取包含部分细胞的对象
- 按照细胞ID提取:
subset(x = object, cells = cells)
-
按照idents提取:
subset(x = object, idents = c(1, 2))
WhichCells(object, idents = 1)
subset(x=object, idents = "root")
#对细胞簇重新命名后为root - 想要排除1、2细胞类型,可以这样:
subset(pbmc, idents = c(1, 2), invert = TRUE)
- 按照meta.data中设置过的stim信息提取:
subset(x = object, stim == "Ctrl")
-
按照某一个resolution下的分群提取:
subset(x = object, RNA_snn_res.2 == 2)
- 当然还可以根据某个基因的表达量来提取:
subset(x = object, gene1 > 1)
subset(x = object, gene1 > 1,slot = "counts")
三、应用方法
查看每个聚类包含多少细胞?
table(Idents(pbmc))
或table(pbmc$RNA_snn_res.0.3)
每个聚类细胞数占比
prop.table(table(Idents(pbmc)))
或
prop.table(table(pbmc$RNA_snn_res.0.3))
提取表达矩阵
raw.data <- as.matrix(GetAssayData(pbmc, slot = "counts")
或
raw.data <- as.matrix(pbmc@assays$RNA@counts)
提取某种细胞的表达矩阵
raw.data <- as.matrix(GetAssayData(pbmc, slot = "counts")[, WhichCells(pbmc, ident = "1")])
计算平均表达量
cluster.averages <- AverageExpression(pbmc)
获得所有的HVGsID
pbmc[["RNA"]]@var.features
或pbmc@assays$RNA@var.features
pbmc[["RNA"]]@var.features[1:10]
:获得前十个
修改聚类后的因子水平
Idents(pbmc) <- factor(Idents(pbmc), levels= c(1,2,3,4,9,8,7,6,5,0))
参考:
Seurat Weekly NO.2 || 我该如何取子集?
Seurat v3.0命令列表
10xGenomics单细胞转录组亚群细分策略
Seurat V3 学习(二)
Seurat3.1的灵活操作指南