1. 课程简介与预备知识
大家好,我是这门课的主讲人。一个在单细胞测序数据里摸爬滚打了快十年的老程序员。今天咱们开始《Monocle拟时序轨迹图解读实战》的第一章。
说白了,这门课就是教你怎么用 Monocle 2 这个工具,去解析单细胞数据里的发育轨迹。你想想看,细胞不是一成不变的,它们会分化、会成熟、会转变状态。传统的聚类分析只能告诉你「有哪些细胞类型」,但 Monocle 能告诉你「这些细胞是怎么从A变成B的」。
我个人习惯把拟时序分析比作一部电影的叙事线——聚类是剧照,轨迹是剧情。咱们这门课,就是教你如何把剧照串成一部完整的电影。
1.1 这门课到底讲什么
课程目标其实很直接:让你拿到单细胞表达矩阵后,能独立完成 Monocle 的拟时序分析,并且能看懂、能解读那张漂亮的轨迹图。
具体学完你能做到什么?
- 跑通流程:从表达矩阵到轨迹图,一条命令接一条命令,不卡壳。
- 参数调优:知道什么时候用 DDRTree,什么时候用 SimplePPT,不会盲目抄默认值。
- 图表解读:分支点、伪时间、基因表达变化,每个视觉元素都能讲出生物学故事。
- 避坑实战:我会把我在真实项目里踩过的坑一一告诉你,省下你几个月的时间。
一句话总结:这不是理论课,这是「你坐在我旁边看我操作」的实战课。
1.2 你需要提前掌握什么
嗯,这里要实说。如果你完全零基础,直接上手 Monocle 会比较吃力。我并不要求你是大神,但下面这几样东西,你得有个底子。
| 技能 | 具体要求 | 我给的建议 |
|---|---|---|
| R 语言基础 | 会读取数据框、会用 ggplot2 画散点图、会写简单的 for 循环 |
其实 R 语言入门不难,你只要掌握数据框操作、看帮助文档的能力就行。我自己经常用 dplyr 和 ggplot2,你熟悉这两个包会有帮助。 |
| 单细胞基础 | 理解表达矩阵、UMI、降维(PCA/tSNE/UMAP)、聚类这些核心概念 | 你如果做过 Seurat 的流程,理解过 PCA、tSNE、UMAP 降维,那基本就够了。我在教学时发现,很多同学对「细胞聚类」和「marker 基因」概念不熟,后面分析轨迹时会迷糊。 |
| 生物学背景(可选) | 了解细胞分化、发育生物学的基本概念 | 这个不是硬性要求,但如果你知道「造血干细胞分化为各种血细胞」这类过程,看轨迹图时会更有感觉。 |
一个小提示:如果你感觉自己 R 语言基础不够,别慌。课程里我会提供完整的可运行代码,你跟着敲就行。但如果你想深入理解每一个参数的意义,提前补补 R 的数据处理知识会事半功倍。
我曾经带过一个学生,R 语言只会读 CSV 文件,硬是跟着课程跑了三遍才把轨迹图画出来。他说最痛苦的不是代码报错,而是看不懂 Monocle 输出的数据结构。所以,我建议你先花一周时间温习一下 dplyr 的基本操作,比如 filter()、select()、mutate() 这些。
1.3 学习路线图
这个路线图是我自己摸索出来的。坦白说,当初我自己学 Monocle 的时候走了不少弯路。所以我把这些经验整理成了一张图,你看看这 30 章是怎么组织的。
你可能注意到了,这个路线图不是一条直线走到底的。实际上,从「预处理」到「降维与排序」,中间有个明显的垂直跳转。为什么这么设计?
因为预处理做不好,后面的降维结果一定是一团糟。我见过太多人上来就跑 Monocle 的默认参数,结果轨迹图是一团乱麻。所以我把预处理单独拉出来作为一个阶段,强调数据清洗和标准化的重要性。
另外,我把「项目实战」放在了最后 4 章。这 4 章我会用 3 个真实的单细胞数据集,现场演示从零到一的完整流程。其中包括一个来自我合作项目中的造血干细胞分化数据。嗯,那段代码我调试了整整一个周末才跑通。
1.4 知识体系总览
把上面的路线图再细化一下,看看每部分具体涵盖什么内容:
| 阶段 | 核心主题 | 你会获得的实战技能 |
|---|---|---|
| 基础准备(1-4) | Monocle 架构概述、安装配置、表达矩阵格式 | 正确安装 Monocle 2、理解 CellDataSet 对象 |
| 数据加载(5-8) | 从 10X/h5/CSV 加载数据、创建 CellDataSet | 处理不同来源的表达矩阵、元数据整合 |
| 预处理(9-12) | 质控、标准化、基因筛选、批次校正 | 去除低质量细胞、选择高变基因、处理批次效应 |
| 降维与排序(13-16) | DDRTree、PCA 初始化、细胞排序 | 理解降维原理、手动调整排序起点 |
| 轨迹构建(17-21) | 构建主树、分支检测、BEAM 分析 | 识别分支点、提取分支特异性基因 |
| 图表解读(22-26) | 伪时间热图、基因表达动态图、分支图 | 读懂轨迹图的生物学含义 |
| 项目实战(27-30) | 三个真实数据集完整分析 | 独立完成从原始数据到发表级图形的流程 |
⚠️ 一个重要的提醒:Monocle 2 和 Monocle 3 的架构差异很大。本课程全部基于 Monocle 2(DDRTree 算法)。Monocle 3 用的 UMAP + 图学习路径不同,请不要混淆。我后续可能会加开 Monocle 3 的专题,但这一轮我们先把 2 打扎实。
我个人习惯在开始一个项目前,先画一张这样的知识地图。你想想看,如果你不知道第 17 章的内容和第 5 章有什么关联,学习时很容易迷失方向。这张表就是你的导航仪。
1.5 整体流程
最后,我们用代码的视角看一看 Monocle 分析的完整流程。你会发现,整个过程长得像一个管线,每一步输出都是下一步的输入。
# ========== 整体流程大纲 ==========
# 步骤 1:加载数据
expr_matrix <- read.csv("expression_data.csv")
pd <- data.frame(cell_id = colnames(expr_matrix))
fd <- data.frame(gene_id = rownames(expr_matrix))
# 步骤 2:创建 CellDataSet
library(monocle)
cds <- newCellDataSet(expr_matrix, phenoData = pd, featureData = fd)
# 步骤 3:预处理
cds <- estimateSizeFactors(cds)
cds <- estimateDispersions(cds)
cds <- detectGenes(cds, min_expr = 0.1)
# 步骤 4:选择高变基因
disp_table <- dispersionTable(cds)
ordering_genes <- subset(disp_table, mean_expression >= 0.5 & dispersion_empirical >= 1 * dispersion_fit)$gene_id
cds <- setOrderingFilter(cds, ordering_genes)
# 步骤 5:降维
cds <- reduceDimension(cds, max_components = 2, reduction_method = "DDRTree")
# 步骤 6:排序(构建轨迹)
cds <- orderCells(cds)
# 步骤 7:可视化
plot_cell_trajectory(cds, color_by = "Pseudotime")
# 步骤 8:基因表达动态分析
plot_genes_in_pseudotime(cds, gene_short_name = c("GeneA", "GeneB"))
这段代码你现在不需要完全理解。我只是想让你看看,整个流程的骨架就是这 8 步。我自己第一次跑通这个流程时,花了整整一天。因为中间有一个参数写错了,降维后所有细胞重叠在一起。后来排查出来,是 min_expr 参数设得太低,把垃圾基因也算进去了。