专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
BioArt  ·  Nat Commun | ... ·  昨天  
生物学霸  ·  困惑:省自然与国自然之间相互查重吗 ·  2 天前  
生物制品圈  ·  我问DeepSeek:2025年生物药领域人 ... ·  6 天前  
51好读  ›  专栏  ›  生信菜鸟团

单细胞Seurat流程与步骤详解

生信菜鸟团  · 公众号  · 生物  · 2024-12-28 09:00

正文

开始之前我们先看一下标准流程

# 加载必要的库
library(Seurat)
library(harmony)

# 数据预处理与分析
subset_data %
Seurat::NormalizeData(verbose = FALSE) %>% # 归一化数据
FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>% # 选择2000个变异基因
ScaleData(verbose = FALSE) %>% # 数据缩放
RunPCA(npcs = 50, verbose = FALSE) # 主成分分析(PCA)

# Harmony批次效应校正
subset_data % RunHarmony("stim", plot_convergence = TRUE)

# 获取Harmony嵌入数据
harmony_embeddings
# 降维和可视化
dims = 1:30
subset_data %
RunUMAP(reduction = "harmony", dims = dims) %>% # 使用Harmony嵌入做UMAP
RunTSNE(reduction = "harmony", dims = dims) %>% # 使用Harmony嵌入做t-SNE
FindNeighbors(reduction = "harmony", dims = dims) %>%
Findclusters(reduction = "harmony", dims = dims)
# 可视化结果
DimPlot(subset_data, reduction = "umap") # UMAP可视化
DimPlot(subset_data, reduction = "tsne") # t-SNE可视化

# 如果你已经定义了细胞类型,可以用以下方式展示不同类型的细胞
DimPlot(subset_data, group.by = "cell_type") # 基于已有的细胞类型标签绘制图


详细解释

1. 数据归一化 ( NormalizeData )

subset_data = subset_data %>%
Seurat::NormalizeData(verbose = FALSE)

  • 目的 :数据归一化的目的是将每个细胞的基因表达值调整到同一尺度,消除测序深度(library size)对表达数据的影响。通常,基因表达数据会进行对数变换,以便更好地比较各个基因的表达水平。

  • 使用的输入数据 :它使用的是 subset_data 对象中的原始基因表达矩阵(通常是原始的 RNA counts)。

  • 结果 NormalizeData 函数会创建一个新的归一化数据集,结果存储在 subset_data 中。在 verbose = FALSE 时,函数不会输出过多的运行信息。



2. 选择可变基因 ( FindVariableFeatures )

subset_data = subset_data %>%
FindVariableFeatures(selection.method = "vst", nfeatures = 2000)

  • 目的 :选择在不同细胞之间变异性最大的基因,通常选择前 2000 个变异性最大的基因。这些基因常被用于后续分析,如降维和聚类。

  • 使用的输入数据 它使用归一化后的数据(即上一步 NormalizeData 处理过的数据),通过计算每个基因在所有细胞中的变异性来选择最具代表性的基因。

  • 结果 FindVariableFeatures 通过计算基因的变异性,选出变异性最大的 2000 个基因,并将这些基因的信息存储在 subset_data @meta.data 中。



3. 数据缩放 ( ScaleData )

subset_data = subset_data %>%
ScaleData(verbose = FALSE)

  • 目的 :将选择的变异基因数据进行标准化,使得每个基因的均值为 0,标准差为 1。这样可以确保每个基因在降维(如 PCA)时具有相同的贡献,不会因为基因的表达水平差异过大而影响结果。

  • 使用的输入数据 :它使用的是上一步选择的变异基因数据,通常是经过归一化的数据。

  • 结果 ScaleData 处理后,每个基因的数据被缩放,结果存储在 subset_data 对象中。



4. 主成分分析 (PCA) ( RunPCA )

subset_data = subset_data %>%
RunPCA(npcs = 50, verbose = FALSE)

  • 目的 :主成分分析(PCA)是降维的一种方法,它通过计算数据中的主成分(PCs)来减少特征空间的维度。在这里,我们选择了前 50 个主成分(npcs = 50)。

  • 使用的输入数据 它使用的是缩放后的数据(即 ScaleData 处理过的数据)。PCA 会基于这些数据计算出每个细胞在每个主成分上的投影。

  • 结果 :PCA 结果被存储在 subset_data 对象中,作为一个新的维度数据,可以用于后续的降维和可视化步骤。



5. 绘制肘部图 ( ElbowPlot )

ElbowPlot(subset_data, ndims = 50)

  • 目的 :肘部图用来帮助选择适当的主成分数目,通常选择肘部(即误差变化急剧减缓的地方)之前的主成分数量作为分析的维度数。

  • 使用的输入数据 它使用的是前一步的 PCA 结果(即 RunPCA 生成的主成分数据)。

  • 结果 :肘部图会展示不同主成分数与方差解释度的关系,帮助你判断哪些主成分对数据变异贡献较大,通常选择那些方差解释度较高的主成分。



6. 绘制小提琴图 ( VlnPlot )

VlnPlot(subset_data, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)

  • 目的 :通过小提琴图(violin plot)展示不同细胞的基因数目(nFeature_RNA)、转录本数目(nCount_RNA)以及线粒体基因的百分比(percent.mt)。这些指标常用于质量控制,帮助识别低质量细胞或过度激活的细胞。

  • 使用的输入数据 它使用 subset_data 对象中的元数据( @meta.data )以及基因表达数据。

  • 结果 :图形会显示这些不同特征在细胞中的分布情况,帮助你了解数据的质量。



7. 数据整合(Harmony)


library('harmony')
subset_data %
RunHarmony("stim", plot_convergence = TRUE)

  • 目的 :使用 Harmony 方法整合批次效应(batch effects)或条件效应(如刺激 vs. 对照),使得整合后的数据不受这些效应的干扰。 stim 是数据中的一个元数据列,用来标记不同的实验条件(如实验组 vs. 对照组)。

  • 使用的输入数据 它默认使用的是 subset_data 对象中的 PCA 结果(即 RunPCA 或其他降维方法的结果)

  • 结果 RunHarmony 会基于所指定的元数据(在这里是 stim )来消除批次效应或实验条件效应,生成新的“和谐”嵌入(harmony embeddings),它们存储在 subset_data 对象中。



8. 降维与可视化(UMAP 和 t-SNE)


subset_data %
RunUMAP(reduction = "harmony", dims = dims) %>%
RunTSNE(reduction = "harmony", dims = dims) %>%
FindNeighbors(reduction = "harmony", dims = dims)

  • 目的 :使用 UMAP 和 t-SNE 进行非线性降维可视化。UMAP 和 t-SNE 都是常用于高维数据可视化的技术,通过将数据从高维空间降到 2D 或 3D 空间,便于观察细胞群体的分布。 FindNeighbors 则用于根据指定的维度(如前 30 个 Harmony 维度)计算细胞之间的相似性,生成邻居图。

  • 使用的输入数据 RunUMAP、 RunTSNE使用的是 Harmony 处理过的数据(即 RunHarmony 的结果),并基于指定的维度( dims )进行降维。

  • 结果 :生成的 UMAP 和 t-SNE 图将存储在 subset_data 对象中,帮助你直观地查看细胞在低维空间的分布。

9. 细胞聚类 ( FindClusters )

subset_data = FindClusters(subset_data, resolution = 0.3)

  • 目的 :进行细胞聚类。聚类方法(如 Louvain 或 Leiden)将细胞分组,目的是识别具有相似基因表达模式的细胞群体。







请到「今天看啥」查看全文