跳转至

Nanopore 16S 全长测序分析


一句话说明

传统 16S 扩增子测序只读 V3-V4 区(约 460bp),分辨率只到属水平;Nanopore 可以读 16S 全长(~1500bp),覆盖全部 9 个可变区,分辨率直达种甚至菌株水平。


核心知识点

要点1:为什么 16S 全长更好

  • 16S rRNA 基因 ~1542bp,包含 9 个可变区(V1-V9)
  • 短读只测 1-2 个可变区(如 V3-V4),信息量有限
  • 全长覆盖所有可变区 → 物种分辨率大幅提升
  • 白话类比:用一两句话(V3-V4)识别一个人很容易认错,用完整的自我介绍(全长)就能精准识别

要点2:16S 可变区选择的困境

可变区长度分辨率常用平台
V1-V2~300bp中等Illumina
V3-V4~460bp中等(最常用)Illumina
V4~250bp一般Illumina
V1-V9 (全长)~1500bp高(种水平)ONT / PacBio
  • 不同可变区对不同菌群的分辨率不同
  • 选区偏差是传统 16S 的固有问题 → 全长测序消除这个问题

要点3:ONT 16S 全长测序特点

  • 使用 SQK-16S114.24(ONT 官方 16S V14 化学试剂盒)或自定义引物
  • 单次运行可测数万到数十万条全长 16S 序列
  • R10.4+ 化学准确率 ~99%,基本满足物种鉴定
  • 可以用 MinION(便携设备)在现场做微生物检测

要点4:分析工具选择

工具用途特点
DoradoBasecallingONT 官方,最新模型
NanoFilt / Chopper质控过滤低质量和短读
minimap2比对分类比对到 SILVA/GTDB 数据库
EMU物种丰度估计基于期望最大化算法,种水平精准
NanoCLUSTOTU 聚类专为 Nanopore 16S 设计
QIIME2 + q2-long-read全流程QIIME2 插件支持长读

实战代码

# ===== Nanopore 16S 全长分析流程 =====

# 1. Basecalling(如果使用 live basecalling 则跳过)
dorado basecaller sup \
    pod5_directory/ \
    --kit-name SQK-16S114.24 > basecalled.bam

# 转换为 FASTQ
samtools fastq basecalled.bam > raw_reads.fastq

# 2. 质控:过滤低质量和异常长度的读
# Nanopore 16S 应该在 1300-1600bp
chopper --quality 10 \
    --minlength 1300 \
    --maxlength 1600 \
    --input raw_reads.fastq > filtered_reads.fastq

# 统计过滤后的数据
echo "过滤后的 reads 数:"
grep -c "^@" filtered_reads.fastq
echo "reads 长度分布:"
awk 'NR%4==2 {print length($0)}' filtered_reads.fastq | \
    sort -n | \
    awk 'BEGIN{print "Min\tMedian\tMax"} {a[NR]=$0} END{print a[1]"\t"a[int(NR/2)]"\t"a[NR]}'

# 3. 方法1:EMU — 种水平物种丰度估计(推荐)
# EMU 使用期望最大化算法处理 Nanopore 的错误率
emu abundance \
    --db /ref/emu_database/ \
    --type map-ont \
    --threads 16 \
    --output-dir emu_output/ \
    filtered_reads.fastq

# EMU 输出:每个样本的种水平丰度表
# species_name  abundance  tax_id
cat emu_output/filtered_reads_rel-abundance.tsv

# 4. 方法2:minimap2 比对到 SILVA 数据库
minimap2 -a -x map-ont \
    --secondary=no \
    -t 16 \
    /ref/SILVA_138.2_SSU_NR99.fasta \
    filtered_reads.fastq | \
    samtools sort -@ 8 -o silva_aligned.bam
samtools index silva_aligned.bam

# 统计比对到各物种的 reads 数
samtools idxstats silva_aligned.bam | \
    sort -k3 -rn | head -20  # 前20个最丰富的物种

# 5. 方法3:使用 QIIME2 + q2-long-read 插件
# 导入数据到 QIIME2
qiime tools import \
    --type 'SampleData[SequencesWithQuality]' \
    --input-path manifest.csv \
    --output-path reads.qza \
    --input-format SingleEndFastqManifestPhred33V2

# 使用 VSEARCH 去嵌合体和聚类
qiime vsearch cluster-features-de-novo \
    --i-sequences reads.qza \
    --i-table feature-table.qza \
    --p-perc-identity 0.99 \
    --o-clustered-table clustered-table.qza \
    --o-clustered-sequences clustered-seqs.qza

# 分类注释(使用 SILVA 分类器)
qiime feature-classifier classify-consensus-vsearch \
    --i-query clustered-seqs.qza \
    --i-reference-reads silva-138-ssu-nr99-seqs.qza \
    --i-reference-taxonomy silva-138-ssu-nr99-tax.qza \
    --o-classification taxonomy.qza \
    --p-threads 16
# ===== R: 全长 16S 结果可视化与比较 =====
library(ggplot2)
library(dplyr)

# 读取 EMU 输出的丰度表
emu_results <- read.delim("emu_output/filtered_reads_rel-abundance.tsv")

# 按丰度排序,取 Top 15 物种
top15 <- emu_results %>%
    arrange(desc(abundance)) %>%
    head(15)

# 物种丰度条形图
ggplot(top15, aes(x = reorder(species, abundance), y = abundance)) +
    geom_bar(stat = "identity", fill = "steelblue") +
    coord_flip() +   # 横向展示,方便看物种名
    labs(x = "物种", y = "相对丰度 (%)",
         title = "Nanopore 16S 全长:Top 15 物种") +
    theme_minimal()

# 比较全长 vs V3-V4 的分辨率
# 全长结果
full_length <- data.frame(
    level = c("门", "纲", "目", "科", "属", "种"),
    resolution = c(99, 98, 97, 95, 92, 85))  # 示例分辨率

# V3-V4 结果
v3v4 <- data.frame(
    level = c("门", "纲", "目", "科", "属", "种"),
    resolution = c(99, 97, 95, 90, 80, 50))  # 种水平分辨率低

comparison <- rbind(
    cbind(full_length, method = "全长 16S"),
    cbind(v3v4, method = "V3-V4"))

ggplot(comparison, aes(x = level, y = resolution,
                       color = method, group = method)) +
    geom_line(linewidth = 1.2) +
    geom_point(size = 3) +
    scale_x_discrete(limits = c("门","纲","目","科","属","种")) +
    labs(x = "分类水平", y = "分辨率 (%)",
         title = "全长 16S vs V3-V4:分类分辨率比较") +
    theme_minimal()

面试常问点

★ Nanopore 16S 全长的错误率不会影响物种鉴定吗?

参考答案:这是很好的问题。Nanopore R10.4+ 化学的单读准确率约 99%(Q20),意味着每 100 个碱基可能有 1 个错误。但 16S 全长有 ~1500bp,同一物种的多条 reads 可以通过一致性纠错(如 polishing 或 EMU 的概率模型)来提高准确率。EMU 工具专门为 Nanopore 的错误模式设计了期望最大化算法,能在 ~1% 错误率下实现准确的种水平分类。实际上,全长的 1500bp 信息量远大于 V3-V4 的 460bp,即使有少量错误,物种鉴定能力仍然远优于短读扩增子。

★ 什么时候用 Nanopore 16S 全长,什么时候用 Illumina V3-V4?

参考答案:需要种水平分辨率、样本量不大(几十个)、需要现场检测时,选 Nanopore 全长。样本量大(几百个)、只需要属水平分辨率、追求低成本高通量时,选 Illumina V3-V4。另外如果实验室已有 Illumina 数据的历史积累,为了纵向可比性也可能继续用 Illumina。


速查卡片

问题一句话答案
16S 全长长度~1542bp
可变区数量9 个(V1-V9)
ONT 试剂盒SQK-16S114.24
推荐分类工具EMU(种水平最优)
质控长度范围1300-1600bp
全长 vs V3-V4 核心区别种级分辨率 vs 属级分辨率
比对参考数据库SILVA / GTDB
现场检测设备MinION(便携)