1. 从热图到模块:理解Monocle2拟时分析的核心一步
做单细胞拟时分析,最让人兴奋也最让人头疼的,大概就是看到那一张张漂亮的拟时热图之后了。热图上,成百上千个基因按照它们在伪时间轴上的表达模式,被分成了几个色彩斑斓的模块。你看着这些模块,心里明白它们各自代表了一种独特的“命运转变”或“功能切换”,但具体是什么转变?切换了什么功能?这就好像拿到了一张藏宝图,却看不懂上面的标记。
我自己刚开始用Monocle2的时候,就卡在这个环节很久。plot_pseudotime_heatmap 函数跑出来,图是挺好看,num_clusters 参数设成4,基因就自动归为4个模块。可然后呢?这4个模块里的基因到底在干什么?总不能对着基因列表一个个去查文献吧,那效率太低了。这时候,基因本体论富集分析就成了那把关键的“翻译器”。它的作用,就是把一长串冷冰冰的基因ID,翻译成我们生物学家能听懂的“语言”,比如“免疫应答激活”、“细胞外基质组织”、“氧化磷酸化”等等。这样一来,抽象的基因表达时序模式,就转化为了具体、可解释的生物学功能主题。
所以,我们今天要聊的“Monocle2拟时轨迹基因模块的GO富集解析”,本质上是一个数据解读的流水线。它的起点是你已经构建好的Monocle2对象和差异表达基因列表,核心动作是从热图对象中“挖出”聚类好的基因模块,终点则是得到一份清晰的功能富集报告,甚至是一张整合了热图与通路结果的专业级展示图。这个过程,是把计算分析的结果,真正落到生物学洞察上的必经之路。无论你是想发现细胞分化的关键驱动通路,还是想验证某个信号通路在疾病进展中的作用,这套方法都能给你提供扎实的证据。
2. 实战准备:获取并处理拟时差异基因
在开始“翻译”基因模块之前,我们得先有值得翻译的“原材料”——也就是那些随着伪时间变化而显著表达的基因。这一步是基础,但细节决定成败。很多朋友在这一步容易出问题,要么是基因太多分析不动,要么是基因太少没有意义。
首先,我们需要从Monocle2对象中调用 differentialGeneTest 函数。这个函数的核心是拟合一个模型,检验每个基因的表达量是否与伪时间(Pseudotime)显著相关。我常用的模型公式是 ~sm.ns(Pseudotime),这里的 sm.ns() 代表平滑样条,它能捕捉基因表达随时间的非线性变化,这比简单的线性模型更适合生物学过程。记得加上 cores 参数调用多核并行,能节省大量时间,尤其是当你的基因数量上万的时候。跑完这个测试,你会得到一个包含 pval、qval(校正后的p值)等统计量的数据框。
# 加载必要的库
library(monocle)
library(dplyr)
# 假设你的Monocle2对象已经构建好,命名为 `my_cds`
# 进行拟时差异表达分析
diff_test_res <- differentialGeneTest(
my_cds,
fullModelFormulaStr = "~sm.ns(Pseudotime)",
cores = 4 # 根据你的电脑核心数调整
)
# 保存结果,这是个费时的步骤,存下来避免重复计算
write.csv(diff_test_res, file = "pseudotime_diff_genes.csv", row.names = FALSE)
拿到结果后,不能直接全盘照收,必须进行严格的筛选。我通常会设定两个门槛:统计显著性和表达普遍性。qval < 0.01 或 0.05 是常见的显著性阈值,这保证了我们关注的基因变化不是随机噪声。但光有这个还不够,一个基因即使q值再小,如果只在极少数细胞中表达,它的生物学意义也可能有限。所以我会加上 num_cells_expressed > 某个值 这个条件,比如在我上次分析的小鼠数据里,我用了 > 100,这意味着这个基因至少在100个细胞中被检测到表达,排除了那些只在零星细胞中出现的“边缘基因”。<
231




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



