← Blog

MoonFinder3:寻找「兼职」长非编码 RNA

如果你做过长非编码 RNA(lncRNA)的研究,一定有过这样的感受:差异表达分析能筛出成千上万个 lncRNA,但要搞清楚它们到底在做什么,完全是另一回事。我在香港中文大学生命科学学院读博期间,反复碰到同一个问题——如果一个 lncRNA 同时参与了多个看似不相关的生物学过程呢?

这个问题促使我开发了 MoonFinder3 和它的算法核心 MPAGE。今天就来聊聊它们的来龙去脉。

什么是”兼职”lncRNA?

“Moonlighting”(兼职)这个概念借自蛋白质生物学——有些蛋白质可以同时行使多种独立功能。我把同样的思路应用到 lncRNA 上:一个”兼职 lncRNA”同时参与多个不同的生物学过程。这些分子特别有趣,因为它们可能是不同信号通路之间的协调枢纽。然而,传统的差异表达分析很难把它们识别出来。

mPAGE 算法

MPAGE(module Pair-wise Analysis of Gene Expression,模块成对基因表达分析)的核心思路其实很简单:如果我们能量化一个 lncRNA 的功能关联有多”多样化”,就能按其兼职潜力进行排序。

具体流程如下:

  1. 构建共表达网络。 使用 WGCNA(加权基因共表达网络分析)从表达矩阵构建基因共表达网络,识别基因模块——即共表达基因的聚类。
  2. 计算功能多样性分数。 对每个 lncRNA,基于辛普森多样性指数(Simpson’s Diversity Index)计算其在关联模块中的多样性得分。与多个功能不同模块关联的 lncRNA 会得到更高的分数。
  3. 评估模块间相似性。 利用 GOSemSim 包,采用 Resnik、Lin、Rel、Jiang 和 Wang 五种方法计算模块富集到的 GO term 之间的语义相似度。这样就能量化两个模块是真的功能不同,还是同一主题的变体。

mircluster 算法

标准 WGCNA 的模块检测有时会产生过于粗粒度的模块。为此,我开发了一种自定义的种子生长算法 mircluster

  • 从高度数节点(枢纽基因)作为种子开始。
  • 迭代添加能提高”协同分数”(synergy score)的边界节点——这个分数平衡了模块内凝聚力和模块间分离度。
  • 移除不再贡献协同分数的节点。
  • 重复直到收敛。

这样得到的模块更紧凑、功能更一致,使后续的多样性评分更有意义。

生存分析与 Shiny 浏览器

识别兼职 lncRNA 只是工作的一半——你还需要知道它们在临床上是否有意义。MoonFinder3 内置了生存分析功能,包括 Kaplan-Meier 曲线和 log-rank 检验,可以直接检验按候选兼职 lncRNA 表达量分层的患者是否有显著不同的预后。

为了让探索更方便,我还做了一个交互式 Shiny 浏览器。加载结果后,你可以点击不同的 lncRNA,可视化它们的模块关联,查看生存曲线——全程不用写一行代码。

一个有趣的历史

到现在想起来还是让我微笑:MoonFinder v1.x 最初是一个天文月相计算器。我当时写它只是作为一个预测月相的小项目。后来开始做 lncRNA 项目时,这个名字实在舍不得丢——毕竟我们也在”发现”与月亮(moonlighting)有关的 RNA。于是 v2.0 成了一次彻底重写,把一个天文小工具变成了生物信息学包。到了 v3,它就进化成了现在这个样子。

MPAGE 与 MoonFinder3 的关系

为了保持模块化,我把工作拆成了两个包:

  • MPAGE 是算法核心。它实现了模块检测、多样性评分和语义相似度计算,作为可复用的 R 函数。你可以把它用于任何基因表达数据,不限于 lncRNA。
  • MoonFinder3 是应用层。它专门针对 lncRNA 生物学封装了 MPAGE,增加了生存分析、Shiny 浏览器和 lncRNA 特有的工具函数。

学到了什么

开发这些包让我学到了很多:

  • R 包工程: 命名空间管理、S3/S4 方法、CRAN/Bioconductor 提交标准,以及写出真正能让人看懂的 vignette。
  • WGCNA 与图算法: 邻接矩阵、TOM(拓扑重叠矩阵)、模块检测——网络生物学的核心工具。
  • 语义相似度: 理解基因本体有向无环图(GO DAG)的结构,以及不同相似度度量(比如 Resnik 与 Wang)如何捕捉功能相关性的不同方面。
  • 生存分析: Kaplan-Meier 估计、Cox 比例风险模型、log-rank 检验——临床基因组学的统计工具箱。
  • Bioconductor 开发: 熟悉 Bioconductor 生态系统,遵循其编码规范,理解不同包之间如何协作。

如果你对自己的数据中的兼职 lncRNA 感兴趣,欢迎访问 GitHub 上的 MoonFinder3MPAGE。反馈和贡献随时欢迎。