跳转至

RNA编辑分析REDItools

一句话概述:RNA编辑是转录后A→I碱基修饰(测序中表现为A→G替换),REDItools/REDInet从RNA-seq数据中检测编辑位点,揭示基因调控的另一个维度。

核心知识点速览

概念白话解释
RNA编辑RNA转录后的碱基被修改,最常见的是A变成I
A-to-I编辑腺苷(A)被ADAR酶脱氨变成肌苷(I),测序时读作G
ADAR酶执行A-to-I编辑的酶家族(ADAR1, ADAR2, ADAR3)
编辑水平某位点被编辑的RNA分子比例(0-100%)
REDItools从RNA-seq检测RNA编辑位点的Python工具套件
REDItools2REDItools的并行优化版本,适合大数据
REDInet2025年新发布的深度学习编辑检测器,准确率>99%
REDIportal人类RNA编辑位点数据库(~1600万个位点)
Alu元件重复序列,A-to-I编辑最集中的区域
编辑体编辑位点编辑位点的全局图谱(editome)

一、RNA编辑基础

1.1 A-to-I编辑的生物学意义

A-to-I RNA编辑的功能:
1. 密码子改变 → 蛋白质序列改变(重编码)
2. 剪接位点改变 → 影响可变剪接
3. miRNA靶位改变 → 影响miRNA调控
4. dsRNA结构改变 → 调控先天免疫应答
5. 影响RNA稳定性和定位

临床意义:
- 多种疾病与编辑异常相关(癌症、自身免疫、神经退行性疾病)
- ADAR1在肿瘤免疫中有重要作用
- 编辑水平可作为生物标志物

1.2 检测挑战

A-to-I编辑在测序中表现为 A→G 替换
但A→G替换也可能是:
  ① SNP(基因组层面的变异)
  ② 测序错误
  ③ 比对错误(特别是Alu重复区域)

区分RNA编辑 vs SNP 的策略:
  - 配对DNA-seq:如果DNA是A但RNA是G → 编辑
  - 数据库过滤:排除已知SNP(dbSNP/gnomAD)
  - 链特异性信息:A-to-I只发生在特定链
  - 深度学习(REDInet):从序列特征判断

二、REDItools分析流程

2.1 安装

# 安装REDItools2
git clone https://github.com/BioinfoUNIBA/REDItools2.git  # 克隆仓库
cd REDItools2
pip install -r requirements.txt  # 安装依赖
python setup.py install           # 安装

# 安装依赖工具
conda install -c bioconda samtools  # SAMtools
conda install -c bioconda pysam     # pysam
conda install -c bioconda tabix     # tabix

2.2 数据准备

# 1. RNA-seq数据比对(用STAR,支持剪接比对)
STAR --runThreadN 8 \
  --genomeDir star_index/ \          # STAR索引目录
  --readFilesIn reads_R1.fq.gz reads_R2.fq.gz \  # 测序文件
  --readFilesCommand zcat \          # gzip文件需要zcat
  --outSAMtype BAM SortedByCoordinate \  # 输出排序BAM
  --outFileNamePrefix sample_ \      # 输出前缀
  --twopassMode Basic               # 两步比对(提高剪接准确性)

# 2. 排序和索引
samtools sort sample_Aligned.sortedByCoord.out.bam -o sample_sorted.bam  # 排序
samtools index sample_sorted.bam  # 索引

# 3. 去重复(可选但推荐)
picard MarkDuplicates \
  INPUT=sample_sorted.bam \
  OUTPUT=sample_dedup.bam \
  METRICS_FILE=dedup_metrics.txt \
  REMOVE_DUPLICATES=true  # 去除PCR重复
samtools index sample_dedup.bam  # 重新索引

2.3 REDItools2运行

# ===== 场景1:有配对DNA-seq数据(最准确) =====
python REDItools2.py \
  -f sample_rna.bam \              # RNA-seq BAM文件
  -r hg38.fa \                     # 参考基因组
  -g sample_dna.bam \              # DNA-seq BAM文件(配对)
  -o output_table.txt \            # 输出文件
  -t 8 \                           # 线程数
  -q 30 \                          # 最小比对质量
  -bq 25 \                         # 最小碱基质量
  -c 10 \                          # 最小覆盖深度
  -m 0                             # 同源位点质量

# ===== 场景2:无配对DNA(需要额外过滤) =====
python REDItools2.py \
  -f sample_rna.bam \
  -r hg38.fa \
  -o output_table.txt \
  -t 8 \
  -q 30 \
  -bq 25 \
  -c 10 \
  -S                               # 链特异性模式

# 结果列说明:
# Region: 染色体
# Position: 位置
# Reference: 参考碱基
# Strand: 链
# Coverage: 覆盖深度
# Frequency: 编辑频率(0-1)
# AllSubs: 所有替换类型及其数量

2.4 编辑位点过滤

# REDItools输出需要严格过滤以减少假阳性

# 过滤步骤:
# 1. 只保留A→G替换(A-to-I编辑在测序中表现为A→G)
awk '$4=="A" && $5~"G"' output_table.txt > AG_sites.txt  # 过滤A→G

# 2. 排除已知SNP
# 下载dbSNP数据
# wget https://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606/VCF/All_20180418.vcf.gz
bedtools intersect -v \
  -a AG_sites.bed \
  -b dbSNP_common.bed \
  > filtered_no_snp.txt  # 去除SNP位点

# 3. 排除简单重复区域的假阳性
bedtools intersect -v \
  -a filtered_no_snp.txt \
  -b simpleRepeats.bed \
  > filtered_final.txt

# 4. 保留覆盖深度足够的位点
awk '$6 >= 20' filtered_final.txt > high_coverage_sites.txt  # 覆盖≥20

三、REDInet深度学习检测(2025新方法)

# REDInet使用时序卷积网络(TCN)分类编辑位点
# 训练数据来自REDIportal的>900万个已知编辑位点

# 安装REDInet
pip install redinet  # 安装

# 使用REDInet进行编辑位点分类
# 步骤1:用REDItools2预处理BAM文件
# 步骤2:用REDInet对候选位点进行分类

# REDInet特点:
# - 不需要配对DNA数据
# - 分析101碱基窗口的核苷酸频率
# - 训练准确率 >99%
# - 独立验证集准确率 >96%
# - 输出每个位点的编辑P值

四、R语言下游分析

# 读取REDItools输出
editing_sites <- read.delim("filtered_editing_sites.txt")  # 读取编辑位点

# 编辑水平分布
library(ggplot2)
ggplot(editing_sites, aes(x = Frequency)) +
  geom_histogram(binwidth = 0.05, fill = "steelblue") +  # 直方图
  labs(x = "Editing Level", y = "Number of Sites",
       title = "Distribution of A-to-I Editing Levels") +
  theme_minimal()

# 基因组区域注释
library(GenomicRanges)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)

# 将编辑位点注释到基因组区域
sites_gr <- GRanges(
  seqnames = editing_sites$chr,
  ranges = IRanges(start = editing_sites$pos, width = 1),
  strand = editing_sites$strand
)

# 与Alu元件重叠分析
# 大部分A-to-I编辑位于Alu重复序列中
alu_regions <- read.delim("Alu_repeats.bed", header = FALSE)
alu_gr <- GRanges(seqnames = alu_regions$V1,
                  ranges = IRanges(start = alu_regions$V2, end = alu_regions$V3))

overlaps <- findOverlaps(sites_gr, alu_gr)
alu_pct <- length(unique(queryHits(overlaps))) / length(sites_gr) * 100
cat("Alu区域编辑位点占比:", round(alu_pct, 1), "%\n")
# 正常情况下应该 >90%

五、与REDIportal数据库比较

# REDIportal (2025版) 收录了~1600万个A-to-I编辑位点
# 来自GTEx项目 >9000个RNA-seq样本

# 下载REDIportal数据
# https://rediportal.unicampus.it/

# 比较自己的编辑位点与数据库
rediportal <- read.delim("REDIportal_hg38.txt")  # 读取数据库

# 找已知编辑位点
known_sites <- merge(
  editing_sites, rediportal,
  by = c("chr", "pos"),
  all.x = TRUE
)

known_pct <- sum(!is.na(known_sites$rediportal_id)) / nrow(known_sites) * 100
cat("已知编辑位点占比:", round(known_pct, 1), "%\n")
# 比例越高说明检测结果越可靠

常见报错与解决

报错信息原因解决方案
pysam: truncated BAMBAM文件损坏重新排序和索引
Too many false positives过滤不够严格增加覆盖深度要求,排除SNP
No A-to-G sites found链特异性设置错误检查-S参数和链信息
REDItools2: memory error大基因组内存不足分染色体运行或用并行模式
Low Alu overlap可能非人类数据使用对应物种的重复序列注释

速查表

# REDItools分析流程
STAR比对 → samtools排序/索引 → REDItools2检测
→ 过滤SNP → 过滤低质量 → REDIportal验证 → 下游分析

# 关键过滤标准
替换类型: 只保留A→G(A-to-I编辑)
覆盖深度: ≥20x
碱基质量: ≥25
比对质量: ≥30
排除: dbSNP已知变异、简单重复区域

# 工具选择
有配对DNA: REDItools2(最准确)
无配对DNA: REDItools2 + 严格过滤 + REDInet验证
深度学习: REDInet(2025年,不需要DNA数据)

# 正常人类编辑位点特征
总位点数: ~1600万(REDIportal)
Alu区域占比: >90%
最常见区域: 3'UTR、内含子
编码区编辑: 较少但功能影响大

# ADAR酶家族
ADAR1: 广泛表达,编辑Alu重复序列
ADAR2: 主要在脑中表达,编辑编码区
ADAR3: 无催化活性,可能是负调控

面试高频问题

Q1:A-to-I RNA编辑的机制是什么?

:ADAR(作用于RNA的腺苷脱氨酶)家族酶识别双链RNA(dsRNA)结构,将其中的腺苷(A)脱氨基转变为肌苷(I)。I在翻译时被核糖体识别为鸟苷(G),因此在测序中表现为A→G替换。ADAR1主要编辑Alu重复序列形成的dsRNA,ADAR2主要编辑编码区的特异性位点(如谷氨酸受体GluR-B的Q/R位点)。

Q2:如何区分RNA编辑和SNP?

:三种策略:①最直接——配对DNA测序,如果DNA是A但RNA是G则为编辑;②数据库过滤——排除dbSNP/gnomAD中的已知变异位点;③统计特征——RNA编辑的编辑水平通常<100%(因为不是所有RNA分子都被编辑),纯合SNP的替换频率接近100%。2025年的REDInet用深度学习从周围序列上下文特征直接分类,准确率>96%,不需要DNA数据。

Q3:为什么大部分编辑位点在Alu序列中?

:ADAR酶需要识别双链RNA(dsRNA)结构。Alu是灵长类特有的约300bp短散在核元件(SINE),基因组中有>100万个拷贝。当两个反向Alu元件位于同一个pre-mRNA中时(如两个相邻内含子中),它们的互补序列会折叠形成dsRNA结构,被ADAR识别并大量编辑。因此>90%的人类A-to-I编辑位于Alu序列中。

Q4:RNA编辑在癌症中有什么作用?

:①ADAR1在多种肿瘤中过表达,促进肿瘤免疫逃逸——通过编辑dsRNA防止其激活PKR和MDA5等先天免疫传感器;②特定编辑事件改变蛋白功能——如AZIN1编辑在肝癌中获得功能性突变;③编辑水平的全局改变可作为生物标志物;④ADAR1已成为免疫治疗增效的潜在药物靶点——抑制ADAR1可以增强免疫检查点抑制剂的效果。

Q5:REDItools和SPRINT等其他工具有什么区别?

:REDItools是最经典的工具,支持配对DNA和无配对DNA模式,产出全面但需要大量后续过滤。SPRINT专门为无配对DNA设计,利用重复序列特征减少假阳性。2025年新推出的REDInet用深度学习取代了传统的经验过滤规则,训练集来自>900万个已验证的编辑位点(REDIportal),准确率>96%且不需要DNA数据。实际使用中推荐REDItools2预处理+REDInet分类的组合方案。