跳转至

163_全长转录本分析IsoSeq

一句话概述

全长转录本测序(PacBio Iso-Seq/ONT full-length)直接获取从5'端到3'端的完整mRNA序列,利用IsoQuant和SQANTI3等工具进行转录本分类、新异构体发现和功能注释,解决了短读长RNA-seq无法准确重构复杂可变剪接的难题。


核心知识点总览

知识点说明
PacBio Iso-Seq基于CCS(HiFi)的全长cDNA测序
ONT全长转录本Nanopore cDNA或direct RNA测序
IsoQuant全长转录本比对和量化工具(Nanopore/PacBio)
SQANTI3转录本质量评估和分类标准
Isoseq3PacBio官方Iso-Seq数据处理流水线
转录本分类FSM/ISM/NIC/NNC/Fusion等类型
可变剪接事件全长读长直接识别复杂AS事件
短长读联合结合Illumina做精确量化

各步骤详解

第一步:全长转录本测序原理

白话解释: 传统RNA-seq把mRNA打碎再拼接回去(像拼拼图),碰到复杂的可变剪接就容易拼错。全长转录本测序直接读一整条mRNA(不打碎),一看就知道这个转录本有哪些外显子、怎么剪接——就像直接看完整的句子而不是碎片化的词汇。

技术对比: | 特征 | PacBio Iso-Seq | ONT cDNA/dRNA | Illumina RNA-seq | |------|---------------|---------------|-----------------| | 读长 | 10-15kb (HiFi) | 1-100kb | 100-300bp | | 错误率 | <1% (HiFi) | 5-10% (raw) | <0.1% | | 全长比例 | >95% (CCS) | 60-80% | N/A(短reads) | | 量化精度 | 中等 | 中等 | 高 | | 新转录本发现 | 优秀 | 优秀 | 依赖组装 | | 通量 | ~1-10M reads | ~1-50M reads | ~10-100M reads |


第二步:PacBio Iso-Seq数据处理(isoseq3)

代码示例:

# === isoseq3流水线 ===
# 输入: PacBio SMRT Cell数据 (subreads.bam)

# Step 1: CCS生成 (circular consensus sequencing)
# pbccs已集成到isoseq3中
ccs subreads.bam ccs.bam \
  --min-rq 0.99 \
  --min-passes 3 \
  --num-threads 32

# Step 2: Primer去除和全长reads识别
# 寻找5'和3'引物 → 判定全长
isoseq3 tag ccs.bam flt.bam --design T-12U-16B
# 或经典模式:
lima ccs.bam primers.fasta fl.bam --isoseq

# Step 3: 去除poly-A和concatemer
isoseq3 refine fl.bam primers.fasta flnc.bam \
  --require-polya  # 要求有poly-A(确保全长)

# FLNC = Full-Length Non-Chimeric reads

# Step 4: 聚类(可选,用于降低冗余)
isoseq3 cluster flnc.bam polished.bam \
  --verbose --use-qvs

# Step 5: 比对到参考基因组
# 使用minimap2 (splice-aware模式)
minimap2 -ax splice:hq \
  -uf \
  --secondary=no \
  reference.fa \
  polished.hq.fasta.gz \
  | samtools sort -@ 8 -o aligned.bam

samtools index aligned.bam

# 或直接对FLNC比对(跳过cluster步骤,保留更多信息)
minimap2 -ax splice:hq -uf --secondary=no \
  reference.fa flnc.bam \
  | samtools sort -@ 8 -o flnc_aligned.bam


第三步:ONT全长转录本处理

代码示例:

# === ONT cDNA测序处理 ===
# 使用pychopper识别全长reads(有5'和3'引物)
pychopper -r report.pdf \
  -S stats.tsv \
  -t 16 \
  input.fastq.gz \
  full_length.fastq.gz

# 比对到基因组 (splice-aware)
minimap2 -ax splice \
  -uf \
  -k14 \
  --secondary=no \
  --junc-bed known_junctions.bed \
  reference.fa \
  full_length.fastq.gz \
  | samtools sort -@ 8 -o ont_aligned.bam

samtools index ont_aligned.bam

# === ONT direct RNA处理 ===
# Direct RNA不需要pychopper(无PCR引物)
# 但需要注意reads是3'→5'方向
minimap2 -ax splice \
  -uf \
  -k14 \
  --secondary=no \
  reference.fa \
  drna_reads.fastq.gz \
  | samtools sort -@ 8 -o drna_aligned.bam


第四步:IsoQuant — 转录本重构和量化

代码示例:

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

# === 运行IsoQuant ===
isoquant.py \
  --reference reference.fa \
  --genedb annotation.gtf \
  --bam aligned.bam \
  --data_type pacbio_ccs \
  --output isoquant_output/ \
  --threads 16 \
  --complete_genedb

# 参数说明:
# --data_type: pacbio_ccs / nanopore / assembly
# --complete_genedb: 输出完整基因数据库(含新发现)
# --genedb: 已知注释(GTF/GFF3)

# === ONT数据 ===
isoquant.py \
  --reference reference.fa \
  --genedb annotation.gtf \
  --fastq full_length.fastq.gz \
  --data_type nanopore \
  --output isoquant_ont/ \
  --threads 16

# === 输出文件 ===
# isoquant_output/
#   *.transcript_models.gtf     : 重构的转录本模型
#   *.read_assignments.tsv      : 每条read的转录本归属
#   *.transcript_counts.tsv     : 转录本计数
#   *.gene_counts.tsv           : 基因计数
#   *.transcript_tpm.tsv        : TPM量化


第五步:SQANTI3 — 转录本质量分类

代码示例:

# === 安装SQANTI3 ===
conda create -n sqanti3 python=3.9
conda activate sqanti3
pip install sqanti3

# === 运行SQANTI3 QC ===
python sqanti3_qc.py \
  isoquant_output/transcript_models.gtf \
  annotation.gtf \
  reference.fa \
  --output sqanti3_output/ \
  --cage_peak cage_peaks.bed \
  --polyA_motif_list polyA_list.txt \
  --short_reads illumina.bam \
  -t 16

# 输入:
# 1. 新发现的转录本GTF (来自IsoQuant/isoseq3/TAMA)
# 2. 参考注释GTF
# 3. 参考基因组FASTA
# 可选: CAGE峰(验证5'端)、poly-A信号、短读长比对(验证junction)

# === SQANTI3转录本分类 ===
# FSM (Full Splice Match): 完全匹配已知转录本
# ISM (Incomplete Splice Match): 匹配已知转录本但5'/3'端缺失
# NIC (Novel In Catalog): 新剪接组合但所有junction已知
# NNC (Novel Not in Catalog): 含至少一个新junction
# Antisense: 反义转录本
# Genic Intron: 完全位于内含子内
# Genic Genomic: 部分覆盖外显子但无剪接
# Intergenic: 基因间区域
# Fusion: 跨越多个基因的融合转录本

# === SQANTI3结果分析 (R) ===
library(ggplot2)
library(dplyr)

# 读取SQANTI3分类结果
sqanti <- read.delim("sqanti3_output/classification.txt")

# 转录本类别分布
category_counts <- sqanti %>%
  group_by(structural_category) %>%
  summarise(n = n()) %>%
  mutate(pct = n / sum(n) * 100)

ggplot(category_counts, aes(x = reorder(structural_category, -n), y = n, fill = structural_category)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(pct, 1), "%")), vjust = -0.5) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = "SQANTI3 Transcript Classification", x = "", y = "Count")

# 过滤高质量转录本
hq_transcripts <- sqanti %>%
  filter(structural_category %in% c("FSM", "ISM", "NIC", "NNC")) %>%
  filter(all_canonical == "canonical") %>%  # 经典剪接位点
  filter(!is.na(FL_count) & FL_count >= 3)  # 至少3条全长reads支持

cat(sprintf("高质量转录本: %d / %d (%.1f%%)\n", 
            nrow(hq_transcripts), nrow(sqanti), 
            nrow(hq_transcripts)/nrow(sqanti)*100))

第六步:可变剪接事件分析

代码示例:

library(IsoformSwitchAnalyzeR)

# === 分析可变剪接事件 ===
# IsoformSwitchAnalyzeR整合全长转录本数据
switchList <- importIsoformExpression(
  isoformCountMatrix = "transcript_counts.tsv",
  designMatrix = data.frame(
    sampleID = c("sample1", "sample2", "sample3", "control1", "control2", "control3"),
    condition = c(rep("Tumor", 3), rep("Normal", 3))
  )
)

# 添加注释
switchList <- importRdata(
  isoformCountMatrix = count_matrix,
  designMatrix = design,
  isoformExonAnnoation = "transcript_models.gtf",
  isoformNtFasta = "transcript_sequences.fa"
)

# 差异isoform使用分析
switchList <- isoformSwitchTestDEXSeq(switchList, dIFcutoff = 0.1)

# 分析开放阅读框
switchList <- analyzeORF(switchList)

# 分析isoform switch的功能后果
switchList <- analyzeSwitchConsequences(switchList)

# 可视化特定基因的isoform switch
switchPlot(switchList, gene = "BRCA1")


实战命令

# === 完整Iso-Seq分析流程 ===
# PacBio Iso-Seq
isoseq3 tag ccs.bam flt.bam --design T-12U-16B
isoseq3 refine flt.bam primers.fasta flnc.bam --require-polya
minimap2 -ax splice:hq -uf reference.fa flnc.bam | samtools sort -o aligned.bam
isoquant.py --reference reference.fa --genedb anno.gtf --bam aligned.bam \
  --data_type pacbio_ccs --output results/ --threads 16
python sqanti3_qc.py results/transcript_models.gtf anno.gtf reference.fa

# ONT全长转录本
pychopper input.fq.gz full_length.fq.gz
minimap2 -ax splice -uf reference.fa full_length.fq.gz | samtools sort -o ont.bam
isoquant.py --reference reference.fa --genedb anno.gtf --bam ont.bam \
  --data_type nanopore --output ont_results/ --threads 16

面试常问点

Q1:全长转录本测序解决了短读长RNA-seq的什么问题?

A: (1) 复杂可变剪接:短reads只能看到单个junction,全长reads直接覆盖整个转录本的所有外显子组合;(2) 转录本定量歧义:短reads可能比对到多个isoform,全长reads明确属于一个isoform;(3) 新isoform发现:短reads组装容易产生嵌合体,全长测序直接给出真实存在的isoform;(4) 融合基因检测:可以直接看到跨基因的融合转录本。

Q2:SQANTI3的转录本分类标准是什么?

A: SQANTI3将转录本分为:(1) FSM(Full Splice Match):所有junction和外显子完全匹配已知转录本;(2) ISM(Incomplete Splice Match):匹配已知转录本但5'或3'端缺失(可能是降解或不完整capture);(3) NIC(Novel In Catalog):新的外显子组合但每个junction都在已知注释中存在;(4) NNC(Novel Not in Catalog):含有全新的剪接junction;(5) Fusion/Antisense/Intergenic等其他类型。

Q3:PacBio Iso-Seq和ONT全长RNA-seq如何选择?

A: PacBio Iso-Seq:HiFi模式准确率>99%,适合精确的isoform注释和新isoform发现,但通量较低(~4M CCS reads/cell)且需要PCR扩增。ONT:更长的读长(>100kb possible)、支持direct RNA(无逆转录偏差)、更高通量,但错误率较高(~5%)。选择:精确注释用PacBio HiFi;基因组改进/超长isoform用ONT;修饰检测必须用ONT direct RNA。

Q4:如何处理全长测序的量化不准确问题?

A: 全长测序的通量相对Illumina低得多,直接count可能不够准确。解决方案:(1) 短长读联合:用全长数据定义isoform集合,用Illumina短reads(高通量)做精确量化(FLAIR+Salmon);(2) UMI/Barcode:PacBio MAS-Seq使用分子条码减少PCR偏差;(3) IsoQuant的置信度过滤:只保留多条全长reads支持的转录本用于量化。

Q5:全长转录本数据在基因组注释中的应用?

A: (1) 改进参考注释(GTF/GFF3)——发现新isoform、修正外显子边界;(2) 训练gene finder(如BRAKER)的ab initio模型;(3) 验证和完善可变剪接注释;(4) 特定组织/发育阶段的转录本全景图;(5) 非模式物种的从头转录组注释(无需参考注释)。


易错点

1. 未过滤非全长reads

错误: 将所有CCS reads直接当作全长转录本。 正确做法: 必须经过lima(引物识别)+refine(poly-A确认)筛选FLNC(Full-Length Non-Chimeric)reads。非全长reads是降解产物或技术artifact。

2. minimap2参数不正确

错误: 用默认参数(DNA模式)比对cDNA reads。 正确做法: 使用splice-aware模式:PacBio用-ax splice:hq;ONT用-ax splice-uf(强制正链匹配)。错误参数导致无法正确跨越intron。

3. 不结合短读长数据验证junction

错误: 仅凭长读长数据(尤其是ONT)声称发现新junction。 正确做法: ONT错误率较高,可能产生假junction。使用SQANTI3的--short_reads参数结合Illumina数据验证junction真实性。新junction需要短reads支持或多条长reads一致支持。

4. 将ISM转录本全部当作新发现

错误: 报告大量"新转录本"但其实多数是ISM(不完整的已知转录本)。 正确做法: ISM通常是capture不完整或RNA降解造成的artifact。只有NIC和NNC才是真正的新isoform发现。报告时分开统计。

5. 忽略文库饱和度

错误: 测序深度不够就声称完整覆盖了转录本多样性。 正确做法: 做饱和度曲线分析——随测序量增加,新发现的isoform数是否趋于饱和。如果曲线未趋平,需要更多测序。


补充知识

工具生态

工具功能适用数据
isoseq3PacBio官方处理流程PacBio
IsoQuant转录本重构和量化PacBio/ONT
SQANTI3质量评估和分类通用
TAMA转录本合并和过滤通用
FLAIRONT全长转录本分析ONT
BambuONT转录本发现和量化ONT
StringTie2短/长读组合组装混合

PacBio Iso-Seq发展

  • Iso-Seq (标准): CCS reads + clustering
  • MAS-Seq: 多分子串联 + UMI, 通量提高8倍
  • Kinnex: 最新高通量全长RNA方案