跳转至

Merqury — 基于 k-mer 的无参考组装评估工具


一句话说明

Merqury 是一个不需要参考基因组的组装质量评估工具,通过比较组装序列和原始读段中的 k-mer 分布来计算 QV(质量值)、完整性和错误率,是 T2T 时代评估基因组组装精度的金标准。


安装与配置

# 方法1:conda 安装(推荐)
conda install -c bioconda merqury  # 从 bioconda 安装
# merqury 依赖 meryl(k-mer 计数工具),会自动安装

# 方法2:源码安装
git clone https://github.com/marbl/merqury.git  # 克隆源码
export MERQURY=$(pwd)/merqury                     # 设置环境变量
export PATH=$MERQURY:$PATH                        # 加入 PATH

# 验证安装
merqury.sh 2>&1 | head -5  # 查看用法信息

# 还需要安装 meryl
conda install -c bioconda meryl  # k-mer 数据库构建工具

核心概念

  • QV(Quality Value):组装质量值,QV50 表示每 10 万个碱基约有 1 个错误
  • Completeness:原始读段中的 k-mer 有多少在组装中能找到
  • 不需要参考基因组,用读段自身评估组装质量

核心用法

第一步:构建 k-mer 数据库

# 用 meryl 从原始读段构建 k-mer 数据库
meryl count \
  k=21 \                         # k-mer 大小(21 是默认推荐值)
  threads=16 \                    # 线程数
  memory=32 \                     # 内存上限(GB)
  output reads.meryl \            # 输出的 k-mer 数据库
  reads_R1.fq.gz reads_R2.fq.gz  # 原始读段

第二步:运行 Merqury 评估

# 基本评估(无 phasing)
merqury.sh \
  reads.meryl \                   # k-mer 数据库
  assembly.fasta \                # 组装序列
  output_prefix                   # 输出文件前缀

# 评估分型组装(有两套单倍型)
merqury.sh \
  reads.meryl \                   # k-mer 数据库
  hap1.fasta \                    # 单倍型 1
  hap2.fasta \                    # 单倍型 2
  phased_output                   # 输出前缀

进阶用法

# 使用亲本数据评估 phasing 质量(trio-binning)
# 先构建亲本 k-mer 数据库
meryl count k=21 threads=16 output maternal.meryl maternal_reads.fq.gz
meryl count k=21 threads=16 output paternal.meryl paternal_reads.fq.gz

# 提取亲本特有 k-mer
$MERQURY/trio/hapmers.sh \
  maternal.meryl \                # 母本 k-mer
  paternal.meryl \                # 父本 k-mer
  child.meryl                     # 子代 k-mer(可选)

# 用亲本 k-mer 评估
merqury.sh \
  child.meryl \
  maternal.inherited.meryl \      # 母本遗传的 k-mer
  paternal.inherited.meryl \      # 父本遗传的 k-mer
  hap1.fasta hap2.fasta \
  trio_output

# 单独计算 QV 值
$MERQURY/eval/qv.sh \
  reads.meryl \
  assembly.fasta \
  qv_output

# 生成 k-mer 频谱图(评估杂合度和组装完整性)
$MERQURY/plot/spectra-cn.sh \
  reads.meryl \
  assembly.fasta \
  spectra_output

结果解读

# 关键输出文件:
# output_prefix.qv              — QV 质量值(每条 contig + 整体)
# output_prefix.completeness    — 完整性(k-mer 覆盖率)
# output_prefix.spectra-cn.fl.png — k-mer 频谱图

# QV 解读:
# QV30 = 每 1000 个碱基 1 个错误(99.9% 准确)
# QV40 = 每 10000 个碱基 1 个错误(99.99% 准确)
# QV50 = 每 100000 个碱基 1 个错误(99.999% 准确,T2T 级别)

# Completeness 解读:
# >95% = 组装非常完整
# 90-95% = 不错
# <90% = 可能有区域缺失

常见问题与踩坑

问题1:k-mer 大小选多少

建议:默认 k=21 适合大多数情况;大基因组(>1Gb)可用 k=31 减少随机匹配

问题2:QV 值异常低

可能原因:组装有较多错误、原始数据质量差、或 k-mer 数据库构建有误
解决:确认读段质控充分;检查 k-mer 频谱图是否正常

问题3:meryl 构建速度慢

解决:增加线程数和内存;HiFi 数据量大时可能需要 1-2 小时

问题4:Merqury vs QUAST vs BUSCO 的区别

QUAST:评估连续性(N50 等),有参考时评估结构准确性
BUSCO:评估基因完整性(找到了多少标配基因)
Merqury:评估碱基准确性(QV)和 k-mer 完整性
建议:三个工具互补,发表论文时通常都要用


速查卡片

命令/参数用途
meryl count k=21 output db reads.fq构建 k-mer 数据库
merqury.sh db asm.fa prefix基本评估
merqury.sh db hap1.fa hap2.fa prefix分型组装评估
hapmers.sh mat.meryl pat.meryl提取亲本特有 k-mer
*.qvQV 质量值文件
*.completeness完整性结果
*.spectra-cn.fl.pngk-mer 频谱图
k=21推荐 k-mer 大小
threads=16 memory=32资源设置
spectra-cn.sh单独生成频谱图