762. 长读长转录组分析FLAIR/IsoQuant¶
一句话概述:用PacBio/Nanopore的长读长测序直接读取完整mRNA,发现传统短读长测不到的新转录本和复杂剪接事件——就像用全景相机拍全身照而不是拼凑碎片照。
核心知识点速查表¶
| 概念 | 白话解释 | 关键工具 |
|---|---|---|
| 长读长RNA-seq | 读段覆盖全长mRNA(1-10kb+) | PacBio Iso-Seq, ONT dRNA |
| FLAIR | 聚类+校正长读长,发现新转录本 | Python |
| IsoQuant | 构建intron图,精确鉴定异构体 | Python |
| Iso-Seq | PacBio的全长转录本测序 | 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 |
| IsoQuant | intron图构建 | 新转录本精确度最高 | 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 found | minimap2未安装 | 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