跳转至

762. 长读长转录组分析FLAIR/IsoQuant

一句话概述:用PacBio/Nanopore的长读长测序直接读取完整mRNA,发现传统短读长测不到的新转录本和复杂剪接事件——就像用全景相机拍全身照而不是拼凑碎片照。


核心知识点速查表

概念白话解释关键工具
长读长RNA-seq读段覆盖全长mRNA(1-10kb+)PacBio Iso-Seq, ONT dRNA
FLAIR聚类+校正长读长,发现新转录本Python
IsoQuant构建intron图,精确鉴定异构体Python
Iso-SeqPacBio的全长转录本测序CCS/HiFi
FSM全剪接匹配(已知转录本)Full Splice Match
NIC/NNC新剪接组合/新位点Novel In Catalog/Not in Catalog

一、原理(白话版)

1.1 长读长 vs 短读长RNA-seq

短读长RNA-seq(Illumina, 150bp):
  一条mRNA → 打碎成很多150bp片段 → 组装回去
  问题:很难区分相似的异构体(像拼拼图但有多种拼法)

长读长RNA-seq(PacBio/ONT, 1-100kb):
  一条mRNA → 直接整条读出来
  优势:直接看到完整的剪接模式,不需要组装

LRGASP 2024 benchmark结论:
  ① 更长更准确的序列 > 更高的测序深度(发现新转录本)
  ② 更高深度 → 更好的定量
  ③ IsoQuant在新转录本发现上F1值最高(精确率是其他工具5倍+)

1.2 主要工具对比

工具策略优势适用数据
FLAIR聚类+校正可整合短读长验证剪接位点ONT cDNA
IsoQuantintron图构建新转录本精确度最高ONT/PacBio
Bambu参考引导平衡发现和精度ONT/PacBio
StringTie2图组装经典工具长读长扩展通用
TALON数据库驱动适合已知转录本量化PacBio

二、FLAIR分析流程

# ===== 安装FLAIR =====
pip install flair-brookslab  # pip安装
# 或 conda install -c bioconda flair

# ===== FLAIR四步流程 =====

# Step 1: Align — 长读长比对
flair align \
  -g reference.fa \                     # 参考基因组
  -r sample_long_reads.fastq.gz \      # 长读长FASTQ
  --output sample_aligned \             # 输出前缀
  --threads 8 \                         # 线程数
  --nvrna                               # 非直接RNA模式(cDNA用这个)

# 输出:sample_aligned.bed(BED12格式的比对结果)

# Step 2: Correct — 剪接位点校正
flair correct \
  -q sample_aligned.bed \               # 比对结果
  -f annotation.gtf \                   # 参考注释(校正已知剪接位点)
  -g reference.fa \                     # 参考基因组
  --output sample_corrected \           # 输出前缀
  --threads 8
  # 可选:--shortread sample_illumina.bam  # 用短读长验证新剪接位点

# Step 3: Collapse — 聚类合并
flair collapse \
  -g reference.fa \                     # 参考基因组
  -r sample_long_reads.fastq.gz \      # 原始长读长
  -q sample_corrected_all_corrected.bed \  # 校正后BED
  -f annotation.gtf \                   # 参考注释
  --output sample_collapsed \           # 输出前缀
  --threads 8 \
  --stringent \                         # 严格模式(推荐)
  --support 3                           # 至少3条reads支持

# 输出:
# sample_collapsed.isoforms.fa → 转录本序列
# sample_collapsed.isoforms.gtf → 转录本注释
# sample_collapsed.isoforms.bed → BED格式

# Step 4: Quantify — 定量
flair quantify \
  -r reads_manifest.tsv \              # 样本清单文件
  -i sample_collapsed.isoforms.fa \    # 转录本序列
  --output sample_counts \              # 输出前缀
  --threads 8 \
  --tpm                                 # 输出TPM

# reads_manifest.tsv格式(制表符分隔):
# sample1   condition1  batch1  sample1.fastq.gz
# sample2   condition1  batch1  sample2.fastq.gz
# sample3   condition2  batch1  sample3.fastq.gz

三、IsoQuant分析流程

# ===== 安装IsoQuant =====
pip install isoquant  # pip安装
# 或 conda install -c bioconda isoquant

# ===== IsoQuant一步完成 =====
isoquant.py \
  --reference reference.fa \            # 参考基因组
  --genedb annotation.gtf \            # 参考注释
  --fastq sample_long_reads.fastq.gz \ # 长读长FASTQ
  --data_type nanopore \               # 数据类型(nanopore/pacbio_ccs/pacbio_raw)
  --output isoquant_output \           # 输出目录
  --threads 8 \                        # 线程数
  --complete_genedb                    # 使用完整基因数据库模式

# 输出关键文件:
# isoquant_output/00_sample/
#   *.transcript_model_counts.tsv → 转录本计数
#   *.transcript_model_tpm.tsv → TPM表达量
#   *.extended_annotation.gtf → 扩展注释(含新转录本)
#   *.read_assignments.tsv → 读段分配

# ===== 多样本分析 =====
isoquant.py \
  --reference reference.fa \
  --genedb annotation.gtf \
  --fastq sample1.fastq.gz sample2.fastq.gz sample3.fastq.gz \
  --labels Sample1 Sample2 Sample3 \   # 样本标签
  --data_type nanopore \
  --output multi_sample_output \
  --threads 16

# ===== PacBio Iso-Seq数据 =====
isoquant.py \
  --reference reference.fa \
  --genedb annotation.gtf \
  --fastq isoseq_hifi.fastq.gz \       # PacBio HiFi reads
  --data_type pacbio_ccs \             # PacBio CCS类型
  --output isoquant_pacbio \
  --threads 8

四、转录本分类与下游分析

# ===== Python分析IsoQuant/FLAIR结果 =====
import pandas as pd  # 导入pandas
import matplotlib.pyplot as plt  # 导入matplotlib

# 读取IsoQuant的转录本分类
assignments = pd.read_csv(
    "isoquant_output/00_sample/sample.read_assignments.tsv",
    sep="\t"  # 制表符分隔
)

# 转录本分类统计
# FSM: Full Splice Match(完全匹配已知转录本)
# ISM: Incomplete Splice Match(部分匹配)
# NIC: Novel In Catalog(新组合但用已知剪接位点)
# NNC: Novel Not in Catalog(包含全新剪接位点)
# Intergenic: 基因间区
# Genic: 基因内但无剪接匹配

category_counts = assignments["assignment_type"].value_counts()
print("转录本分类统计:")
print(category_counts)

# 可视化
fig, ax = plt.subplots(figsize=(8, 6))
colors = ["#2ecc71", "#3498db", "#e74c3c", "#f39c12", "#95a5a6", "#9b59b6"]
category_counts.plot(kind="bar", color=colors[:len(category_counts)], ax=ax)
ax.set_xlabel("Transcript Category")  # x轴
ax.set_ylabel("Read Count")  # y轴
ax.set_title("Long Read Assignment Categories")  # 标题
plt.xticks(rotation=45)  # 旋转标签
plt.tight_layout()
plt.savefig("transcript_categories.png", dpi=300)
plt.show()

# 差异异构体分析(DIF)
# 使用FLAIR的diffSplice模块
# flair diffSplice -i counts.tsv -o diff_results --test

五、常见报错与解决

报错信息原因解决方案
FLAIR: minimap2 not foundminimap2未安装conda install minimap2
IsoQuant: insufficient reads读段太少增加测序深度或降低过滤阈值
Too many novel isoforms过滤不严格增加support阈值(≥3)
Memory error大基因组内存不足分染色体处理
GTF format error注释文件格式不对确保是标准GTF格式
Low mapping rate数据质量差检查QC,nanopore用最新basecaller

六、面试高频问题

Q1: FLAIR和IsoQuant哪个更好?

A: 取决于目标。IsoQuant在新转录本发现上精确率最高(LRGASP benchmark),假阳性率是其他工具的1/5。FLAIR的优势在于可以整合短读长数据验证新剪接位点,适合没有参考注释或注释不完整的物种。

Q2: 长读长RNA-seq能完全替代短读长吗?

A: 目前不能完全替代。长读长的优势是异构体发现和全长转录本;短读长的优势是成本低、定量更准确(深度更高)。最佳实践是结合使用:长读长发现转录本,短读长精确定量。

Q3: 如何判断新发现的转录本是否可靠?

A: ①至少3条reads支持;②剪接位点在已知位点附近(校正后);③跨多个样本重复出现;④用RT-PCR/Northern blot实验验证;⑤检查是否有蛋白编码潜力(ORF预测)。


七、速查表

# ===== 长读长转录组速查 =====

# FLAIR四步
flair align -g ref.fa -r reads.fq
flair correct -q aligned.bed -f anno.gtf -g ref.fa
flair collapse -g ref.fa -r reads.fq -q corrected.bed
flair quantify -r manifest.tsv -i isoforms.fa

# IsoQuant一步
isoquant.py --reference ref.fa --genedb anno.gtf \
    --fastq reads.fq --data_type nanopore --output out/

# 转录本分类:
# FSM = 已知转录本 | ISM = 部分匹配
# NIC = 新组合已知位点 | NNC = 全新剪接位点

# 工具选择:
# 新转录本发现精度 → IsoQuant
# 整合短读长 → FLAIR
# PacBio Iso-Seq → IsoQuant(pacbio_ccs)
# 通用 → IsoQuant