单细胞测序—S4类、seurat、monocle(cds)对象简介

2024-08-30 14:56:25 浏览数 (2)

单细胞测序—S4类、seurat、monocle(cds)对象简介

1 S4类

S4类是R语言中一种更为严格和复杂的面向对象编程方式。与更简单的S3类相比,S4类提供了更高的灵活性和严格性,适用于需要明确结构的复杂数据和应用场景。

更为详细的介绍:https://www.jianshu.com/p/dd181f0698a7

1.1 S4类的主要特点

  1. 严格的数据类型检查:在S4类中,每个对象的属性(称为“槽”)的类型必须明确指定。这意味着在创建对象时,R会强制检查类型是否匹配,从而减少类型相关的错误。
  2. 类的定义:S4类需要通过setClass()函数来显式定义。类定义中需要明确指定类的名称、包含的槽(属性)以及各个槽的类型。
  3. 方法的定义:S4类的方法是通过setMethod()函数定义的。与S3类不同,S4类的方法是基于签名(即输入参数的类型)来选择的,这使得方法的选择更加精准。
  4. 构造函数:可以使用new()函数来创建S4类的对象。new()函数会根据类的定义来检查并创建对象,确保每个槽都满足类定义中的要求。
  5. 继承关系: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):

  1. assays:存储不同类型的表达矩阵,如原始计数(RNA)、标准化数据(data)、尺度数据(scale.data)等。
  2. meta.data:存储细胞的元数据,如细胞类型、实验条件等。
  3. active.ident:当前的细胞身份分类或标签信息。
  4. reductions:存储降维分析的结果,如PCA、t-SNE、UMAP的嵌入坐标。
  5. graphs:存储细胞之间的图结构,如最近邻图(KNN图)。
  6. commands:记录分析过程中运行的命令和参数。
  7. 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对象提供了丰富的操作功能,以支持数据分析的不同阶段。常见的操作包括:

  1. 数据归一化:seurat_object <- NormalizeData(seurat_object)
  2. 寻找高变基因:seurat_object <- FindVariableFeatures(seurat_object)
  3. 数据缩放:seurat_object <- ScaleData(seurat_object)
  4. 主成分分析(PCA):seurat_object <- RunPCA(seurat_object)
  5. 聚类分析:seurat_object <- FindClusters(seurat_object, resolution = 0.5)
  6. 降维可视化(如t-SNE或UMAP):seurat_object <- RunTSNE(seurat_object)

2.4 seurat对象中有哪些函数可以访问内部数据

在 SeuratObject 5 版本中,一些函数和方法已更新,用于提取和操作 Seurat 对象中的细胞表型数据、特征数据和表达矩阵,基于 SeuratObject 5:

  1. meta.data: 获取或设置细胞的表型数据。

提取表型数据metadata <- seurat_object@meta.data

设置表型数据seurat_object@meta.data <- new_metadata

  1. FetchData(): 提取指定细胞或基因的特定数据,特别是从 meta.data 中获取特定列的数据。

提取特定列的数据data <- FetchData(seurat_object, vars = c("nFeature_RNA", "percent.mt"))

  1. GetAssayData(): 获取表达数据,使用 layer 参数来指定数据类型,例如 counts(原始计数数据)或 data(归一化数据)。

获取计数矩阵count_matrix <- GetAssayData(seurat_object, layer = "counts")

获取归一化后的表达数据normalized_data <- GetAssayData(seurat_object, layer = "data")

  1. Idents(): 获取或设置细胞的分类信息(通常用于提取细胞群体的身份)。

获取细胞群体的身份cell_identities <- Idents(seurat_object)

设置细胞群体的身份Idents(seurat_object) <- new_identities

  1. Cells(): 获取细胞名称或筛选细胞。

提取所有细胞名称cell_names <- Cells(seurat_object)

  1. Features(): 获取特征名称(如基因名称)。

提取所有特征名称feature_names <- Features(seurat_object)

  1. AddMetaData(): 向 Seurat 对象中添加新的表型数据。

seurat_object <- AddMetaData(seurat_object, metadata = new_metadata, col.name = "new_metadata")

  1. DefaultAssay(): 获取或设置当前 Seurat 对象的默认 Assay。

default_assay <- DefaultAssay(seurat_object)

DefaultAssay(seurat_object) <- "RNA"

  1. GetDimReduction(): 提取降维结果(如 PCA、t-SNE、UMAP)的数据。 提取 t-SNE 结果 tsne_data <- GetDimReduction(seurat_object, reduction = "tsne")

其他:

  1. VariableFeatures()
  2. 获取或设置高变基因的列表。variable_genes <- VariableFeatures(seurat_object) VariableFeatures(seurat_object) <- new_variable_genes
  3. DimPlot():绘制降维分析的散点图,如t-SNE或UMAP结果。DimPlot(seurat_object, reduction = "umap")
  4. 访问降维结果: 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 对象包含以下主要组件:

  1. expressionData:存储基因表达数据的矩阵,行为基因,列为细胞。
  2. phenoData:包含细胞的元数据信息(类似于Seurat对象中的 meta.data),如细胞类型、实验条件等。
  3. featureData:存储基因的注释信息,通常包括基因的ID、名称、描述等。
  4. reducedDimA/reducedDimS/reducedDimW:存储降维结果,如PCA、t-SNE、UMAP等。
  5. cellOrdering:存储细胞的拟时(pseudotime)顺序。
  6. 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 对象提供了多种函数来进行数据处理和分析,如下是一些常用的操作:

  1. 数据归一化:cds <- estimateSizeFactors(cds) cds <- estimateDispersions(cds)
  2. 基因过滤:cds <- detectGenes(cds, min_expr = 0.1)
  3. 降维分析:cds <- reduceDimension(cds, method = "DDRTree")
  4. 轨迹推断:cds <- orderCells(cds)
  5. 拟时分析: cds <- orderCells(cds, root_state = 1)
  6. 可视化:plot_cell_trajectory(cds, color_by = "cell_type")

3.4 cds对象中有哪些函数可以访问内部数据

  1. pData(): 提取样本的表型数据(phenotype data),

pheno_data <- pData(mycds)

  1. fData(): 提取特征数据(feature data),即基因或其他特征的注释信息。

feature_data <- fData(mycds)

  1. exprs(): 提取表达矩阵(expression data),即每个样本在每个特征上的表达量。

expression_data <- exprs(mycds)

  1. phenoData(): 直接获取 phenoData 对象,这与 pData() 类似,但返回的是完整的 AnnotatedDataFrame对象。

pheno_data <- phenoData(mycds)

  1. featureData(): 直接获取 featureData 对象,与 fData() 类似,返回的是 AnnotatedDataFrame 对象。

feature_data <- featureData(mycds)

  1. varLabels(): 获取 phenoDatafeatureData 中的变量标签(即列名)。

labels <- varLabels(phenoData(mycds))

  1. sampleNames(): 获取样本的名称。

sample_names <- sampleNames(mycds)

  1. featureNames(): 获取特征的名称(如基因名)。

feature_names <- featureNames(mycds)

其他:

  1. reducedDimA():reduced_dimensions <- reducedDimA(cds) reducedDimA(cds) <- new_reduced_dimensions
  2. 获取或设置降维分析后的坐标,用于拟时轨迹推断。
  3. reducedDimS()

获取或设置在 DDRTree 算法中,用于计算轨迹的降维矩阵。

reduced_dimensions_s <- reducedDimS(cds)

  1. reducedDimW(): 获取或设置在 DDRTree 算法中,用于轨迹推断的权重矩阵。 reduced_dimensions_w <- reducedDimW(cds)
  2. cellOrdering(): 获取细胞在轨迹中的顺序(即拟时信息)。 trajectory_order <- cellOrdering(cds)
  3. pseudotime()

获取或设置细胞的拟时值。

pseudotime_values <- pseudotime(cds)

  1. state()

获取或设置细胞的状态信息,即细胞在轨迹中的分支状态。

cell_states <- state(cds)

  1. sizeFactors(): 获取或设置用于归一化的尺寸因子。 size_factors <- sizeFactors(cds)
  2. dispFitInfo()

获取基因表达的离散度信息,用于分析表达数据的分散性。

dispersion_info <- dispFitInfo(cds)

  1. cellPairwiseDistances()

获取细胞之间的成对距离,通常用于聚类分析。

pairwise_distances <- cellPairwiseDistances(cds)

0 人点赞