765. 翻译组学Ribo-seq分析¶
一句话概述:Ribo-seq(核糖体足迹测序)捕获正在被核糖体翻译的mRNA片段,以单密码子分辨率展示基因组范围的翻译活性——就像给正在工厂流水线上加工的产品拍快照,看哪些"设计图"(mRNA)正在被"制造"(翻译)成蛋白质。
核心知识点速查表¶
| 概念 | 白话解释 | 关键工具 |
|---|---|---|
| Ribo-seq | 核糖体保护片段测序 | 翻译组学核心技术 |
| RPF | 核糖体保护片段(~28-30nt) | RNase消化后的保护区 |
| 三碱基周期性 | 读段每3nt一个周期 | 翻译的标志信号 |
| P-site | 肽基位(核糖体活性位点) | 精确定位翻译位置 |
| TE | 翻译效率(Ribo/RNA比值) | 基因被翻译的程度 |
| ORF | 开放阅读框 | 编码蛋白的序列 |
| smORF | 小ORF(<100aa) | 新发现的微蛋白 |
一、原理(白话版)¶
1.1 Ribo-seq的实验原理¶
实验步骤:
1. 用RNase消化未被核糖体保护的mRNA → 只保留核糖体"脚下"的~28-30nt片段
2. 用蔗糖梯度离心纯化核糖体+片段复合物
3. 提取RNA片段 → 建库 → 测序
生物学意义:
mRNA转录 ≠ 蛋白翻译
- 有些mRNA高表达但翻译很少(翻译抑制)
- 有些mRNA低表达但翻译很多(翻译增强)
- Ribo-seq直接看哪些mRNA正在被翻译
翻译效率(TE) = Ribo-seq信号 / RNA-seq信号
TE > 1: 翻译效率高于平均
TE < 1: 翻译效率低于平均
TE变化: 翻译调控(不改变mRNA水平的基因表达调控)
1.2 Ribo-seq数据的特征信号¶
三碱基周期性(3-nt periodicity):
核糖体每次移动3个碱基(一个密码子)
→ Ribo-seq读段在CDS中显示3nt的周期性模式
→ 这是正在翻译的"指纹信号"
→ 用于验证数据质量和识别翻译ORF
P-site偏移(P-site offset):
RPF的5'端与核糖体P-site之间有固定偏移
通常:28nt RPF → P-site在5'端第13个碱基
精确的P-site定位 → 单密码子分辨率的翻译图谱
二、Ribo-seq数据处理¶
2.1 基础流程¶
# ===== Ribo-seq基础数据处理 =====
# Step 1: 质控与去接头
fastp \
-i sample_ribo.fastq.gz \ # 输入Ribo-seq reads
-o sample_ribo_clean.fq.gz \ # 输出清洁reads
--length_required 25 \ # 最短25nt
--length_limit 35 \ # 最长35nt(RPF在28-30nt)
-h sample_ribo_qc.html # QC报告
# Step 2: 去除rRNA(Ribo-seq中rRNA污染严重)
bowtie2 \
-x rRNA_index \ # rRNA参考索引
-U sample_ribo_clean.fq.gz \ # 输入reads
--un-gz sample_norRNA.fq.gz \ # 未比对的reads(非rRNA)
-S /dev/null \ # 丢弃比对结果
-p 8 \ # 8线程
--very-sensitive # 高敏感度
echo "去除rRNA后reads数:"
zcat sample_norRNA.fq.gz | wc -l | awk '{print $1/4}'
# Step 3: 比对到基因组
STAR \
--runThreadN 8 \
--genomeDir star_index/ \ # STAR索引
--readFilesIn sample_norRNA.fq.gz \ # 非rRNA reads
--readFilesCommand zcat \
--outSAMtype BAM SortedByCoordinate \
--outFilterMultimapNmax 1 \ # 只保留唯一比对
--outFilterMismatchNmax 2 \ # 最多2个错配
--alignIntronMax 50000 \ # 最大内含子长度
--outFileNamePrefix sample_ribo_
samtools index sample_ribo_Aligned.sortedByCoord.out.bam
2.2 RPF长度分布和周期性检查¶
# ===== 检查Ribo-seq数据质量 =====
import pysam # 导入pysam
import matplotlib.pyplot as plt # 导入matplotlib
import numpy as np # 导入numpy
from collections import Counter # 导入Counter
# 读取BAM
bam = pysam.AlignmentFile("sample_ribo_sorted.bam", "rb") # 打开BAM
# 统计RPF长度分布
lengths = [] # 存储读段长度
for read in bam:
if not read.is_unmapped and read.mapping_quality >= 20: # 过滤
lengths.append(read.query_length) # 记录长度
length_dist = Counter(lengths) # 长度分布
# 可视化RPF长度
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左图:长度分布
x = sorted(length_dist.keys())
y = [length_dist[k] for k in x]
axes[0].bar(x, y, color="steelblue", edgecolor="black")
axes[0].set_xlabel("RPF Length (nt)")
axes[0].set_ylabel("Read Count")
axes[0].set_title("RPF Length Distribution")
axes[0].axvline(x=28, color="red", linestyle="--", label="28nt")
axes[0].axvline(x=30, color="red", linestyle="--", label="30nt")
axes[0].legend()
# 右图:metagene图(起始密码子附近的读段分布)
# 预期:在AUG起始密码子处有明显的peak
# 且显示3nt周期性
axes[1].set_xlabel("Distance from Start Codon (nt)")
axes[1].set_ylabel("Read Density")
axes[1].set_title("Metagene Profile at Start Codon")
plt.tight_layout()
plt.savefig("ribo_qc.png", dpi=300)
plt.show()
# 质量标准:
# ① RPF长度峰值在28-30nt → 说明RNase消化成功
# ② CDS区域占比>60% → reads主要在编码区
# ③ 明显的3nt周期性 → 真实的翻译信号
2.3 翻译效率计算¶
# ===== 计算翻译效率(TE) =====
import pandas as pd # 导入pandas
# 读取Ribo-seq和RNA-seq的计数
ribo_counts = pd.read_csv("ribo_gene_counts.tsv", sep="\t", index_col=0)
rna_counts = pd.read_csv("rnaseq_gene_counts.tsv", sep="\t", index_col=0)
# 归一化为RPKM
def rpkm(counts, gene_lengths):
"""计算RPKM"""
total = counts.sum() # 总reads数
rpkm = counts / gene_lengths * 1e9 / total # RPKM公式
return rpkm
# 计算TE
# TE = Ribo-seq RPKM / RNA-seq RPKM
te = ribo_counts["rpkm"] / rna_counts["rpkm"] # 翻译效率
te = te.replace([np.inf, -np.inf], np.nan).dropna() # 去无穷值
print(f"平均TE: {te.mean():.2f}")
print(f"TE > 2的基因数: {(te > 2).sum()}") # 翻译效率高的基因
print(f"TE < 0.5的基因数: {(te < 0.5).sum()}") # 翻译效率低的基因
# 差异翻译效率分析
# 使用Xtail或RiboDiff
# Xtail: 用负二项模型检测条件间的TE变化
# ===== R语言:Xtail差异翻译分析 =====
library(xtail) # 加载Xtail
# 准备数据
ribo_matrix <- as.matrix(ribo_counts) # Ribo-seq count矩阵
rna_matrix <- as.matrix(rna_counts) # RNA-seq count矩阵
condition <- c("ctrl", "ctrl", "treat", "treat") # 条件
# 运行Xtail
result <- xtail(
rna_matrix, # RNA-seq counts
ribo_matrix, # Ribo-seq counts
condition, # 条件
bins = 10000 # bin数
)
# 提取差异翻译基因
summary_result <- resultsTable(result)
sig_genes <- summary_result[summary_result$pvalue_final < 0.05, ]
print(paste("差异翻译基因数:", nrow(sig_genes)))
三、ORF发现(smORF预测)¶
# ===== RiboTISH:发现新的翻译ORF =====
# pip install ribotish
# 预测翻译起始位点和ORF
ribotish predict \
-b sample_ribo_sorted.bam \ # Ribo-seq BAM
-g annotation.gtf \ # 基因注释
-f reference.fa \ # 参考基因组
-o ribotish_orfs.txt \ # 输出ORF
--framebest \ # 选最佳阅读框
-p 8 # 线程
# 输出列包括:
# GenomePos: ORF在基因组的位置
# Start/Stop: 起始/终止密码子位置
# Tid: 转录本ID
# Symbol: 基因名
# TisType: 起始类型(annotated/novel)
# RiboPvalue: 核糖体信号的p值
# 筛选高置信新ORF
awk '$NF < 0.01 && $6 == "novel"' ribotish_orfs.txt \
> novel_orfs_sig.txt # p<0.01的新ORF
四、常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
RPF length异常 | RNase消化不当 | 检查length分布,峰应在28-30nt |
rRNA > 80% | rRNA去除不完全 | 增加rRNA比对的敏感度 |
无周期性 | 数据质量差 | 检查CDS区域的P-site偏移 |
TE=0或Inf | 分母为0 | 过滤低表达基因(counts>10) |
太少唯一比对 | 重复序列多 | 考虑允许多比对reads |
新ORF太多 | 过滤不严格 | 提高p值阈值,要求多工具一致 |
五、面试高频问题¶
Q1: Ribo-seq和RNA-seq的核心区别?¶
A: RNA-seq测量mRNA丰度(转录水平),Ribo-seq测量核糖体占据的mRNA片段(翻译水平)。两者的比值是翻译效率(TE)。很多基因的mRNA水平和蛋白水平不一致,就是因为翻译调控。Ribo-seq填补了这个"从mRNA到蛋白"的信息空白。
Q2: 什么是三碱基周期性(3-nt periodicity)?为什么重要?¶
A: 核糖体沿mRNA每次移动一个密码子(3nt)。所以真正的翻译信号在CDS区域表现为3nt的周期性模式:第1相位的reads最多(P-site),第2/3相位较少。这是区分"真正在翻译的ORF"和"RNA结合蛋白保护片段"的关键标志。没有周期性的信号不可靠。
Q3: 什么是smORF(小ORF)?为什么Ribo-seq能发现它们?¶
A: smORF是编码<100个氨基酸的小蛋白的ORF。传统认为ORF至少编码100aa,但Ribo-seq发现大量被翻译的smORF,包括上游ORF(uORF)、lncRNA上的ORF、circRNA上的ORF。这些微蛋白有真实的生物学功能。Ribo-seq能发现它们是因为它直接看核糖体在哪里翻译。
六、速查表¶
# ===== Ribo-seq速查 =====
# 数据处理
fastp -i ribo.fq.gz --length_required 25 --length_limit 35
bowtie2 -x rRNA_idx -U clean.fq.gz --un-gz norRNA.fq.gz
STAR --readFilesIn norRNA.fq.gz --outFilterMultimapNmax 1
# 质量标准
# RPF长度峰: 28-30nt ✓
# CDS占比: >60% ✓
# 3nt周期性: 明显 ✓
# rRNA比例: <20% ✓
# 翻译效率
# TE = Ribo-seq_RPKM / RNA-seq_RPKM
# 差异翻译: Xtail或RiboDiff
# ORF发现
ribotish predict -b ribo.bam -g anno.gtf -f ref.fa
# 关键概念:
# RPF = 核糖体保护片段(~28-30nt)
# P-site = 精确翻译位置
# TE = 翻译效率
# smORF = 小ORF(<100aa的微蛋白)