单细胞测序—S4类、seurat、monocle(cds)对象简介
1 S4类
S4类是R语言中一种更为严格和复杂的面向对象编程方式。与更简单的S3类相比,S4类提供了更高的灵活性和严格性,适用于需要明确结构的复杂数据和应用场景。
更为详细的介绍:https://www.jianshu.com/p/dd181f0698a7
1.1 S4类的主要特点
- 严格的数据类型检查:在S4类中,每个对象的属性(称为“槽”)的类型必须明确指定。这意味着在创建对象时,R会强制检查类型是否匹配,从而减少类型相关的错误。
- 类的定义:S4类需要通过
setClass()
函数来显式定义。类定义中需要明确指定类的名称、包含的槽(属性)以及各个槽的类型。 - 方法的定义:S4类的方法是通过
setMethod()
函数定义的。与S3类不同,S4类的方法是基于签名(即输入参数的类型)来选择的,这使得方法的选择更加精准。 - 构造函数:可以使用
new()
函数来创建S4类的对象。new()
函数会根据类的定义来检查并创建对象,确保每个槽都满足类定义中的要求。 - 继承关系:S4类支持多重继承,允许一个类继承多个父类的属性和方法。这使得S4类在复杂的数据结构建模中非常有用。
1.2 S4类的定义示例
下面是一个简单的S4类定义示例:
代码语言:r复制# 定义一个名为Person的S4类
setClass(
Class = "Person",
slots = list(
name = "character",
age = "numeric"
)
)
# 定义一个构造方法
setMethod(
"initialize", "Person",
function(.Object, name, age) {
.Object@name <- name
.Object@age <- age
return(.Object)
}
)
# 创建一个Person对象
p <- new("Person", name = "John Doe", age = 30)
# 访问S4对象的槽
p@name
p@age
在这个示例中,Person类有两个槽:name(字符型)和age(数值型)。我们使用setClass()函数定义了这个类,并用new()函数创建了一个Person对象。访问S4对象的槽时,使用@
符号。
2 Seurat对象
Seurat是R语言中一个流行的单细胞RNA测序(scRNA-seq)数据分析工具包,用于从数据预处理到高级分析的多个步骤。Seurat对象是Seurat包中的核心数据结构,用于存储和管理scRNA-seq数据以及与其相关的元数据和分析结果。
2.1 Seurat对象的结构
Seurat对象是一个S4类对象,专门设计用于单细胞数据的存储和操作。它可以包含多种数据类型,包括原始计数矩阵、标准化数据、PCA结果、t-SNE或UMAP嵌入、细胞分类信息等。
一个典型的Seurat对象包含以下几个主要槽(slots):
- assays:存储不同类型的表达矩阵,如原始计数(
RNA
)、标准化数据(data
)、尺度数据(scale.data)等。 - meta.data:存储细胞的元数据,如细胞类型、实验条件等。
- active.ident:当前的细胞身份分类或标签信息。
- reductions:存储降维分析的结果,如PCA、t-SNE、UMAP的嵌入坐标。
- graphs:存储细胞之间的图结构,如最近邻图(KNN图)。
- commands:记录分析过程中运行的命令和参数。
- project.name:项目的名称标识。
2.2 创建Seurat对象
Seurat对象通常由scRNA-seq数据矩阵创建。创建过程包括数据导入、预处理和对象初始化。以下是一个典型的Seurat对象创建过程示例:
代码语言:r复制library(Seurat)
# 假设我们有一个表达矩阵 'counts_matrix',行为基因,列为细胞
counts_matrix <- matrix(data = rpois(2000, lambda = 5), nrow = 200, ncol = 10)
# 使用表达矩阵创建一个Seurat对象
seurat_object <- CreateSeuratObject(counts = counts_matrix, project = "ExampleProject")
# 查看Seurat对象的结构
print(seurat_object)
在这个示例中,counts_matrix是一个基因表达矩阵,其中行表示基因,列表示细胞。我们使用CreateSeuratObject()函数将这个矩阵转化为一个Seurat对象。
一般用read10x()等函数直接读取文件创建,不需要自己手动创建对象。
2.3 Seurat对象的常用操作
Seurat对象提供了丰富的操作功能,以支持数据分析的不同阶段。常见的操作包括:
- 数据归一化:seurat_object <- NormalizeData(seurat_object)
- 寻找高变基因:seurat_object <- FindVariableFeatures(seurat_object)
- 数据缩放:seurat_object <- ScaleData(seurat_object)
- 主成分分析(PCA):seurat_object <- RunPCA(seurat_object)
- 聚类分析:seurat_object <- FindClusters(seurat_object, resolution = 0.5)
- 降维可视化(如t-SNE或UMAP):seurat_object <- RunTSNE(seurat_object)
2.4 seurat对象中有哪些函数可以访问内部数据
在 SeuratObject 5 版本中,一些函数和方法已更新,用于提取和操作 Seurat 对象中的细胞表型数据、特征数据和表达矩阵,基于 SeuratObject 5:
meta.data
: 获取或设置细胞的表型数据。
提取表型数据metadata <- seurat_object@meta.data
设置表型数据seurat_object@meta.data <- new_metadata
FetchData()
: 提取指定细胞或基因的特定数据,特别是从meta.data
中获取特定列的数据。
提取特定列的数据data <- FetchData(seurat_object, vars = c("nFeature_RNA", "percent.mt"))
GetAssayData()
: 获取表达数据,使用layer
参数来指定数据类型,例如counts
(原始计数数据)或data
(归一化数据)。
获取计数矩阵count_matrix <- GetAssayData(seurat_object, layer = "counts")
获取归一化后的表达数据normalized_data <- GetAssayData(seurat_object, layer = "data")
Idents()
: 获取或设置细胞的分类信息(通常用于提取细胞群体的身份)。
获取细胞群体的身份cell_identities <- Idents(seurat_object)
设置细胞群体的身份Idents(seurat_object) <- new_identities
Cells()
: 获取细胞名称或筛选细胞。
提取所有细胞名称cell_names <- Cells(seurat_object)
Features()
: 获取特征名称(如基因名称)。
提取所有特征名称feature_names <- Features(seurat_object)
AddMetaData()
: 向 Seurat 对象中添加新的表型数据。
seurat_object <- AddMetaData(seurat_object, metadata = new_metadata, col.name = "new_metadata")
DefaultAssay()
: 获取或设置当前 Seurat 对象的默认 Assay。
default_assay <- DefaultAssay(seurat_object)
DefaultAssay(seurat_object) <- "RNA"
GetDimReduction()
: 提取降维结果(如 PCA、t-SNE、UMAP)的数据。 提取 t-SNE 结果 tsne_data <- GetDimReduction(seurat_object, reduction = "tsne")
其他:
VariableFeatures()
:- 获取或设置高变基因的列表。variable_genes <- VariableFeatures(seurat_object) VariableFeatures(seurat_object) <- new_variable_genes
DimPlot()
:绘制降维分析的散点图,如t-SNE或UMAP结果。DimPlot(seurat_object, reduction = "umap")- 访问降维结果:
Embeddings()
:提取降维分析的嵌入结果(如PCA、t-SNE、UMAP)umap_coords <- Embeddings(object = seurat_object, reduction = "umap");Reductions()
:获取特定的降维对象。
3 monocle(cds)对象
Monocle是一个用于单细胞转录组数据分析的R包,尤其擅长时间序列分析(如拟时分析)和细胞状态的轨迹推断。Monocle对象是Monocle包中的核心数据结构,用于存储单细胞RNA测序(scRNA-seq)数据以及与其相关的元数据和分析结果。
3.1 Monocle对象的结构
Monocle对象的核心是 CellDataSet
对象,这是一个S4类对象,专门设计用于处理单细胞转录组数据。CellDataSet
对象集成了表达矩阵、样本信息、基因注释和分析结果,能够支持从数据输入到结果输出的整个分析流程。
一个典型的 CellDataSet
对象包含以下主要组件:
- expressionData:存储基因表达数据的矩阵,行为基因,列为细胞。
- phenoData:包含细胞的元数据信息(类似于Seurat对象中的
meta.data
),如细胞类型、实验条件等。 - featureData:存储基因的注释信息,通常包括基因的ID、名称、描述等。
- reducedDimA/reducedDimS/reducedDimW:存储降维结果,如PCA、t-SNE、UMAP等。
- cellOrdering:存储细胞的拟时(pseudotime)顺序。
- dispFitInfo:存储基因表达的离散度信息,用于过滤噪声或低表达基因。
3.2 创建Monocle对象
要创建一个Monocle对象,通常需要准备三个主要的数据:基因表达矩阵、细胞元数据(phenoData)、基因注释信息(featureData)。newCellDataSet()函数用于初始化一个 CellDataSet 对象。
通常由seurat对象转换而来:
代码语言:r复制# 将counts矩阵转换为sparseMatrix
data <- as(as.matrix(scRNAsub@assays$RNA@counts), 'sparseMatrix')
# 将meta数据转换为AnnotatedDataFrame
pd <- new('AnnotatedDataFrame', data = scRNAsub@meta.data)
# 创建基因名表并转换为AnnotatedDataFrame
fData <- data.frame(gene_short_name = row.names(data), row.names = row.names(data))
fd <- new('AnnotatedDataFrame', data = fData)
# 创建CellDataSet对象
mycds <- newCellDataSet(data,
phenoData = pd,
featureData = fd,
expressionFamily = negbinomial.size())
3.3 Monocle对象的常用操作
CellDataSet
对象提供了多种函数来进行数据处理和分析,如下是一些常用的操作:
- 数据归一化:cds <- estimateSizeFactors(cds) cds <- estimateDispersions(cds)
- 基因过滤:cds <- detectGenes(cds, min_expr = 0.1)
- 降维分析:cds <- reduceDimension(cds, method = "DDRTree")
- 轨迹推断:cds <- orderCells(cds)
- 拟时分析: cds <- orderCells(cds, root_state = 1)
- 可视化:plot_cell_trajectory(cds, color_by = "cell_type")
3.4 cds对象中有哪些函数可以访问内部数据
pData()
: 提取样本的表型数据(phenotype data),
pheno_data <- pData(mycds)
fData()
: 提取特征数据(feature data),即基因或其他特征的注释信息。
feature_data <- fData(mycds)
exprs()
: 提取表达矩阵(expression data),即每个样本在每个特征上的表达量。
expression_data <- exprs(mycds)
phenoData()
: 直接获取 phenoData 对象,这与 pData() 类似,但返回的是完整的 AnnotatedDataFrame对象。
pheno_data <- phenoData(mycds)
featureData()
: 直接获取featureData
对象,与fData()
类似,返回的是AnnotatedDataFrame
对象。
feature_data <- featureData(mycds)
varLabels()
: 获取phenoData
或featureData
中的变量标签(即列名)。
labels <- varLabels(phenoData(mycds))
sampleNames()
: 获取样本的名称。
sample_names <- sampleNames(mycds)
featureNames()
: 获取特征的名称(如基因名)。
feature_names <- featureNames(mycds)
其他:
reducedDimA()
:reduced_dimensions <- reducedDimA(cds) reducedDimA(cds) <- new_reduced_dimensions- 获取或设置降维分析后的坐标,用于拟时轨迹推断。
reducedDimS()
:
获取或设置在 DDRTree
算法中,用于计算轨迹的降维矩阵。
reduced_dimensions_s <- reducedDimS(cds)
reducedDimW()
: 获取或设置在DDRTree
算法中,用于轨迹推断的权重矩阵。 reduced_dimensions_w <- reducedDimW(cds)cellOrdering()
: 获取细胞在轨迹中的顺序(即拟时信息)。 trajectory_order <- cellOrdering(cds)pseudotime()
:
获取或设置细胞的拟时值。
pseudotime_values <- pseudotime(cds)
state()
:
获取或设置细胞的状态信息,即细胞在轨迹中的分支状态。
cell_states <- state(cds)
sizeFactors()
: 获取或设置用于归一化的尺寸因子。 size_factors <- sizeFactors(cds)dispFitInfo()
:
获取基因表达的离散度信息,用于分析表达数据的分散性。
dispersion_info <- dispFitInfo(cds)
cellPairwiseDistances()
:
获取细胞之间的成对距离,通常用于聚类分析。
pairwise_distances <- cellPairwiseDistances(cds)