1. 为什么我们需要联合分析:从“起点”到“路径”的完整拼图
做单细胞转录组分析的朋友,尤其是研究发育、分化或者疾病进程的,肯定都遇到过这样的困惑:我手里的这群细胞,它们到底谁更“年轻”、更有“潜力”?它们又是沿着怎样的路径一步步变成现在这个样子的?这两个问题,其实指向了发育轨迹分析的两个核心——起点和路径。
过去,我们可能得用不同的工具分开解决这两个问题,结果常常对不上,让人头疼。比如,你用A工具找到了一个看似很有潜能的细胞群作为起点,但放到B工具的轨迹图里,它却不一定在轨迹的源头。这就好比你要画一张从家到公司的路线图,却连家(起点)在哪都确定不了,或者画出来的路线七拐八绕,根本不符合常理。
我自己在分析T细胞发育数据时就踩过这个坑。当时只用了一种轨迹推断工具,结果发现好几个细胞亚群看起来都像起点,轨迹分支也特别复杂,根本没法确定真正的分化主线。后来我才明白,单靠一种工具,很难同时精准地定位发育起点和还原分化路径。
这就是为什么我们需要把 CytoTRACE2 和 monocle3 这两个“神器”结合起来用。你可以把它们想象成绘制细胞命运地图的“黄金搭档”:
- CytoTRACE2 像一位“潜能鉴定师”。它不关心细胞具体怎么走,只专注于回答一个根本问题:这群细胞里,谁的发育潜能最高?它通过一个深度学习模型,给每个细胞打一个从0(完全分化)到1(全能)的“潜能分数”,还能把细胞分成“全能”、“多能”、“分化”等类别。这相当于直接在地图上,用醒目的标记把“起点区域”给你圈出来了。
- monocle3 则是一位“路径规划师”。它擅长基于细胞之间的基因表达相似性,用图论的方法构建出一张细胞状态的“关系网络图”,然后推断出最有可能的演变轨迹,并给每个细胞分配一个“伪时间”值,量化它在这个路径上的位置。但它自己并不知道这个轨迹该从哪开始,需要你告诉它起点。
所以,联合分析的逻辑就非常清晰了:先用 CytoTRACE2 客观、数据驱动地找到那个潜能最高的细胞群,把它作为发育的“根”;然后把这个“根”的信息喂给 monocle3,让它从这个确定的起点出发,去构建和可视化整个分化轨迹。这样得到的图谱,既有可靠的生物学起点,又有合理的路径推断,说服力自然就上了一个台阶。接下来,我就手把手带你走一遍这个联合分析的实战流程,里面有很多我摸索出来的细节和避坑指南。
2. 实战准备:数据与环境搭建
工欲善其事,必先利其器。在开始跑代码之前,确保你的分析环境和数据都准备妥当,能避免一大半的报错。这里我假设你已经有了一个经过标准预处理(质控、归一化、降维、聚类、注释)的 Seurat 对象,这是我们分析的起点。
2.1 软件包安装与加载
首先,这两个工具都不是CRAN上的常规包,需要从GitHub或Bioconductor安装。我强烈建议在一个新的R会话中操作,或者用 renv、conda 管理环境,避免包版本冲突。
# 1. 安装 CytoTRACE2 (从 GitHub)
# 可能需要先安装一些依赖
if (!require("devtools")) install.packages("devtools")
if (!require("BiocManager")) install.packages("BiocManager")
BiocManager::install(c("BiocParallel", "SingleCellExperiment", "SummarizedExperiment"))
devtools::install_github("digitalcytometry/cytotrace2")
# 2. 安装 monocle3 (从 Bioconductor)
BiocManager::install("monocle3")
# 3. 加载所有需要的包
library(tidyverse)
library(Seurat)
library(CytoTRACE2)
library(monocle3)
library(paletteer) # 用于好看的配色
library(BiocParallel) # 并行计算加速
library(ggplot2)
# 设置并行,大幅提升计算速度,尤其是对于大型数据集
register(MulticoreParam(workers = 8, progressbar = TRUE)) # 根据你的电脑核心数调整
安装过程可能会遇到一些依赖问题,比如 glmnet、RcppAnnoy 等,按照提示安装即可。如果 monocle3 安装缓慢,可以尝试设置清华的 Bioc 镜像。
2.2 数据导入与检查
假设你的 Seurat 对象已经保存为 .qs 或 .rds 文件。这里我用 .qs 格式,因为它读写更快。
# 清空环境,避免旧变量干扰
rm(list=ls())
# 加载自定义函数和颜色(如果有的话,这不是必须的)
# source('your_script_dir/lib.R')
# source('your_script_dir/mycolors.R')
# 读取最终的 Seurat 对象
sub_data <- qs::qread("./your_data_path/seurat_final.qs") # 请替换为你的实际路径
# 非常重要的一步:检查你的数据
# 查看细胞注释情况
DimPlot(sub_data, pt.size = 0.8, group.by = "celltype", label = TRUE, repel = TRUE)
table(sub_data$celltype) # 查看各细胞类型的数量
# 确认数据矩阵
# CytoTRACE2 和 monocle3 都可以用 counts 或 normalized data,但通常 counts 更稳健
# 确保你的 Seurat 对象里有 "RNA" assay 和 counts 矩阵
DefaultAssay(sub_data) <- "RNA"
关键检查点:确保你的 celltype 列存在于 sub_data@meta.data 中,并且是字符型或因子型。这是后续注释可视化的基础。如果细

3435

被折叠的 条评论
为什么被折叠?



