
# 加载必要的库
library(Seurat)
library(harmony)
# 数据预处理与分析
subset_data <- 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 <- subset_data %>% RunHarmony("stim", plot_convergence = TRUE)
# 获取Harmony嵌入数据
harmony_embeddings <- Embeddings(subset_data, 'harmony')
# 降维和可视化
dims = 1:30
subset_data <- 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") # 基于已有的细胞类型标签绘制图
NormalizeData)subset_data = subset_data %>%
Seurat::NormalizeData(verbose = FALSE)subset_data 对象中的原始基因表达矩阵(通常是原始的 RNA counts)。NormalizeData 函数会创建一个新的归一化数据集,结果存储在 subset_data 中。在 verbose = FALSE 时,函数不会输出过多的运行信息。
FindVariableFeatures)subset_data = subset_data %>%
FindVariableFeatures(selection.method = "vst", nfeatures = 2000)NormalizeData 处理过的数据),通过计算每个基因在所有细胞中的变异性来选择最具代表性的基因。FindVariableFeatures 通过计算基因的变异性,选出变异性最大的 2000 个基因,并将这些基因的信息存储在 subset_data 的 @meta.data 中。
ScaleData)subset_data = subset_data %>%
ScaleData(verbose = FALSE)ScaleData 处理后,每个基因的数据被缩放,结果存储在 subset_data 对象中。
RunPCA)subset_data = subset_data %>%
RunPCA(npcs = 50, verbose = FALSE)ScaleData 处理过的数据)。PCA 会基于这些数据计算出每个细胞在每个主成分上的投影。subset_data 对象中,作为一个新的维度数据,可以用于后续的降维和可视化步骤。
ElbowPlot)ElbowPlot(subset_data, ndims = 50)RunPCA 生成的主成分数据)。VlnPlot)VlnPlot(subset_data, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)subset_data 对象中的元数据(@meta.data)以及基因表达数据。
library('harmony')
subset_data <- subset_data %>%
RunHarmony("stim", plot_convergence = TRUE)stim 是数据中的一个元数据列,用来标记不同的实验条件(如实验组 vs. 对照组)。subset_data 对象中的 PCA 结果(即 RunPCA 或其他降维方法的结果)。RunHarmony 会基于所指定的元数据(在这里是 stim)来消除批次效应或实验条件效应,生成新的“和谐”嵌入(harmony embeddings),它们存储在 subset_data 对象中。
subset_data <- subset_data %>%
RunUMAP(reduction = "harmony", dims = dims) %>%
RunTSNE(reduction = "harmony", dims = dims) %>%
FindNeighbors(reduction = "harmony", dims = dims)FindNeighbors 则用于根据指定的维度(如前 30 个 Harmony 维度)计算细胞之间的相似性,生成邻居图。RunHarmony 的结果),并基于指定的维度(dims)进行降维。subset_data 对象中,帮助你直观地查看细胞在低维空间的分布。FindClusters)subset_data = FindClusters(subset_data, resolution = 0.3)FindNeighbors 生成的细胞邻接图以及降维后的数据。subset_data@meta.data 中的 seurat_clusters 列。注意:
FindNeighbors 和 FindClusters 主要是用来进行细胞聚类的,它们会基于数据的相似性计算细胞之间的邻近关系,并通过聚类算法(如 Louvain 或 Leiden 方法)将细胞分成不同的群体。这对于数据的探索和分析非常重要,尤其是当你没有预定义细胞类型时。
但是,如果你已经定义好了细胞类型,并且不打算根据数据的相似性进行自动聚类,那么确实不需要执行 FindNeighbors 和 FindClusters。在这种情况下,你可以跳过这两步,只使用你定义好的细胞类型标签来进行后续的分析和可视化。
FindNeighbors:计算细胞之间的相似性(通常使用主成分分析(PCA)结果)来为后续的聚类步骤提供邻近关系。如果你已经有了细胞类型标签,这一步不是必需的。FindClusters:基于 FindNeighbors 计算的邻近关系进行细胞聚类,将相似的细胞分为同一类。如果你已经定义了细胞类型,则不需要根据数据进行重新聚类。假设你已经有了细胞类型信息,并且想直接画出基于这些细胞类型的 UMAP 图:
# 假设细胞类型已存储在 subset_data@meta.data$cell_type 中
UMAP_plot <- DimPlot(subset_data, group.by = "cell_type")这样,你就可以在 UMAP 图中看到基于已知细胞类型的分布,而无需运行 FindNeighbors 和 FindClusters。
总之,如果你已经有了细胞类型的信息,并且不需要基于数据进行新的聚类,FindNeighbors 和 FindClusters 这两步可以省略。
本文代码块完成了从数据归一化、选择变异基因、PCA降维到批次效应校正和细胞聚类、ump和tsne的完整流程。每一步都在前一步的结果基础上进行,确保数据经过预处理和整合,最终得到可用于细胞分群、降维可视化的高质量数据。