software

STAR-Fusion 结果处理实跑,FFPM 的分子、分母与阈值怎样影响候选名单

作者:发布于 2026-11-15约 11 分钟阅读
同样的原始支持,FFPM 差五倍。官方结果脚本实跑 · 输入计数与分母均为人工设定。1 / 0.2,原始数相同,估计数不同,计算脚本读取 est_J 和 est_S。4 → 1,分母翻倍,名单改变,同一候选表在演示阈值下的结果。0.19992,边界还要检查精度,分步保留小数后得到 0.2 并通过。

两个融合候选的原始支持数完全一样,最终的标准化数值却相差五倍,是否说明程序算错了。另一条候选没有分裂读段,只凭跨接片段就通过了某个数值阈值,是否说明它已经被证实。这两类问题经常出现在结果整理阶段,根源是把不同字段、不同过滤阶段和不同证据强度混在了一起。

本次安装 STAR-Fusion 1.15.1 的官方结果处理脚本,在明确虚构的候选表上运行标准化计算和阈值过滤。重点是理解结果处理的算术与边界。我们没有进行真实读段比对,没有建立参考库,没有运行融合发现、歧义分配或 FusionInspector,也没有把脚本测试称为完整融合检测实测。

同样的原始支持,FFPM 差五倍。官方结果脚本实跑 · 输入计数与分母均为人工设定。1 / 0.2,原始数相同,估计数不同,计算脚本读取 est_J 和 est_S。4 → 1,分母翻倍,名单改变,同一候选表在演示阈值下的结果。0.19992,边界还要检查精度,分步保留小数后得到 0.2 并通过。
官方结果脚本实跑 · 输入计数与分母均为人工设定

先分清完整流程和一个结果字段

STAR-Fusion 的完整工作涉及比对、候选生成、注释与过滤。它既可以从读段文件开始,也可以接收已有的嵌合连接文件,但后者仍需要与流程匹配的参考资源。官方还要求相应比对输出带有计算所需的统计信息。入口与参数说明见 STAR-Fusion 官方工作流程。

对使用者而言,最需要避免的是把某个后处理脚本的成功当成整条流程成功。能够给一张表加上标准化数字,只能证明这张表被当前脚本处理了,不能证明表中的候选来自真实比对,更不能证明候选通过了全部上游过滤。实际项目应记录每个结果文件的生成步骤,而不是仅凭文件名里带有最终结果字样来判断。

本实验选择较小的切入点,是为了把输入与输出之间的关系完全展示出来。所有候选名称都是人工命名,计数和文库分母也是人为设定。这样可以主动改变单个条件,检查脚本到底读取哪一列、如何舍入以及怎样比较阈值。实验结论适用于这些已执行的处理步骤,不能外推为某个版本的整体灵敏度评价。

五条候选故意安排了不同问题

输入表保留原始分裂支持、原始跨接支持,以及两种估计支持。前两列名为 JunctionReadCount 和 SpanningFragCount,后两列为 est_J 和 est_S。估计值在本实验中直接手工指定,没有通过模型拟合得到。

候选代号 原始分裂/跨接 估计分裂/跨接 用来检查的问题
甲 8/12 8/12 两种口径一致
乙 8/12 2.5/1.5 原始数相同,估计数不同
丙 0/6 0/6 缺少分裂证据
丁 1/0 1/0 支持很少
戊 2/2 1.9992/1.9992 接近阈值的舍入

甲和乙是最重要的一对对照。若直接把原始两列相加,两者都是二十。若相加估计两列,则分别是二十和四。文章中的差异来自这个人工设定,不是软件自动识别出了哪个候选存在歧义。这样的说明很重要,否则读者会误以为我们已经验证了模型分配过程。

丙用于检查数值筛选与证据类型是否被混淆。一个仅检查标准化数值的脚本,并不会因为某类证据缺失就自动补上另一套判断规则。戊则用于检查接近边界时输出精度的影响。把这些特殊输入放在同一个小表里,可以比只检查一条普通候选更快发现使用上的误解。

实际计算读的是估计支持列

运行的第一个官方脚本是 incorporate_FFPM_into_final_report.pl。在固定版本的源码中,它读取估计分裂与估计跨接两列,各自换算为每百万片段的数值,再相加写出。它并没有直接把那两列原始支持数相加。具体行为可核对 固定版本计算脚本。

先忽略保留小数位的细节,可以把本实验中的换算理解为,估计支持合计除以设定的文库片段总数,再乘以一百万。它描述的是相对于分母的支持强度,不是概率。数值大于一不矛盾,数值为零点二也不能读成候选为真的概率是百分之二十。

在真实结果审阅中,首先应追问估计支持从哪里来,分母从哪里来。只有把这两个来源解释清楚,数值才具有可比较的含义。把其他软件的一列支持数改名成这里需要的列名,虽然可能让脚本运行,却不代表两种定义相同。尤其是跨接片段、单端读段和分配后的支持权重,不能只因为都看起来像数量就混用。

分母翻倍,候选名单为什么缩短

我们给同一张候选表分别传入两千万和四千万的分母。这是两种人为设定的算术情境,并没有真的生成或测序这么多片段。分母变化时,分子、候选名称和估计值全部不变,因此可以单独观察标准化的影响。

候选代号 分母两千万 分母四千万 阈值零点二下的变化
甲 1 0.5 两次保留
乙 0.2 0.1 第二次不保留
丙 0.3 0.15 第二次不保留
丁 0.05 0.025 两次都不保留
戊 0.2 0.1 第二次不保留

相同计数在更大的文库分母中所占比例更低,因此这组结果符合换算关系。但不能据此说增加测序深度会降低真实检出率。本实验没有让读段和分母一起增加,也没有模拟取样过程。它只说明,当整理人员选错分母或者混用不同口径的分母时,候选是否跨过门槛会改变。

一个常见的核查点是双端数据的单位。若一个片段对应两端读段,把两端文件中的读段数简单相加作为片段数,就可能把分母扩大一倍。实际流程该使用哪份统计,应按该版本工作流程和文件元数据确定,不能为了复现某个希望看到的数值,临时选择看起来更合适的分母。

跨样本比较还需要确认前处理是否一致。一个样本用原始输入总量,另一个样本用过滤后的总量,两者虽然都叫每百万,所代表的背景已经不同。建议将分母的数值、单位、来源文件和统计阶段单独保存。这样发现结果不一致时,可以先检查口径,而不是立即归因于生物差异。

通过数值门槛不代表通过完整检测

第二个实际执行的脚本为 filter_by_min_FFPM.pl。我们人为选择零点二作为演示阈值,它不是本文推荐的通用筛选标准。固定版本使用大于或等于进行比较,因此恰好等于阈值的乙会保留。分母为两千万时留下四条,分母为四千万时只留下甲。逻辑见 固定版本过滤脚本。

丙没有分裂支持,但在第一种情境中数值为零点三,仍然通过这个脚本。这并不说明它会通过 STAR-Fusion 完整流程。原因很简单,我们只执行了一个数值筛选,没有执行其他有关候选结构和证据的步骤。结果文件里的通过,只能在这个具体步骤的范围内解释。

由此可以整理出一个更稳妥的审阅顺序。先确认候选来自哪个流程阶段,再检查分裂和跨接证据分别是什么,然后核对标准化数值,最后才讨论筛选阈值。若顺序反过来,先用一个阈值删表,再去解释剩余候选,很容易把尚未验证的证据要求当成程序已经替自己检查过。

接近边界时,保留位数会参与决定

戊的估计支持合计为三点九九八四。用两千万作为分母,未舍入的合计数值为零点一九九九二,略小于演示门槛。但是实际脚本先分别计算两部分,并将每部分保留四位小数。两部分各自成为零点一,相加写出的结果就是零点二,随后通过包含等号的筛选。

这不是我们假设的浮点风险,而是本次运行确实得到的输出。需要注意,实验验证的是指定脚本和指定参数的组合,不能直接推广成整个软件所有步骤都用相同精度。阅读结果时,应把显示数值、内部数值和下游实际读取的数值分开,特别是将文本表格再次输入其他程序的时候。

处理边界候选,不宜通过改变小数位让它得到预想中的归类。更有用的做法是保留上游精度、记录每一步转换,并把非常接近门槛的条目作为边界案例查看。如果重算公式与导出的结果相差很小,应先检查是分步舍入还是最终舍入,再判断是否有真正的计数错误。

一个实际踩到的格式问题

首次生成输入时,我们使用了带回车换行的制表符文件。官方读取模块没有去掉末列表头中的回车,随后又经过本驱动脚本的文本捕获与换行转换,计算输出出现了异常分行。计算步骤虽然返回成功,后续过滤却报出字段数量不符。改为明确使用单一换行符后,两组计算和过滤均通过。

这里不能简单写成软件不支持所有 Windows 文件,因为我们复现的是特定输入加上特定捕获方式的完整链条。更准确的经验是,跨系统生成表格时,应检查不可见字符、末列表头以及标准错误输出。命令返回成功仅仅是一个检查点,不能替代对输出列数和关键字段的核验。

驱动脚本中现在明确指定换行方式,并保留了这个失败情境的诊断记录。读者可以重现差异,不必靠截图猜测输入是否相同。处理正式结果时,修复格式应当产生一份新文件,并保留原始文件,避免把输入修复和生物学过滤混成一个不可追溯的操作。

with open("candidates.tsv", "w", newline="") as f:
    writer = csv.writer(f, delimiter="\t", lineterminator="\n")
    writer.writerow(columns)
    writer.writerows(rows)

怎样复现这次结果处理

完整脚本和实际结果见 本组实跑资料。程序下载固定版本的官方源码,校验压缩包,安装本实验需要的两个脚本及其读取模块,在固定运行镜像中执行。它没有安装并运行完整的人类融合发现工作流,压缩包中的实验范围也对此作了标注。

下面是核心处理步骤。输入中的估计支持列由练习驱动脚本创建,不能省略后直接套在任意候选表上。输出文件名只是本次练习的约定,使用自己的数据时应当先检查列名是否与脚本要求一致。

perl STAR-Fusion/util/incorporate_FFPM_into_final_report.pl \
  fictional_candidates.tsv 20000000 > denom_20000000.tsv

perl STAR-Fusion/util/filter_by_min_FFPM.pl \
  denom_20000000.tsv 0.2

复现之后,可以尝试只修改一项输入。例如保持估计支持不变,只改原始支持列,再查看标准化数值是否变化。也可以固定分母,将一个候选放在门槛的两侧,检查比较符号。每次只改一个因素,才能明确结果变化由哪里产生。这类练习适合检查自编合并表格的程序,尤其是替换列名和重新标准化的步骤。

实际整合多个样本时,还应把候选的身份定义清楚。仅凭两个基因名称合并,可能把不同断点或不同连接形式压成同一行。本文没有执行断点合并,因此不提供一个未经验证的合并距离。对于需要汇总的项目,应先确定报告对象是基因对还是具体连接,再选择相应的键值,保留不能直接合并的证据。

优点、局限与选用经验

STAR-Fusion 的实用价值在于有明确的工作流程和可检查的中间处理步骤。公开的脚本使计数来源、标准化和阈值行为能够被追踪。本次发现原始数与估计数不能互换,正是通过阅读固定版本代码并运行对照得到的,而不是凭字段名称猜测。

局限同样需要说清。最终表格会压缩许多上游信息,标准化数字不能表达全部证据结构,单个阈值也不能处理所有异常。完整检测需要适配的参考资源和输入条件,后处理练习并未验证这些部分。方法整体表现应参考原始研究及与实际数据相符的验证设计,而不能用本篇的五条人工候选代替,相关研究见 STAR-Fusion 方法论文。

真正值得保留的工作习惯,是把每个数值还原成分子、分母、精度和来源。遇到候选名单变化时,先检查这四件事,往往比反复调阈值更有效。一个能够说明为什么留下或删除某条候选的流程,也更容易被其他分析人员复核和继续使用。

当已核对的融合分析流程需要扩展到更多样本时,可结合数据规模了解 云生信生物信息学分析服务器服务。

把知识用于当前任务

下一步可以直接开始分析

按研究目标查找在线工具、课程、计算资源或完整分析服务。

按目标找方案仍有疑问,联系客服 ↗