software

skani 算出 100% ANI,能说两份基因组一样吗?实跑检查双向覆盖与结果过滤

作者:发布于 2026-11-15约 11 分钟阅读
百分之百 ANI,还要看覆盖。实际比较完整、局部和混合输入。一百万碱基片段,ANI 100%,查询覆盖 100%,参考仅覆盖 21.58%。等长混合输入,ANI 100%,两边都只有约 21.59% 参与比较。要求双方覆盖,结果可能被过滤,没有数据行,不等于 ANI 为零。

比较细菌基因组或 MAG 时,看到接近百分之百的 ANI 很容易产生一种印象,两份序列几乎完全相同。但 ANI 描述的是可比较部分的核苷酸一致程度,还需要结合比较覆盖了双方多大范围来解释。

本文安装并实际运行 skani 0.4.0,用一份公开参考构造完整、截取、突变和混合四类输入。我们同时检查 ANI、参考覆盖比例、查询覆盖比例,以及两个覆盖过滤选项的不同含义。实验中特意保留了高 ANI 但覆盖较少的结果,让读者能够看到仅报告一个数字会遗漏什么。

百分之百 ANI,还要看覆盖。实际比较完整、局部和混合输入。一百万碱基片段,ANI 100%,查询覆盖 100%,参考仅覆盖 21.58%。等长混合输入,ANI 100%,两边都只有约 21.59% 参与比较。要求双方覆盖,结果可能被过滤,没有数据行,不等于 ANI 为零。
实际比较完整、局部和混合输入

先把 ANI 和覆盖范围放在同一行

当两份序列只有一部分内容能够建立比较关系时,可以在这部分内容中得到很高的一致程度,但其余内容并没有因此被证明相同。对不完整组装、局部片段和混合输入,这种情况尤其值得检查。

skani 会同时输出 ANI 与两个方向的对齐比例。参考比例的分母对应参考,查询比例的分母对应查询。交换输入方向后,需要重新确认每一列所指向的对象,不能把列名省略成一个含糊的“覆盖率”。

软件采用近似映射和草图筛选来估计相关指标,适合用于大量基因组的比较与候选筛查。它提供的汇总结果也不等同于逐碱基比对文件,若要定位突变或结构差异,仍需要相应的后续分析。skani 官方项目说明

本次安装和版本如何固定

本次下载项目提供的 Linux x86_64 静态可执行文件,赋予执行权限后直接运行。实际版本输出为 0.4.0,下载包记录了文件校验值,没有仅凭下载链接中的名称判断版本。

curl -fL \
  https://github.com/bluenote-1577/skani/releases/download/latest/skani \
  -o skani
chmod +x skani
./skani --version
sha256sum skani

需要注意,带有 latest 的下载地址可能随发布更新。复现实验应核对实际返回版本和校验值,不能假定未来从相同地址下载的文件仍然相同。本次所有对照使用同一个可执行文件,每次调用限制为两个线程。

官方发布说明还记录了零点四版本的草图格式变化。如果项目中保存了旧版本草图或预建数据库,升级时应按发布说明核对兼容性。本次直接读取 FASTA,没有借用跨版本草图库来解释结果。0.4.0 版本发布说明

输入是一份参考和几组明确的改动

基础参考为公开序列 NC_000913.3,实际长度为四百六十四万一千六百五十二碱基。驱动会检查序列长度和校验值,再生成其他输入,保证比较的是同一版本的参考。NCBI 参考序列记录

第一组直接使用完整参考,作为自身比较。第二组截取开头一百万碱基,第三组进一步截取开头十万碱基,用于观察同一内容在不同长度分母下的表现。

第四组固定随机种子,在完整参考中选择四万六千四百一十六个位置,并把每个位置的碱基替换为另一种碱基。它与原参考的设计全长逐位一致率约为百分之九十九。

第五组保留参考开头的一百万碱基,再加入一条人工生成的序列,使文件总长度与原参考相同。两部分分别写成两个序列记录。它用于展示“文件一样长”也不代表所有内容都能比较,没有模拟真实群落或真实污染率。

自身比较先确认基本输入输出

我们先让完整参考与自身比较,并保存详细输出。命令中的查询和参考选项明确指定方向,结果写为制表符分隔文件。

./skani dist \
  -q full.fna -r full.fna \
  -o full_self.tsv -t 2 --detailed

实际 ANI 为百分之百,参考和查询对齐比例也都是百分之百。这个对照表明本次输入能够被程序正常读取,基本比较返回了符合设计的结果。

自身比较不能证明后面每种数据都能够准确估计,但可以帮助发现更基础的问题。例如文件是否读错、序列是否为空,或者调用的可执行程序是否与记录一致。先保留这样一份简单对照,通常比直接从复杂组装的异常分数开始猜测更容易定位原因。

一百万碱基片段的 ANI 为什么也是百分之百

接下来以一百万碱基片段为查询,以完整参考为参考。实际 ANI 仍然为百分之百,但参考对齐比例只有百分之二十一点五八,查询对齐比例为百分之百。

./skani dist \
  -q partial.fna -r full.fna \
  -o partial_full.tsv -t 2 --detailed

这与输入设计相符。片段完全从参考截取,因此自身内容可以得到高度一致的比较关系,但它只占完整参考的一部分。不能因为 ANI 达到百分之百,就把尚未出现在查询中的其他参考区域也认定为一致。

然后我们把两个输入对调。实际 ANI 仍为百分之百,两个覆盖数字交换位置,参考比例变成百分之百,查询比例变成百分之二十一点五八。这样就能通过同一组数据检查方向解释是否正确。

在整理批量结果时,建议保留查询文件名和参考文件名。若把两个方向混在一起,只保留某一列覆盖率,就可能对同一对序列得出看似矛盾的结论。

同样长度的混合文件,也可以得到高 ANI

混合输入的总长度与完整参考相同,但只有其中一百万碱基直接来自参考,其余是独立生成的人工序列。实际比较仍得到百分之百 ANI,而两边对齐比例都只有约百分之二十一点五九。

这次双方长度相同,所以两个方向的比例接近一致。但大部分内容并没有建立可用于该结果的比较关系,高 ANI 仍然只描述可比较部分。

查询输入 ANI 参考对齐比例 查询对齐比例
完整参考自身 100.00% 100.00% 100.00%
一百万碱基片段 100.00% 21.58% 100.00%
十万碱基片段 100.00% 2.15% 100.00%
设计突变的完整序列 98.92% 99.83% 99.83%
等长混合文件 100.00% 21.59% 21.59%

这组对照说明,文件总长度、ANI 和双向覆盖需要一起看。总长度相近不能代替内容匹配,ANI 很高也不能代替广泛覆盖。将这几个数字放在一行,比单独按 ANI 排序更容易识别需要继续检查的对象。

对于真实 MAG,如果发现高 ANI 但双方覆盖都低,可以进一步查看组装组成、共享片段、参考选择和分箱结果。本例只演示这种结果可以怎样出现,不把一个人工混合实验转化为所有真实数据通用的质量判定门槛。

设计一致率为百分之九十九,实测为什么是 98.92%

设计突变组的修改位置是明确记录的,因此能够独立计算完整序列的逐位一致率。实际 skani 返回的 ANI 为 98.92%,两边对齐比例均为 99.83%。

两种数字的计算方式不同。前者直接根据已知修改位置统计全部对应碱基,后者由软件的近似比较过程估计。它们在本例中接近,却没有逐小数位相等。

因此,不能把这组结果改写成“精确检出了全部突变”,也不应把两者差值当成软件对所有数据的固定误差。真实组装还可能涉及重复、片段缺失、结构变化和不均匀相似性,本次单一设计不足以覆盖这些情况。

如果研究结论依赖具体位置或精确突变数量,应保留相应的逐位置证据。skani 可以帮助挑选较接近的参考和候选比较对象,但其汇总表不提供完整的突变清单。

min-af 并不是要求双方都达到同一比例

十万碱基片段与参考的比较中,ANI 为百分之百,查询对齐比例为百分之百,而参考比例只有约百分之二点一五。随后我们把最小对齐比例设为五十,再次执行比较。

./skani dist \
  -q short.fna -r full.fna \
  --min-af 50 -o short_min50.tsv \
  -t 2 --detailed

结果仍然保留。原因可以直接从本次命令帮助和实际输出对应起来,该选项要求至少一方达到指定条件,查询这一方已经满足。它并不等价于要求参考和查询都至少覆盖一半。

如果分析者希望排除仅在参考中覆盖很小区域的命中,就不能只看到参数中写了五十,便认定这个要求已经实现。需要检查软件对该选项的具体定义,以及它使用的是一个方向还是两个方向。

批处理脚本中最好明确记录选项名称,而不是只在报告中写“覆盖过滤五十”。同一个数字放在不同选项后面,可能表达不同接受规则。

要求双方都达到条件,输出会怎样变化

下一组改用双方最小对齐比例选项,仍设为五十。实际十万碱基片段的比较没有数据行,文件只保留列标题。对一百万碱基片段采用相同条件,结果也没有数据行。

./skani dist \
  -q short.fna -r full.fna \
  --both-min-af 50 -o short_both50.tsv \
  -t 2 --detailed

两次命令都正常退出。这与任务失败或测得 ANI 为零不同,候选没有满足本次报告条件,因此没有输出对应比较结果。

实际汇总时,不能把这种缺失值直接填成零。填零会把“未通过覆盖要求”变成“序列一致程度为零”,改变数据含义。建议记录过滤条件和是否产生数据行,必要时保留过滤前的比较结果用于诊断。

本次五十只是为了明确展示两个选项的差异。正式分析应根据对象完整度和研究问题选择条件,并说明为什么使用单向或双向要求,不宜把教学对照中的数字直接当作默认质量标准。

一个 FASTA 文件在本次实验中代表什么

本次使用默认按文件比较的方式,混合文件中的两个序列记录共同构成一个待比较对象。详细输出也记录了查询包含两个片段,而不是把它们自动拆成两份独立基因组。

因此,批量比较 MAG 时,通常需要清楚维护一个文件对应哪个组装。若把多个不同基因组随意合并到一个文件,再按一个基因组解释汇总指标,问题可能来自输入组织,而不在比较算法本身。

软件也提供按单条序列记录处理的相关选项,但启用后比较单位会变化。准备修改这些选项时,应先确认自己想比较的是整个组装、单条片段还是一个混合内容集合,再设计输出表的键。

保留输入清单、每个文件的总长度和片段数,可以帮助复查这种问题。对于来源不同的批次,还需要检查文件名是否复用,避免同名文件被错误关联到不同样本。

读一份 skani 结果可以按什么顺序

先确认查询和参考是谁,再看 ANI 与两个对齐比例是否相互支持。如果 ANI 很高但只有很小部分参与比较,应先限定结论范围,进一步检查未被覆盖的内容。

随后查看输入长度和片段组成,判断它们是否属于可以直接比较的对象。如果一个是局部片段,另一个是完整基因组,方向性覆盖差异可能完全符合设计,不能简单视为软件异常。

再检查报告门槛。对于只有表头的结果,区分参数筛选、草图筛查和实际运行失败,查看退出状态及日志。将这些情况分开处理,能减少批量汇总时人为制造的零值。

最后保留软件版本、输入校验值和完整命令。若比较方案发生变化,可以回到同一份输入重新执行,再讨论结果差异,而不必依赖记忆猜测上次使用了哪些条件。

skani 的优势在于以明确的汇总指标帮助筛查大量基因组,并同时提供双方覆盖信息。使用时的主要限制是结果仍依赖可比较范围和近似估计,无法独立回答全部组装质量、物种边界或结构差异问题。让结论与这些指标实际描述的对象对应起来,才是这类工具最有价值的用法。

下载包提供参考校验方式、截取和突变构造、九次实际比较及全部详细字段,可以重新计算每种条件下的输出。下载实跑脚本与本次结果

当项目需要对大量菌株或 MAG 批量比较,并统一保存参考版本、覆盖条件和复核记录时,可了解云生信的生物信息学分析计算服务。

把知识用于当前任务

下一步可以直接开始分析

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

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