software

pairtools 实跑指南——坐标翻转、质量筛选与去重规则,为什么同一批接触会留下不同数量

作者:发布于 2026-11-15约 11 分钟阅读
去重规则,决定保留什么。12 对人工比对,比较距离、后端与单倍型标签。质量门槛先改类别,提高门槛后,总记录仍是 12 条,显式筛选 UU 后,去重输入才变成 10 条。后端也有语义差异,连续偏移链的分组方式不同,最大偏移三碱基,本例保留 4 条或 5 条。标签与统计要分清,标签约束改变重复分组,统计过滤不会自动删除输出接触。

一份接触列表换了去重参数,保留数量从四条变成七条,哪个结果才正确?如果没有先定义什么算作重复,这个问题没有唯一答案。两端坐标允许偏移多少、使用最大偏移还是偏移之和、邻近关系是否传递,以及是否要求单倍型标签一致,都会改变重复分组。它们是分析规则的一部分,不只是运行速度选项。

本文安装并运行 pairtools 1.1.3,用十二对手工编写的比对记录完成解析、排序、筛选和五种去重对照。输入不是测序仪产生的数据,也没有经过比对器,因此本文讨论的是输入输出语义与参数影响,不是文库重复率、真实生物学接触或软件性能测评。

去重规则,决定保留什么。12 对人工比对,比较距离、后端与单倍型标签。质量门槛先改类别,提高门槛后,总记录仍是 12 条,显式筛选 UU 后,去重输入才变成 10 条。后端也有语义差异,连续偏移链的分组方式不同,最大偏移三碱基,本例保留 4 条或 5 条。标签与统计要分清,标签约束改变重复分组,统计过滤不会自动删除输出接触。
12 对人工比对,比较距离、后端与单倍型标签

一、先把输入和可回答的问题限定清楚

十二对输入包括三条连续偏移的接触、一条精确复制、一条交换测序端顺序的等价接触、一条改变方向的接触、两条用于比较距离规则的接触、两条带不同单倍型标签的接触、一条低比对质量接触和一条完全未比对记录。每种情况都有明确设计目的,能够沿着程序输出追溯到对应输入。

读段按照名称成组放置,使同一对的两个端相邻。本次只有简单连续比对,没有补充比对和多重连接路径,因此不能借这个例子评价复杂嵌合读段的恢复效果。真实数据进入解析阶段时,需要确保同一分子的相关比对记录按工具要求组织,否则后面的分类和连接识别都失去基础。

固定环境与完整生成脚本保存在实跑复现包。运行器会建立输入并依次执行对照,不需要读者手工录入长表格。下面的镜像摘要固定了本次运行环境,使用可移动标签的其他环境应重新核对版本。

IMAGE=quay.io/biocontainers/pairtools@sha256:29e06e1791a809300c29abd8dea482eca573f2b9d0f8b8e2dddc0c749f561ba4
docker pull "$IMAGE"
python3 run.py ./pairtools_practice

pairtools 的优势是把接触处理拆成可组合步骤,方便保留中间结果和审计记录。相应的使用成本是,解析、排序、筛选与去重不能被混为一次“清洗”,每一步都需要知道其输入状态和实际改变了什么。

二、接触位置要结合方向读,交换测序端也不应增加分子数

在本例中,一条反向五十碱基比对的左侧起点为九百五十一,五端位置在第一千个碱基。输出接触位置采用后者。若直接把比对文件的起点复制进接触表,正向记录可能看起来正确,反向记录却发生系统性偏移,随后基于几个碱基容差的去重就会受到影响。

这里的接触位置是一基坐标,后续转换成分箱时要遵守相应接口约定。不要看到某个矩阵格式使用零基区间,就在所有中间文件里统一减一。转换应该发生在明确的接口上,并通过边界位置的小例子核验。

我们还编写了一对测序端顺序交换的记录。解析时规范化两端顺序后,它和原始接触具有相同坐标与方向组合,能够进入同一个重复分组。关闭翻转的对照则保留原测序端顺序。这说明排序和翻转解决的是不同问题,排序安排记录之间的次序,翻转规范化单条记录两端的表示。

对于染色体间接触,规范化还依赖染色体排序规则。不同输入文件如果采用了不同参考命名或顺序,合并前应该检查头部信息,而不是删掉所有注释行后直接拼接。文件头里既有列定义,也有处理历史,保留它们有助于解释数据从哪里来。官方格式文档说明了坐标、两端表示和接触类型的约定。

三、提高比对质量门槛,先改变的是类别

本次默认解析得到十一条两端唯一定位类别,以及一条全未比对类别。把最小比对质量改为三十之后,得到十条两端唯一定位、一条多重或不满足唯一定位门槛的单端与唯一端组合,以及一条全未比对记录。总记录数仍然是十二。

这里的“唯一”是工具结合当前质量门槛作出的分类,不应把它当作未经条件限定的事实。那条对照记录的一端质量是二十五,改变门槛后被重新分类,不能说它从文件中自动消失了。

pairtools parse -c chrom.sizes \
  --min-mapq 30 --drop-sam --add-columns mapq,HP \
  -o q30.pairs toy.sam

pairtools sort --nproc 1 --memory 100M \
  -o sorted.pairs q30.pairs

pairtools select 'pair_type == "UU"' \
  -o uu.pairs sorted.pairs

我们随后显式筛选两端唯一定位类别,去重输入才变成十条。这个筛选适用于本文只有简单比对的人工例子,并不是所有真实 Hi-C 数据都必须只保留这一类。复杂连接恢复可能产生其他可用类型,正式流程应根据解析策略、实验方案和研究问题确定接受集合。

这一步最实用的核验方法是同时保存解析前后的类别计数,以及筛选后的实际行数。若一份报告只给出“过滤掉百分之多少”,没有说明分母是读段、读段对还是已解析接触,就难以比较不同流程。

四、最大偏移与偏移之和,是两种不同重复定义

先看我们编写的两条接触,两端坐标分别是五千和七千,以及五千零二和七千零二。每个端都偏移两个碱基。若使用最大端偏移,距离是二,三碱基门槛下会合并。若使用两端偏移之和,距离是四,同一门槛下就不会合并。

pairtools dedup --backend scipy \
  --method max --max-mismatch 3 \
  --output dedup.pairs \
  --output-dups duplicates.pairs \
  --output-stats dedup.stats uu.pairs
本次去重设置 保留接触 重复接触 主要区别
最大端偏移三碱基,scipy 4 6 邻近关系可传递
最大端偏移三碱基,cython 5 5 本例的连续偏移链分组不同
两端偏移之和三碱基,scipy 7 3 同时偏移两端更难合并
坐标完全一致,scipy 7 3 不允许坐标偏移
最大偏移三碱基并要求标签一致 5 5 不同单倍型标签分别保留

这张表只能比较本次设计的数据,不能据此判断保留越多越好,也不能把删除越多称为去重越彻底。容差放宽可能合并技术性偏移,也可能把真实的邻近独立分子合在一起。决定规则时,应结合数据产生方式和已有流程定义,并把选择写进分析记录。

两种规则在本例恰好都留下七条,也不表示它们在任何数据上等价。遇到同样的总数,仍然要比较保留的记录身份及重复分组。统计数字相同而具体分子不同,会给下游局部接触分布带来不同影响。

五、计算后端会改变连续偏移链的处理

我们还设置三条接触,两端坐标依次为一百与一千、一百零三与一千零三、一百零六与一千零六。第一条与第二条相差三,第二条与第三条也相差三,但第一条与第三条相差六。

在本次 scipy 后端的最大偏移三碱基设置中,这三条通过邻近关系连成一个重复分组。使用 cython 后端时,分组不要求这种关系传递,因此该链最终保留两条,而不是一条。精确复制和交换测序端的等价记录仍按照相应坐标归入重复。

这意味着后端不能一概视为只改变运行时间的实现细节。在需要对照旧项目时,除了软件版本和容差,还应记录所用后端。若升级后发现重复率变化,先用这种三条接触的小例子检查定义差异,再讨论是否是原始数据质量改变。

工具的命令说明明确区分了这些后端语义及距离方法,见官方命令接口。本文的结果进一步给出一组可以核对的输入,而不是仅把文档中的选项名称抄成参数推荐。

重复分组还有一个容易忽视的解释边界,留下的代表记录不自动等于“测序质量最高的一条”。如果下游要使用代表记录携带的附加属性,应核实当前处理规则如何选择代表,并检查这些属性是否需要在分组内单独汇总,不能凭直觉赋予代表行额外含义。

六、单倍型标签是否参与分组,需要显式决定

我们设计两条坐标和方向完全一致的接触,两端标签都为一的一条,以及两端标签都为二的一条。普通坐标去重会把它们合在一起。要求各端标签分别一致后,两条都保留,最终总保留数由四变成五。

pairtools dedup --backend scipy \
  --method max --max-mismatch 3 \
  --extra-col-pair HP1 HP1 \
  --extra-col-pair HP2 HP2 \
  --output phased.pairs uu.pairs

这个例子演示的是附加列如何参与重复定义,不表示加上标签约束总是更合理。真实单倍型标签可能缺失或判断不稳定,如果同一个技术重复的标签发生分歧,强制按标签分组也可能把本应合并的记录保留下来。选择前应先检查标签质量、未定相比例和技术重复之间的一致性。

我们把标签随解析结果保留,是为了让这个判断可以审计。若前一步已经删除了标签列,后面再写标签约束命令也无法恢复信息。真实流程设计应从最终分析需要反推中间文件必须保留哪些字段,同时明确每个字段的缺失值表示。

方向信息也不能忽略。本次另外编写了一条坐标相同但两端方向组合不同的接触,它在对照中单独保留。自行用两个坐标列做简单去重,可能丢掉工具原本用于区分接触的字段,因此不宜把这样的简化脚本当作等价替代。

七、统计过滤不等于输出过滤,警告也要结合数据规模解释

为了检验一个容易误用的选项,我们在完全一致坐标去重时,给统计过滤条件设为两端距离大于五千碱基。本例没有任何接触满足这个条件,但输出文件仍然保留七条,与未加该条件的输出数量一致。受到筛选的是统计内容,不是输出接触集合。

如果研究目的确实是删除短距离接触,应使用对数据本身生效的筛选步骤,并直接检查输出记录。不能因为统计文件只显示了某一部分,就推断生成矩阵时只使用了这部分。这个区别在汇报质量指标与实际分析输入时尤其重要。

本次小数据还触发了距离分布统计中的除零相关警告。某些区间没有接触,部分汇总量无法稳定估计,这是十二对人工数据的信息量限制。复现记录保留了这些警告,没有把它们掩盖成“全部指标正常”,也没有把程序继续运行解读成所有质量统计都可用。

另一方面,警告并不自动否定已经逐条核对的解析和去重输出。我们分别确认了保留与重复数量相加等于十条输入,并检查重复输出被标为重复类别。质量分布估计不足与基本接触处理是否符合规则,是需要分开验证的两件事。

八、怎样把这次练习变成可复用的分析习惯

实际使用时,先从输入里抽取一小批代表接触,包括反向比对、跨染色体、相近坐标、附加标签缺失和复杂连接等情形。对这些记录逐条确认解析结果,再运行全量处理。抽样不是替代完整质量控制,而是帮助发现坐标体系和参数语义上的错误。

然后建立一张数量记录表,依次保存进入解析的分子数量、各类接触数量、筛选后数量、去重保留数量与重复数量。复杂连接策略可能让分子与接触数量不再一一对应,因此不同阶段要明确统计单位。后续矩阵的非零像素数又是另一种单位,不能直接和接触行数比较。

最后为重复定义保留完整参数,包括容差、距离方法、后端和附加标签约束。处理多个测序块或技术重复时,还要明确去重作用于哪些合并范围。同一文库跨块产生的重复,如果各块独立删除后就直接汇总,未必已经完成全样本范围的去重。

pairtools 适合需要控制中间步骤、保留接触级证据的分析。它的灵活性也要求使用者把处理规则说明白。本次实跑最重要的收获是,保留数量的变化本身不是质量结论,只有把数量与具体重复定义、输入记录和输出类别连接起来,才知道变化意味着什么。

当接触处理规则已通过小数据核验、需要扩展到多个文库和完整数据量时,可了解云生信生物信息学分析环境与算力服务,在保留参数与日志的基础上开展批量处理。

把知识用于当前任务

下一步可以直接开始分析

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

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