比较细菌基因组或 MAG 时,看到接近百分之百的 ANI 很容易产生一种印象,两份序列几乎完全相同。但 ANI 描述的是可比较部分的核苷酸一致程度,还需要结合比较覆盖了双方多大范围来解释。
本文安装并实际运行 skani 0.4.0,用一份公开参考构造完整、截取、突变和混合四类输入。我们同时检查 ANI、参考覆盖比例、查询覆盖比例,以及两个覆盖过滤选项的不同含义。实验中特意保留了高 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 批量比较,并统一保存参考版本、覆盖条件和复核记录时,可了解云生信的生物信息学分析计算服务。
