← Blog

NanoInsight:纳米孔直接 RNA 测序中的融合基因检测

从 RNA 修饰到融合基因

在构建了用于 RNA 修饰检测的 NanoRNAMod 之后,我被纳米孔直接 RNA 测序(DRS)分析中的另一个挑战所吸引:融合转录本检测

基因融合发生在两个独立的基因异常连接时,产生嵌合转录本。它们具有重要的临床意义——比如慢性粒细胞白血病中的 BCR-ABL,或者肺癌中的 EML4-ALK。准确的融合检测可以直接影响诊断和治疗决策。牛津纳米孔的长读长测序在这方面具有独特优势,因为单条读长就能跨越完整的融合接头,消除了短读长方法中令人困扰的模糊性。

但和 RNA 修饰一样,没有哪种工具每次都能完全正确。不同的融合检测工具使用截然不同的策略,各有各的失败模式。所以我构建了 NanoInsight——一个 Snakemake 工作流,整合多种融合检测工具,通过共识来互相验证。

工具及其策略

NanoInsight 整合了四种融合检测工具,每种都采用不同的算法思路:

JAFFAL 采用双重比对策略:将读长同时比对到转录组和基因组。转录组比对捕获已知的融合亚型,而基因组比对帮助识别新的断裂点。这种双重方法很全面,但计算量较大。

Genion 使用基于 k-mer 的方法。它不先做完整比对,而是将读长拆分为 k-mer,然后搜索映射到不同基因的 k-mer。这使得它速度很快,尤其擅长检测完整比对器可能因复杂接头结构而遗漏的融合。

LongGF 采用基于图的方法。它从读长到基因组的映射构建比对图,并识别连接不同基因组位点的边。这种方法在处理复杂重排时表现出色。

Aeron 则提供了又一种基于比对的策略,作为额外的独立证据来源。

核心洞察是:这些工具并非冗余的。一种方法遗漏的融合可能会被另一种方法高置信度地检测到。同时运行所有工具并寻找重叠,可以大幅提高结果的可信度。

工具特异性比对的重要性

构建 NanoInsight 最棘手的部分之一是处理比对步骤。每种融合检测工具期望的输入格式略有不同,且在特定的 Minimap2 参数下效果最佳。例如:

# JAFFAL 需要转录组和基因组双重比对
jaffal:
  transcriptome_align:
    minimap2_params: "-ax splice -uf -k14"
  genome_align:
    minimap2_params: "-ax splice"

# Genion 使用特定的灵敏度设置进行基因组比对
genion:
  minimap2_params: "-ax splice -k14 --secondary=no"

# LongGF 偏好更宽松的比对以捕获分裂读长
longgf:
  minimap2_params: "-ax splice -k14 -G 200k"

NanoInsight 没有强制所有工具共享同一次比对,而是为每种工具运行工具特异性的 Minimap2 比对。这意味着每种工具都能获得针对其算法优化的输入,显著提高了检测准确性。是的,这意味着更多的计算量,但结果的改善是值得的。

容器化保障可重复性

吸取了 NanoRNAMod 的经验,NanoInsight 使用每个工具独立的 Docker 容器而非 conda 环境。每种融合检测工具在预装所有依赖的独立容器中运行:

# 在 Snakemake 规则中
rule run_jaffal:
    input:
        bam="results/alignment/jaffal/{sample}.bam",
        reference="reference/genome.fa"
    output:
        dir="results/jaffal/{sample}/"
    container:
        "docker://loganylchen/jaffal:latest"
    shell:
        """
        python /opt/jaffal/run_jaffal.py {input.bam} {input.reference} {output.dir}
        """

Docker 容器比 conda 环境提供更强的隔离性,确保流水线在任何主机系统上都产生一致的结果。这对于临床应用尤为重要——在那些场景中,可重复性不是可选项。

参考基因组过滤

纳米孔 DRS 产生的读长来自多聚腺苷酸化转录组,这意味着绝大多数读长映射到相对较少数的染色体上。对整个基因组运行比对和融合检测会浪费大量计算资源。NanoInsight 包含了参考基因组过滤步骤,只提取指定的 contigs:

# 只在分析参考中包含这些染色体
reference:
  genome: "reference/GRCh38_full.fa"
  contigs: ["chr1", "chr2", "chr3", "chr4", "chr5",
            "chr6", "chr7", "chr8", "chr9", "chr10",
            "chr11", "chr12", "chr13", "chr14", "chr15",
            "chr16", "chr17", "chr18", "chr19", "chr20",
            "chr21", "chr22", "chrX", "chrY", "chrM"]

这样可以排除未定位的 contigs 和替代单倍型,减小参考序列的大小,加快流水线中每个比对步骤的速度。

我学到了什么

构建 NanoInsight 在多个方向上拓展了我的能力:

融合基因生物学。 我必须深入理解基因融合是如何产生的(染色体重排、反式剪接、通读转录),以及什么使一个融合具有临床意义而非技术假象。

长读长融合检测算法。 每种工具的论文都像一堂算法设计小课。理解 k-mer 索引、剪接图构建和分裂读长分析,让我对计算基因组学有了更丰富的认识。

多工具共识设计。 设计一个让多种工具互相验证的系统,让我学到了基于投票的方法、置信度评分,以及如何聚合具有不同错误特征的多种方法的结果。共识几乎总是比任何单一检测器更可靠。

容器化工作流设计。 从 conda 环境迁移到 Docker 容器,让我了解了容器最佳实践、镜像优化,以及工作流设计中可重复性与灵活性之间的权衡。

更大的图景

连接 NanoRNAMod 和 NanoInsight 有一条哲学线索。在计算生物学中,我们常常试图为某个任务寻找”最好”的工具。但生物学是复杂的,算法有偏差,真实数据很少符合论文中干净的基准测试。多工具方法承认了这个现实:与其押注一匹马,不如同时跑几匹然后寻找共识。

如果你正在从纳米孔 DRS 数据中分析融合转录本,欢迎试用 NanoInsight。一如既往,欢迎反馈和贡献。