跳转至

Nanopore直接RNA测序(RNA修饰检测/polyA长度/全长转录本)

一句话概述

Oxford Nanopore直接RNA测序(Direct RNA Sequencing, dRNA-seq)是唯一不需要逆转录和PCR扩增,直接对天然RNA分子进行测序的技术,能够同时获得全长转录本信息、检测RNA化学修饰(如m6A、假尿嘧啶)、测量poly(A)尾长度,为转录组学研究提供多维度信息。


核心知识点表格

知识点说明
dRNA-seqDirect RNA Sequencing,直接RNA测序,不需RT和PCR
Nanopore原理RNA分子穿过蛋白纳米孔产生电流变化,解码为序列
Motor protein控制RNA通过纳米孔速度的分子马达蛋白
Basecalling将原始电信号转化为碱基序列的过程
DoradoONT官方basecaller(已取代Guppy,最新v1.4.0,2026年2月)
Minimap2长读长比对工具
m6AN6-甲基腺苷,最丰富的mRNA修饰
假尿嘧啶(Ψ)最丰富的RNA修饰之一
poly(A)尾mRNA 3'端的多聚腺苷酸尾巴
全长转录本从5'cap到3'polyA的完整转录本
Isoform可变剪接产生的不同转录本亚型
FLAIR/FLAMES全长转录本分析工具
NanopolishONT信号分析工具(修饰检测)
m6Anet基于深度学习的m6A检测工具(v2.0+支持RNA004)

各步骤详解

第一步:技术原理与平台理解

白话解释: 传统RNA测序像"翻译+复印"——先把RNA翻译成DNA(逆转录),再复印多份(PCR),最后读取。这个过程会丢失RNA上的化学修饰信息,还会引入PCR偏差。Nanopore直接RNA测序就像"直接朗读原文"——RNA分子直接穿过一个蛋白质小孔(纳米孔),穿过时产生不同的电流变化,机器根据电流解读出RNA序列。

技术细节:

测序原理: 1. RNA分子的3' polyA尾与adapter连接 2. Motor protein(RNA解旋酶)抓住RNA分子 3. Motor protein控制RNA以约70nt/s的速度穿过纳米孔(CsgG蛋白孔) 4. 约5个碱基同时在孔中,产生特征性电流信号 5. 电流信号通过神经网络模型(basecaller)解码为碱基序列

与cDNA测序的对比:

特性dRNA-seqcDNA-seq (ONT)Illumina RNA-seq
RNA修饰检测直接检测不能不能
polyA长度直接测量不能不能
全长转录本天然全长全长(有RT偏差)片段化
链方向性100%正确100%正确需要链特异性建库
通量较低(~1M reads/flow cell)中等很高
准确率~92-95% (Q10-Q13)~95-98%>99.9%
RNA需求量500ng-1μg polyA+ RNA1ng即可100ng-1μg
PCR偏差

平台选择: - MinION:便携,1个flow cell,适合小规模研究 - GridION:5个flow cell同时运行 - PromethION:48个flow cell,高通量

第二步:文库制备与测序

白话解释: 直接RNA测序的建库过程比较简单:从总RNA中纯化mRNA(带polyA尾的),给RNA接上一个接头(adapter),这个接头帮助motor protein识别和抓住RNA分子。然后上机测序。

技术细节:

文库制备流程(SQK-RNA004试剂盒): 1. 起始材料:500ng-1μg poly(A)+ RNA(用oligo-dT磁珠纯化) 2. Adapter连接:连接测序adapter(含motor protein结合位点) 3. 可选:反转录:只是为了形成RNA/DNA双链(让RNA更稳定通过孔),不影响信号 4. 上样:将文库加到RNA专用Flow Cell上(MinION/GridION用FLO-MIN004RA,PromethION用FLO-PRO004RA) 5. 测序:运行48-72小时

注意事项: - RNA质量很关键:RIN > 8 推荐,避免降解 - 用DNase处理去除DNA污染 - 不能做ribosomal RNA depletion(会降解RNA) - Flow cell寿命有限,需及时运行

第三步:Basecalling与质控

白话解释: 纳米孔测序仪产生的是电信号(.fast5/.pod5文件),需要用basecaller软件把电信号"翻译"成碱基序列(FASTQ文件)。这一步是整个分析的基础,使用的模型准确度直接影响下游分析。

# ===== Dorado basecalling(推荐,已完全取代Guppy) =====
# Dorado是ONT唯一维护的basecaller(最新v1.4.0,2026年2月)
# 注意:Dorado v1.0+已移除Fast5和RNA002支持,仅支持POD5格式和RNA004

# 下载Dorado(从ONT官网或GitHub releases)
# https://github.com/nanoporetech/dorado/releases

# 下载RNA模型(最新v5.3.0)
dorado download --model rna004_130bps_sup@v5.3.0

# Basecalling(SUP模型,最高准确率)
dorado basecaller rna004_130bps_sup@v5.3.0 pod5_dir/ \
  --emit-fastq > basecalled.fastq

# 或输出BAM格式(推荐,保留信号信息)
dorado basecaller rna004_130bps_sup@v5.3.0 pod5_dir/ \
  --reference genome.fa > aligned.bam

# 可用RNA模型速度/准确率等级:
# rna004_130bps_fast@v5.3.0  - 最快,准确率较低
# rna004_130bps_hac@v5.3.0   - 速度与准确率均衡
# rna004_130bps_sup@v5.3.0   - 最高准确率(推荐)

# SUP模型支持的RNA修饰检测(无需额外工具):
# m5C_2OmeC, m6A_DRACH, inosine_m6A_2OmeA, pseU_2OmeU, 2OmeG
# 使用方法:dorado basecaller rna004_130bps_sup@v5.3.0 pod5_dir/ \
#   --modified-bases m6A_DRACH

# ===== Guppy basecalling(已停止维护,仅旧数据使用) =====
# Guppy已被Dorado取代,新项目不建议使用
# 如果有旧Fast5数据,需先用pod5 convert将Fast5转为POD5格式
# pip install pod5
# pod5 convert fast5 fast5_dir/ --output converted.pod5
guppy_basecaller \
  --input_path fast5_dir/ \
  --save_path output_dir/ \
  --config rna_r9.4.1_70bps_hac.cfg \
  --device cuda:0 \
  --recursive \
  --compress_fastq

# ===== 质控 =====
# 使用NanoPlot
pip install NanoPlot

NanoPlot --fastq basecalled.fastq \
  --outdir nanoplot_qc/ \
  --threads 8 \
  --plots dot kde

# 查看关键指标:
# - Mean read quality (推荐 >Q8 for dRNA)
# - Mean read length (dRNA一般500-2000nt)
# - Number of reads
# - N50 read length

# 使用pycoQC(支持直接读取sequencing_summary.txt)
pip install pycoQC
pycoQC -f sequencing_summary.txt -o pycoQC_report.html

# ===== 质量过滤 =====
# 使用NanoFilt
pip install nanofilt

NanoFilt --quality 7 --length 100 --maxlength 100000 \
  < basecalled.fastq > filtered.fastq

第四步:比对与转录本鉴定

白话解释: 把测到的RNA序列比对到参考基因组或转录组上,确定每条read来自哪个基因的哪个转录本。由于Nanopore读的是全长RNA,一条read通常就代表一个完整的转录本(isoform)。

# ===== Minimap2比对(推荐用于长读长) =====
# 比对到参考基因组
minimap2 -ax splice \
  --secondary=no \
  -uf \
  -k14 \
  --MD \
  -t 16 \
  reference_genome.fa \
  filtered.fastq | \
  samtools sort -@ 8 -o aligned.sorted.bam

samtools index aligned.sorted.bam

# 比对到转录组(如果只需定量)
minimap2 -ax map-ont \
  -t 16 \
  transcriptome.fa \
  filtered.fastq | \
  samtools sort -@ 8 -o aligned_transcriptome.sorted.bam

# ===== 比对统计 =====
samtools flagstat aligned.sorted.bam
# 关键指标:mapping rate(dRNA通常>85%)

# ===== 全长转录本鉴定(FLAIR) =====
# FLAIR: Full-Length Alternative Isoform analysis of RNA
pip install flair-brookslab

# 步骤1:Correct - 校正splice junctions
flair correct \
  -q aligned.sorted.bed \
  -g reference_genome.fa \
  -f annotation.gtf \
  -o corrected \
  --threads 16

# 步骤2:Collapse - 合并reads为isoforms
flair collapse \
  -r filtered.fastq \
  -q corrected_all_corrected.bed \
  -g reference_genome.fa \
  -f annotation.gtf \
  -o collapsed \
  --threads 16 \
  --generate_map

# 步骤3:Quantify - 定量isoform表达
flair quantify \
  -r reads_manifest.tsv \
  -i collapsed.isoforms.fa \
  --threads 16 \
  -o quantified

# 步骤4:DiffExp - 差异isoform分析
flair diffExp \
  -q quantified.counts.tsv \
  -o diff_results \
  --threads 16

# ===== FLAMES(另一个全长转录本工具) =====
# FLAMES支持单细胞和bulk
# R包:BiocManager::install("FLAMES")
# Python: pip install FLAMES-py

# ===== StringTie2 长读长模式 =====
stringtie aligned.sorted.bam \
  -L \
  -G annotation.gtf \
  -o stringtie_output.gtf \
  -p 16 \
  -A gene_abundances.tab

第五步:RNA修饰检测(m6A等)

白话解释: 这是dRNA-seq最独特的优势。RNA上的化学修饰(如m6A)会改变碱基穿过纳米孔时的电流信号——修饰过的碱基产生的电流和未修饰的略有不同。通过比较实际信号和"标准信号"之间的差异,就能定位修饰位点。

# ===== 方法1:m6Anet(深度学习方法,推荐) =====
pip install m6anet

# 步骤1:数据预处理(需要原始信号)
# 确保BAM文件包含move table或使用Nanopolish
m6anet dataprep \
  --input_dir eventalign_output/ \
  --output_dir m6anet_dataprep/ \
  --n_processes 16

# 步骤2:预测m6A位点
m6anet inference \
  --input_dir m6anet_dataprep/ \
  --output_dir m6anet_results/ \
  --n_processes 16 \
  --num_iterations 1000

# 对RNA004数据,使用专门训练的模型:
# m6anet inference \
#   --input_dir m6anet_dataprep/ \
#   --out_dir m6anet_results/ \
#   --pretrained_model HEK293T_RNA004 \
#   --n_processes 16

# 结果文件:data.site_proba.csv
# 包含每个DRACH motif位点的m6A概率

# ===== 方法2:Nanopolish eventalign =====
# 需要原始fast5文件和basecalled序列

# 建立索引
nanopolish index \
  -d fast5_dir/ \
  basecalled.fastq

# 比对
minimap2 -ax splice -uf -k14 reference.fa basecalled.fastq | \
  samtools sort -o aligned.bam
samtools index aligned.bam

# Event alignment(将信号对齐到参考序列)
nanopolish eventalign \
  --reads basecalled.fastq \
  --bam aligned.bam \
  --genome reference.fa \
  --signal-index \
  --scale-events \
  --threads 16 > eventalign.txt

# ===== 方法3:xPore(比较两个条件) =====
pip install xpore

# xPore通过比较两组样本的信号差异检测修饰
# 需要control(如METTL3 KO)和treatment(WT)
xpore dataprep \
  --eventalign eventalign_control.txt \
  --out_dir xpore_control/

xpore dataprep \
  --eventalign eventalign_treatment.txt \
  --out_dir xpore_treatment/

xpore diffmod \
  --config xpore_config.yml \
  --n_processes 16

# ===== 方法4:ELIGOS(检测多种修饰) =====
pip install eligos

# ELIGOS通过比较dRNA信号与预期信号检测修饰
eligos2 rna_mod \
  -i aligned.bam \
  -reg regions.bed \
  -ref reference.fa \
  -o eligos_output/ \
  -p 16 \
  --oddR 1.5 \
  --esb 0.1 \
  --pval 0.05

# ===== 方法5:Tombo(ONT旧工具) =====
pip install ont-tombo

# 重新归正信号
tombo resquiggle fast5_dir/ reference.fa \
  --processes 16 \
  --rna

# 检测修饰(与标准模型比较)
tombo detect_modifications de_novo \
  --fast5-basedirs fast5_dir/ \
  --statistics-file-basename tombo_stats \
  --processes 16

# 输出可视化
tombo plot most_significant \
  --fast5-basedirs fast5_dir/ \
  --statistics-filename tombo_stats.tombo.stats \
  --plot-standard-model \
  --num-bases 10 \
  --num-regions 5

第六步:Poly(A)尾长度测量

白话解释: 每条mRNA的3'端都有一条polyA尾巴(一串A),它的长度影响mRNA的稳定性和翻译效率。长polyA尾的mRNA一般更稳定、翻译更活跃。Nanopore测序可以直接测量每条RNA的polyA长度,因为polyA穿过纳米孔时产生均匀的电流信号。

# ===== Nanopolish polya =====
# 需要原始fast5信号文件
nanopolish polya \
  --reads basecalled.fastq \
  --bam aligned.bam \
  --genome transcriptome.fa \
  --threads 16 > polya_results.tsv

# 输出包含每条read的polyA长度估计
# 列:readname, contig, position, leader_start, adapter_start, 
#     polya_start, transcript_start, read_rate, polya_length, qc_tag

# 过滤高质量结果
awk '$NF == "PASS"' polya_results.tsv > polya_pass.tsv

# ===== tailfindr(R包) =====
# BiocManager::install("tailfindr")
# 支持DNA和RNA的polyA测量

# ===== Dorado内置polyA估计 =====
dorado basecaller rna004_130bps_sup@v5.3.0 pod5_dir/ \
  --estimate-poly-a > basecalled_with_polya.bam

# polyA长度信息存储在BAM的pt tag中
samtools view basecalled_with_polya.bam | \
  awk '{for(i=12;i<=NF;i++) if($i~/^pt:/) print $1, $i}'

# ===== R中分析polyA长度 =====
# R分析polyA结果
library(ggplot2)
library(dplyr)

# 读取nanopolish polya结果
polya <- read.table("polya_pass.tsv", header = TRUE, sep = "\t")

# 基本统计
summary(polya$polya_length)

# 按基因聚合
polya_by_gene <- polya %>%
  group_by(contig) %>%
  summarise(
    median_polya = median(polya_length),
    mean_polya = mean(polya_length),
    n_reads = n(),
    sd_polya = sd(polya_length)
  ) %>%
  filter(n_reads >= 10)  # 至少10条reads

# 全局polyA长度分布
ggplot(polya, aes(x = polya_length)) +
  geom_histogram(bins = 100, fill = "steelblue") +
  xlim(0, 300) +
  labs(x = "Poly(A) Tail Length (nt)", y = "Count",
       title = "Distribution of Poly(A) Tail Length") +
  theme_classic()

# 两组比较(如不同条件下的polyA长度变化)
polya$group <- ifelse(grepl("control", polya$readname), "Control", "Treatment")
ggplot(polya, aes(x = polya_length, fill = group)) +
  geom_density(alpha = 0.5) +
  xlim(0, 300) +
  labs(x = "Poly(A) Tail Length", y = "Density") +
  theme_classic()

# 特定基因的polyA长度分布
gene_of_interest <- "ACTB"
polya_gene <- polya[polya$contig == gene_of_interest, ]
ggplot(polya_gene, aes(x = polya_length)) +
  geom_histogram(bins = 30) +
  labs(title = paste("Poly(A) length of", gene_of_interest))

第七步:可变剪接与isoform分析

白话解释: 一个基因可以通过不同的剪接方式产生多种mRNA变体(isoform)。Nanopore全长测序的巨大优势是:一条read覆盖整条mRNA,可以直接看到所有剪接事件的组合,不需要像短读长测序那样做"拼图式"的组装推断。

# ===== IsoQuant(isoform定量和发现) =====
pip install isoquant

# 已知isoform定量
isoquant.py \
  --reference reference_genome.fa \
  --genedb annotation.gtf \
  --fastq filtered.fastq \
  --data_type nanopore \
  --output isoquant_output/ \
  --threads 16 \
  --complete_genedb

# 新isoform发现
isoquant.py \
  --reference reference_genome.fa \
  --genedb annotation.gtf \
  --fastq filtered.fastq \
  --data_type nanopore \
  --output isoquant_novel/ \
  --threads 16 \
  --transcript_quantification unique_only

# ===== SQANTI3(isoform质量评估) =====
# 对发现的isoform进行分类和质量评估
python sqanti3_qc.py \
  collapsed.isoforms.gtf \
  annotation.gtf \
  reference_genome.fa \
  --output sqanti_output \
  --dir sqanti_dir/ \
  -t 16

# SQANTI3将isoform分类为:
# FSM: Full Splice Match(完全匹配已知)
# ISM: Incomplete Splice Match(部分匹配)
# NIC: Novel In Catalog(新组合,已知junction)
# NNC: Novel Not in Catalog(含新junction)
# Fusion, Genic, Antisense, Intergenic等

# ===== 差异isoform使用(DTU分析) =====
# 使用DRIMSeq + stageR
# R中进行DTU(Differential Transcript Usage)分析
library(DRIMSeq)
library(stageR)

# 读取isoform定量数据
counts <- read.table("isoquant_output/transcript_counts.tsv",
                     header = TRUE, row.names = 1)

# 准备DRIMSeq数据
d <- dmDSdata(counts = counts, samples = sample_info)

# 过滤低表达isoform
d <- dmFilter(d, min_samps_gene_expr = 3, min_samps_feature_expr = 3,
              min_gene_expr = 10, min_feature_expr = 5)

# 设计矩阵
design <- model.matrix(~ condition, data = DRIMSeq::samples(d))

# 差异分析
d <- dmPrecision(d, design = design)
d <- dmFit(d, design = design)
d <- dmTest(d, coef = "conditionTreatment")

# 结果
res_gene <- DRIMSeq::results(d)  # 基因水平
res_txp <- DRIMSeq::results(d, level = "feature")  # 转录本水平

# stageR两阶段检验
pScreen <- res_gene$pvalue
names(pScreen) <- res_gene$gene_id
pConfirmation <- matrix(res_txp$pvalue, ncol = 1)
rownames(pConfirmation) <- res_txp$feature_id

stageObj <- stageRTx(pScreen = pScreen, pConfirmation = pConfirmation,
                     pScreenAdjusted = FALSE, tx2gene = tx2gene_df)
stageObj <- stageWiseAdjustment(stageObj, method = "dtu", alpha = 0.05)
dtu_results <- getAdjustedPValues(stageObj, order = TRUE)

实战命令(可复制)

完整dRNA-seq分析pipeline

#!/bin/bash
# ============================================
# Nanopore Direct RNA-seq Analysis Pipeline
# ============================================

# === 0. 环境设置 ===
THREADS=16
GENOME="reference_genome.fa"
ANNOTATION="annotation.gtf"
TRANSCRIPTOME="transcriptome.fa"
RAW_DIR="pod5_pass/"
OUTPUT="drna_analysis/"
mkdir -p $OUTPUT/{basecall,qc,align,isoform,modification,polya}

# === 1. Basecalling ===
dorado basecaller rna004_130bps_sup@v5.3.0 $RAW_DIR \
  --estimate-poly-a \
  --emit-fastq > $OUTPUT/basecall/basecalled.fastq

# === 2. Quality Control ===
NanoPlot --fastq $OUTPUT/basecall/basecalled.fastq \
  --outdir $OUTPUT/qc/ \
  --threads $THREADS

# === 3. Filtering ===
NanoFilt --quality 7 --length 100 \
  < $OUTPUT/basecall/basecalled.fastq \
  > $OUTPUT/basecall/filtered.fastq

# === 4. Alignment ===
minimap2 -ax splice -uf -k14 --MD -t $THREADS \
  $GENOME $OUTPUT/basecall/filtered.fastq | \
  samtools sort -@ 8 -o $OUTPUT/align/aligned.sorted.bam
samtools index $OUTPUT/align/aligned.sorted.bam

# === 5. Alignment stats ===
samtools flagstat $OUTPUT/align/aligned.sorted.bam > $OUTPUT/align/flagstat.txt

# === 6. Isoform identification (IsoQuant) ===
isoquant.py \
  --reference $GENOME \
  --genedb $ANNOTATION \
  --bam $OUTPUT/align/aligned.sorted.bam \
  --data_type nanopore \
  --output $OUTPUT/isoform/ \
  --threads $THREADS

# === 7. m6A detection (m6Anet) ===
# 需要先做eventalign
nanopolish index -d $RAW_DIR $OUTPUT/basecall/filtered.fastq

nanopolish eventalign \
  --reads $OUTPUT/basecall/filtered.fastq \
  --bam $OUTPUT/align/aligned.sorted.bam \
  --genome $TRANSCRIPTOME \
  --signal-index --scale-events \
  --threads $THREADS > $OUTPUT/modification/eventalign.txt

m6anet dataprep \
  --eventalign $OUTPUT/modification/eventalign.txt \
  --out_dir $OUTPUT/modification/m6anet_prep/ \
  --n_processes $THREADS

m6anet inference \
  --input_dir $OUTPUT/modification/m6anet_prep/ \
  --out_dir $OUTPUT/modification/m6anet_results/ \
  --n_processes $THREADS

# === 8. Poly(A) length ===
nanopolish polya \
  --reads $OUTPUT/basecall/filtered.fastq \
  --bam $OUTPUT/align/aligned.sorted.bam \
  --genome $TRANSCRIPTOME \
  --threads $THREADS > $OUTPUT/polya/polya_results.tsv

echo "Pipeline completed!"

面试常问点

Q1: 直接RNA测序和cDNA测序各有什么优缺点?

A: dRNA-seq优点:(1)保留RNA修饰信息(m6A/m5C/Ψ等);(2)无RT/PCR偏差;(3)直接测polyA长度;(4)绝对链方向性。缺点:(1)通量低(~1M reads/flow cell vs cDNA的~10M);(2)需要大量高质量polyA+ RNA(~500ng);(3)碱基准确率略低;(4)5'端覆盖有偏(motor protein可能提前脱落)。cDNA测序通量高、RNA需求量低,但失去修饰信息且有RT偏差。

Q2: m6Anet是如何检测m6A修饰的?

A: m6Anet是一种基于深度学习的方法,使用multiple instance learning (MIL)框架。它从nanopolish eventalign输出中提取每个DRACH motif位点的电流信号特征(电流均值、标准差、停留时间),然后用预训练的神经网络预测该位点被m6A修饰的概率。优势是不需要knock-out对照样本(与xPore不同),单个样本即可预测。但它只能检测DRACH motif中的m6A,不能检测其他修饰。注意:m6Anet v2.0+已支持RNA004 chemistry(使用--pretrained_model HEK293T_RNA004)。另外,Dorado本身也可直接检测m6A等多种RNA修饰(通过--modified-bases参数),省去eventalign步骤,是更简便的替代方案。

Q3: Nanopore测polyA长度的原理是什么?准确吗?

A: polyA区域在纳米孔中产生均匀的电流信号(因为都是A),与非polyA区域信号明显不同。Nanopolish polya通过识别这段均匀信号的持续时间,结合RNA穿过速度(通过motor protein速率估计),计算polyA长度。准确性:与PAL-seq等方法比较,Nanopore的polyA估计与其他方法高度相关(r>0.9),但绝对值可能有5-10nt的系统性偏差。对于比较不同条件间的polyA长度变化足够可靠。

Q4: 为什么Nanopore dRNA-seq有5'端偏差?

A: RNA从3' polyA端进入纳米孔,5'端最后被读取。在较长的测序过程中,motor protein可能提前从RNA上脱落(尤其当RNA有二级结构时),导致读取不完整——5'端信息丢失。这使得部分reads缺少5'端序列。可以通过增加测序时间、优化文库制备、或在分析时使用5' cap-aware的方法来缓解。

Q5: 如何评估dRNA-seq数据质量?

A: 关键质量指标:(1) 碱基质量:平均Q值>8(对dRNA来说Q10以上较好);(2) 读长分布:mRNA median约800-1500nt;(3) 比对率:>80%为正常;(4) 全长比例:与已知转录本对比,5'和3'端都匹配的reads比例;(5) polyA QC pass率:nanopolish polya的PASS比例应>60%;(6) 饱和度:测序深度是否足够覆盖目标基因。

Q6: 直接RNA测序能检测哪些类型的RNA修饰?

A: 理论上可以检测任何改变电流信号的修饰。目前已有成熟工具检测:m6A(最成熟,m6Anet/xPore/ELIGOS)、m5C(5-甲基胞嘧啶)、假尿嘧啶(Ψ)、Inosine(A-to-I编辑)、2'-O-Me(核糖甲基化)。挑战在于:(1)不同修饰的信号差异大小不同;(2)需要足够的训练数据;(3)某些修饰在当前准确率下难以区分。m6A因为丰度高、信号变化明显、训练数据多,检测最可靠。2025年重大进展:Dorado v1.0+内置RNA修饰检测,SUP模型可直接检测m6A_DRACH、m5C、pseudoU、inosine、2'OmeG等修饰,无需第三方工具。

Q7: Nanopore dRNA-seq在单细胞水平可行吗?

A: 目前标准dRNA-seq方案需要约500ng polyA+ RNA,对应约50万-100万个细胞的RNA量,不适合单细胞。但有一些改进方向:(1) Nano-COP protocol用更少RNA输入;(2) 长读长cDNA+UMI方案(如ScNaUmi-seq)是折中方案——用cDNA但保留isoform信息。真正的单细胞直接RNA测序还需要等待技术突破(更灵敏的纳米孔、更少RNA需求)。


易错点

1. RNA质量不达标导致数据浪费

问题: 使用降解的RNA(RIN<7)进行dRNA-seq,导致reads平均长度很短、5'信息大量丢失、全长转录本比例低。 解决: 严格控制RNA质量,RIN>8优先。避免反复冻融。提取后尽快建库。使用RNA质量评估后再决定是否建库。

2. 把dRNA-seq的碱基错误当作SNP

问题: dRNA-seq错误率约5-8%,某些系统性错误(如homopolymer区域)会在多条reads中重复出现,可能被误判为SNP或编辑位点。 解决: (1) 使用dRNA-seq专用的variant calling工具;(2) 与Illumina数据交叉验证;(3) RNA修饰位点的"错误"可能是真实修饰信号(如m6A导致的A→C错误),需要区分。

3. eventalign步骤内存/时间消耗过大

问题: nanopolish eventalign对大数据集需要几天运行时间和大量内存,许多用户中途失败。 解决: (1) 按染色体/区域并行处理;(2) 使用SSD存储fast5文件;(3) 考虑使用f5c(eventalign的GPU加速版本);(4) 如果只做m6A检测,可以只处理包含DRACH motif的区域。

4. 混淆dRNA-seq的reads方向

问题: dRNA-seq的reads是直接从RNA测的,方向是3'→5'(因为从polyA端进入)。有些工具默认将reads翻转为5'→3',有些没有。混淆方向会影响splice junction识别。 解决: 使用minimap2的-uf参数确保正确链处理。检查IGV中reads方向是否与基因注释方向一致。

5. polyA长度估计中包含了adapter序列

问题: 部分reads中,polyA尾与测序adapter的polyT引物之间的边界不清楚,导致polyA长度被高估。 解决: 使用nanopolish polya的QC标签,只保留"PASS"的结果。QC过滤后的数据更可靠。也可设置合理的polyA长度上限(如排除>250nt的异常值)。

6. 通量不足做定量分析

问题: dRNA-seq通量有限(~1M reads),如果基因组太大或基因数太多,每个基因的覆盖度不足以做可靠的定量或修饰检测。 解决: (1) 对于定量分析,每个样本至少需要50-100万reads;(2) 修饰检测每个位点需要至少20x覆盖;(3) 可以做targeted sequencing(用CRISPR-Cas9富集目标区域)增加特定基因的覆盖。


补充知识

直接RNA测序发展时间线

  • 2017:ONT发布SQK-RNA001试剂盒(第一代dRNA-seq)
  • 2019:SQK-RNA002改进版本
  • 2022:RNA004 chemistry(R10.4.1纳米孔)
  • 2024:Dorado basecaller + SUP模型大幅提高准确率
  • 2025:Dorado v1.0发布,移除Fast5和RNA002支持;RNA模型v5.1/v5.2新增inosine、m5C、2'Ome修饰检测
  • 2026:Dorado v1.4.0发布,RNA模型v5.3.0改进3'端覆盖

与其他长读长RNA方法的比较

方法RNA修饰全长通量准确率
ONT dRNA-seq直接检测(Dorado内置)优秀~93-95%(SUP v5.3)
ONT cDNA-seq不能优秀~97-99%
PacBio Iso-Seq不能优秀中高>99%(HiFi)
Illumina不能需组装很高>99.9%

相关数据库和资源

  • MODOMICS:RNA修饰数据库
  • RMBase:RNA修饰位点数据库
  • m6A-Atlas:m6A修饰图谱
  • ONT Community:Nanopore社区资源和protocols

新兴应用方向

  • 病原体检测:直接测定病毒RNA修饰
  • RNA治疗:mRNA疫苗中修饰碱基的质控
  • 动态RNA修饰组:时间序列分析修饰变化
  • 共转录修饰:新生RNA上的修饰即时检测