前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单细胞测序—S4类、seurat、monocle(cds)对象简介

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

原创
作者头像
sheldor没耳朵
修改2024-08-30 14:56:25
2090
修改2024-08-30 14:56:25
举报
文章被收录于专栏:单细胞测序

单细胞测序—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)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单细胞测序—S4类、seurat、monocle(cds)对象简介
    • 1 S4类
      • 1.1 S4类的主要特点
      • 1.2 S4类的定义示例
    • 2 Seurat对象
      • 2.1 Seurat对象的结构
      • 2.2 创建Seurat对象
      • 2.3 Seurat对象的常用操作
      • 2.4 seurat对象中有哪些函数可以访问内部数据
    • 3 monocle(cds)对象
      • 3.1 Monocle对象的结构
      • 3.2 创建Monocle对象
      • 3.3 Monocle对象的常用操作
      • 3.4 cds对象中有哪些函数可以访问内部数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档