跳转至

转录组可变polyA分析

一句话概述

检测和分析基因的可变多聚腺苷酸化(Alternative Polyadenylation, APA)事件,利用DaPars/QAPA等工具从标准RNA-seq数据中量化3'UTR长度变化,揭示基因表达调控的转录后层面。


核心知识点总览

知识点关键内容重要程度
APA生物学意义3'UTR长度改变影响mRNA稳定性/定位/翻译⭐⭐⭐⭐⭐
DaPars算法基于reads覆盖度变化检测proximal pA位点⭐⭐⭐⭐⭐
QAPA定量基于转录本定量估计pA位点使用率⭐⭐⭐⭐
PDUI指标Percentage of Distal polyA site Usage Index⭐⭐⭐⭐
3'端专用测序3'READS/PAS-seq/QuantSeq专用方法⭐⭐⭐
APA数据库PolyA_DB/PolyASite/APADB⭐⭐⭐
功能影响肿瘤中3'UTR缩短与增殖/免疫逃逸⭐⭐⭐
调控机制CFIm/CstF/CPSF等poly(A)机器的调控⭐⭐⭐

各步骤详解

第一步:可变多聚腺苷酸化的生物学基础

白话解释: mRNA的3'端有一条polyA尾巴,但一个基因可以在不同位置切割并加上polyA尾——这就是可变多聚腺苷酸化(APA)。使用更近端(proximal)的polyA位点会产生短3'UTR的mRNA,使用更远端(distal)的会产生长3'UTR。3'UTR长度影响mRNA的命运:长UTR含更多miRNA结合位点和调控元件,短UTR则"逃脱"了这些调控。

技术细节: APA的类型: 1. 3'UTR APA(最常见):不改变编码序列,只改变3'UTR长度 2. Intronic APA (IPA):在内含子中使用pA位点,产生截短蛋白 3. Internal exon APA:在编码外显子中使用pA位点

APA的功能影响: - 短3'UTR → 逃避miRNA调控 → 蛋白表达上调 - 短3'UTR → 失去RNA结合蛋白结合位点 → 改变mRNA定位/稳定性 - 肿瘤细胞普遍倾向使用proximal pA位点(3'UTR全局缩短)

polyA信号序列:AAUAAA(canonical)和其变体(约50-58%使用AAUAAA,加上第二常见的AUUAAA约占10-16%,两者合计约60-70%)

# APA示意图
# Gene X:
#   ====[CDS]=====[3'UTR_short]pA1............[3'UTR_long]pA2
#                              ↑                           ↑
#                         proximal pA                  distal pA
#
# Short isoform: CDS + short 3'UTR (使用proximal pA)
# Long isoform:  CDS + long 3'UTR  (使用distal pA)
#
# PDUI = reads_using_distal / (reads_using_proximal + reads_using_distal)
# PDUI高 → 倾向使用distal pA → 长3'UTR
# PDUI低 → 倾向使用proximal pA → 短3'UTR

第二步:DaPars分析流程

白话解释: DaPars(Dynamic analysis of Alternative PolyAdenylation from RNA-seq)是最经典的APA分析工具。它的聪明之处在于:不需要专门的3'端测序数据,从普通RNA-seq就能检测APA。原理是观察基因3'UTR区域的reads覆盖度"断崖式下降"的位置,那里就是proximal polyA位点。

技术细节: DaPars算法步骤: 1. 对每个基因,用动态规划寻找3'UTR中reads覆盖度变化最大的断点 2. 该断点即为推断的proximal pA位点 3. 计算PDUI(Percentage of Distal polyA site Usage Index) 4. 用Fisher精确检验比较条件间PDUI差异

# === DaPars2 分析流程 ===

# 1. 准备BedGraph文件(从BAM生成)
# 对每个样本
genomeCoverageBed -ibam sample1.sorted.bam -bg -split > sample1.bedgraph
genomeCoverageBed -ibam sample2.sorted.bam -bg -split > sample2.bedgraph

# 2. 准备基因注释(从GTF提取3'UTR)
# DaPars需要的格式:gene_symbol, chr, strand, 3UTR_start, 3UTR_end
python dapars_extract_anno.py -b hg38_refseq.bed -o extracted_3UTR.bed

# 3. 准备配置文件
cat > dapars2_config.txt << 'EOF'
# Annotated 3'UTR file
Annotated_3UTR=extracted_3UTR.bed

# BedGraph files (Group1: Control, Group2: Treatment)
Group1_Tophat_aligned_Wig=control1.bedgraph,control2.bedgraph,control3.bedgraph
Group2_Tophat_aligned_Wig=treat1.bedgraph,treat2.bedgraph,treat3.bedgraph

Output_directory=dapars2_output/
Output_result_file=APA_results

# Parameters
Num_least_in_group1=1
Num_least_in_group2=1
Coverage_cutoff=30
FDR_cutoff=0.05
PDUI_cutoff=0.2
Fold_change_cutoff=0.59
EOF

# 4. 运行DaPars2
python DaPars2_main.py dapars2_config.txt
# DaPars2结果解析
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取结果
results = pd.read_csv("dapars2_output/APA_results_All_Prediction_Results.txt", sep="\t")

# 关键列说明:
# PDUI_Group1, PDUI_Group2: 各组的平均PDUI
# PDUI_Group_diff: Group2 - Group1
# P_val, adjusted.P_val: 统计检验结果
# Pass_Filter: 是否通过多重检验

# 筛选显著APA事件
sig_apa = results[results['Pass_Filter'] == 'Y'].copy()
print(f"Significant APA events: {len(sig_apa)}")

# 3'UTR缩短事件(PDUI下降 → proximal pA使用增加)
shortened = sig_apa[sig_apa['PDUI_Group_diff'] < -0.2]
# 3'UTR延长事件
lengthened = sig_apa[sig_apa['PDUI_Group_diff'] > 0.2]

print(f"3'UTR shortening: {len(shortened)} genes")
print(f"3'UTR lengthening: {len(lengthened)} genes")

# 可视化PDUI变化
plt.figure(figsize=(8, 6))
plt.scatter(results['PDUI_Group1'], results['PDUI_Group2'],
            alpha=0.3, s=5, c='grey')
plt.scatter(shortened['PDUI_Group1'], shortened['PDUI_Group2'],
            alpha=0.7, s=10, c='blue', label='Shortened')
plt.scatter(lengthened['PDUI_Group1'], lengthened['PDUI_Group2'],
            alpha=0.7, s=10, c='red', label='Lengthened')
plt.plot([0, 1], [0, 1], 'k--', alpha=0.5)
plt.xlabel("PDUI (Control)")
plt.ylabel("PDUI (Treatment)")
plt.legend()
plt.title("Alternative Polyadenylation Changes")
plt.savefig("APA_scatter.pdf")

第三步:QAPA定量分析

白话解释: QAPA(Quantification of Alternative Polyadenylation)用另一种策略分析APA:它利用已知的polyA位点数据库,为每个pA位点定义一个对应的转录本,然后用Salmon(快速转录本定量工具)量化各pA异构体的表达量,从而得到每个pA位点的使用比例。

技术细节: QAPA的优势:速度快(利用Salmon伪比对)、精确度高(利用已知pA位点而非从头预测)、支持单样本分析。

# === QAPA 分析流程 ===

# 1. 构建QAPA参考库
# 下载PolyASite数据库
wget https://polyasite.unibas.ch/download/atlas/2.0/GRCh38.96/atlas.clusters.2.0.GRCh38.96.bed.gz

# 生成QAPA注释文件
qapa build --db ensembl_identifiers.txt \
    --gencode_fasta gencode.v38.transcripts.fa \
    -o qapa_library

# 2. 使用Salmon定量
salmon index -t qapa_library.fa -i qapa_index --threads 8

# 对每个样本定量
for sample in sample1 sample2 sample3; do
    salmon quant -i qapa_index \
        -l A \
        -1 ${sample}_R1.fq.gz -2 ${sample}_R2.fq.gz \
        -o salmon_${sample} \
        --threads 8
done

# 3. QAPA定量APA使用率
qapa quant \
    --db qapa_library.metadata.txt \
    salmon_sample1/quant.sf \
    salmon_sample2/quant.sf \
    salmon_sample3/quant.sf \
    > qapa_pau_results.txt
# === QAPA结果分析(R)===
library(dplyr)
library(ggplot2)

# 读取QAPA PAU (Poly(A) site Usage) 结果
pau <- read.table("qapa_pau_results.txt", header = TRUE, sep = "\t")

# PAU值说明:每行是一个pA位点,值为该pA位点在对应基因所有pA位点中的使用比例
# Proximal PAU + Distal PAU = 1(对于有两个pA位点的基因)

# 筛选有两个及以上pA位点的基因
multi_pa_genes <- pau %>%
  group_by(Gene) %>%
  filter(n() >= 2) %>%
  ungroup()

# 计算各样本的"长UTR使用率"(取最远端pA位点的PAU)
# 按 APA_ID 排序,每个基因的最后一个是distal
distal_pau <- multi_pa_genes %>%
  group_by(Gene) %>%
  slice_tail(n = 1) %>%
  ungroup()

# 比较条件间差异
# 假设前3列为Control,后3列为Treatment
distal_pau$mean_ctrl <- rowMeans(distal_pau[, c("sample1", "sample2", "sample3")])
distal_pau$mean_treat <- rowMeans(distal_pau[, c("sample4", "sample5", "sample6")])
distal_pau$delta_PAU <- distal_pau$mean_treat - distal_pau$mean_ctrl

# t检验
distal_pau$pvalue <- apply(distal_pau, 1, function(row) {
  ctrl_vals <- as.numeric(row[c("sample1", "sample2", "sample3")])
  treat_vals <- as.numeric(row[c("sample4", "sample5", "sample6")])
  t.test(ctrl_vals, treat_vals)$p.value
})
distal_pau$padj <- p.adjust(distal_pau$pvalue, method = "BH")

# 显著APA基因
sig_apa <- distal_pau %>% filter(padj < 0.05, abs(delta_PAU) > 0.1)

第四步:APA结果的功能分析

白话解释: 发现了哪些基因的3'UTR变长或变短之后,下一步是问:这些变化有什么功能影响?短3'UTR的基因是否失去了重要的miRNA调控?这些基因富集在哪些通路中?

技术细节:

# === APA功能影响分析 ===
library(clusterProfiler)
library(org.Hs.eg.db)

# 1. 对3'UTR缩短基因做功能富集
shortened_genes <- sig_apa$Gene[sig_apa$delta_PAU < -0.1]

ego_short <- enrichGO(gene = shortened_genes,
                       OrgDb = org.Hs.eg.db,
                       keyType = "SYMBOL",
                       ont = "BP", pvalueCutoff = 0.05)
dotplot(ego_short, title = "3'UTR Shortened Genes - GO Enrichment")

# 2. 失去的miRNA结合位点分析
# 下载TargetScan预测结果
# 对每个缩短基因,找在proximal-distal之间区域的miRNA位点
library(GenomicRanges)

# 缩短区域(从proximal pA到distal pA)
lost_regions <- GRanges(
  seqnames = shortened_info$chr,
  ranges = IRanges(shortened_info$proximal_pa, shortened_info$distal_pa),
  strand = shortened_info$strand
)

# miRNA结合位点
mirna_sites <- import("targetscan_mirna_sites.bed")

# 找到在缩短区域中的miRNA位点
lost_mirna <- subsetByOverlaps(mirna_sites, lost_regions)
lost_mirna_summary <- table(lost_mirna$miRNA)
print(sort(lost_mirna_summary, decreasing = TRUE)[1:20])

# 3. APA与基因表达变化的关联
# 假设:3'UTR缩短 → 逃避miRNA降解 → 蛋白表达上调
apa_de_merge <- merge(sig_apa, de_results, by.x = "Gene", by.y = "gene_symbol")
cor.test(apa_de_merge$delta_PAU, apa_de_merge$log2FoldChange)
# 预期负相关:PDUI降低(缩短) 与 表达上调 相关

第五步:3'端专用测序数据分析

白话解释: 标准RNA-seq覆盖整个转录本,对APA的检测灵敏度有限。专门的3'端测序技术(如QuantSeq、3'READS、PAS-seq)只测3'末端区域,能更精确地定位polyA位点并量化其使用率。

技术细节:

# === QuantSeq 3' mRNA-Seq 分析 ===

# QuantSeq只产生3'端的单端reads

# 1. 比对(使用STAR,注意单端模式)
STAR --runThreadN 16 \
    --genomeDir star_index \
    --readFilesIn sample_R1.fq.gz \
    --readFilesCommand zcat \
    --outSAMtype BAM SortedByCoordinate \
    --outFileNamePrefix quantseq_sample_

# 2. 使用polyAtools进行pA位点识别
# 识别reads的polyA痕迹(internal priming过滤)
python polyAtools.py \
    --bam quantseq_sample_.bam \
    --genome hg38.fa \
    --output polya_sites.bed \
    --internal-priming-filter

# 3. 使用APAtrap分析QuantSeq数据
# APAtrap专为3'端测序设计
Rscript APAtrap.R \
    --bam quantseq_sample_.bam \
    --annotation hg38.gtf \
    --output apatrap_results.txt

# 4. 使用MAAPER (Model-based Analysis of APA using PAS-seq and RNA-seq)
Rscript MAAPER.R \
    --pas_bam pas_seq.bam \
    --rna_bam rnaseq.bam \
    --gtf annotation.gtf \
    --output maaper_results.txt

第六步:APA调控网络与转录因子关联

白话解释: APA不是随机发生的,它受到特定的RNA加工因子(如CFIm25/CFIm68、CPSF、CstF)调控。了解哪些调控因子在你的实验系统中变化,可以解释全局的APA模式改变。

技术细节:

# === APA调控因子分析 ===

# 关键APA调控因子
apa_regulators <- c(
  # CFIm复合物(促进distal pA使用 → 长UTR)
  "NUDT21",  # CFIm25
  "CPSF6",   # CFIm68
  # CstF复合物(促进proximal pA使用 → 短UTR)
  "CSTF2",   # CstF64
  "CSTF2T",  # CstF64tau
  "CSTF3",   # CstF77
  # CPSF复合物
  "CPSF1", "CPSF2", "CPSF3", "CPSF4",
  # 其他
  "PABPN1",  # nuclear poly(A) binding protein
  "FIP1L1",  # Fip1
  "PCF11"    # CF II
)

# 检查调控因子的差异表达
regulator_de <- de_results[de_results$gene_symbol %in% apa_regulators, ]
print(regulator_de[, c("gene_symbol", "log2FoldChange", "padj")])

# CFIm25下调 → 全局3'UTR缩短(已在多种肿瘤中验证)
# CstF64上调 → 全局3'UTR缩短

# 调控因子表达与PDUI变化的关联
cor_with_regulators <- sapply(apa_regulators, function(reg) {
  if (reg %in% rownames(expression_matrix)) {
    cor(expression_matrix[reg, ], mean_pdui_per_sample, use = "complete.obs")
  } else NA
})

实战命令速查

# DaPars快速流程
genomeCoverageBed -ibam sample.bam -bg -split > sample.bedgraph
python DaPars2_main.py config.txt

# QAPA快速流程
qapa build --db identifiers.txt --gencode_fasta transcripts.fa -o library
salmon index -t library.fa -i index
salmon quant -i index -l A -1 R1.fq.gz -2 R2.fq.gz -o quant_out
qapa quant --db library.metadata.txt quant_out/quant.sf > pau_results.txt

面试常问点

Q1: APA在肿瘤中有什么意义?

A: 肿瘤细胞普遍倾向使用proximal polyA位点(3'UTR全局缩短)。这使得原癌基因逃避miRNA介导的降解而上调表达,同时失去RBP结合位点改变mRNA命运。CFIm25下调是常见原因。3'UTR缩短与细胞增殖正相关,在乳腺癌、肺癌等多种肿瘤中被报道。

Q2: DaPars和QAPA的算法原理区别?

A: DaPars是de novo方法——从reads覆盖度的变化模式中推断proximal pA位点位置,不依赖已知pA位点数据库。QAPA是reference-based方法——利用已知pA位点数据库(PolyASite/PolyA_DB)构建参考转录本,通过Salmon定量各pA异构体的使用率。DaPars适合发现新pA位点,QAPA定量更精确但限于已知位点。

Q3: PDUI指标如何解读?

A: PDUI(Percentage of Distal polyA site Usage Index)范围0-1。PDUI=1表示所有转录本都使用远端pA(全部长UTR),PDUI=0表示全部使用近端pA(全部短UTR)。条件间ΔPDUI<0表示3'UTR缩短(转向proximal),ΔPDUI>0表示延长。通常|ΔPDUI|>0.2且统计显著才被认为是有意义的APA变化。

Q4: 标准RNA-seq检测APA的局限性是什么?

A: (1) 3'端reads覆盖可能不均匀(如oligo-dT建库有3'偏好,但随机引物建库无此偏好);(2) 对紧密相邻的pA位点分辨率不足;(3) 低表达基因的3'UTR区域深度不够;(4) polyA tail导致的内部priming假象。3'端专用测序(QuantSeq等)能克服这些局限。

Q5: APA如何影响mRNA的亚细胞定位?

A: 3'UTR中含有定位信号。例如,长3'UTR的beta-actin mRNA定位到细胞突起前端(由zipcode序列介导),短3'UTR版本则留在胞体。在神经元中,APA产生的长3'UTR mRNA被运输到树突进行局部翻译。3'UTR缩短可能破坏这些定位机制。


易错点

1. 使用非链特异性数据分析重叠基因

如果两个基因在基因组上重叠(如正义和反义转录本),非链特异性RNA-seq无法区分reads来源,导致APA假象。强烈建议使用链特异性数据。

2. 忽略internal priming假阳性

基因组中的A-rich区域(如>6个连续A)会被oligo-dT引物错误起始转录,产生假的polyA位点。需要过滤downstream genomic A-rich region导致的假阳性。

3. 覆盖度不足的基因强行分析

3'UTR区域reads数太少(如<30reads)时,PDUI估计方差极大。应设置最低覆盖度阈值,低于阈值的基因不分析。

4. 忽略基因表达量变化对PDUI的影响

如果一个基因整体表达量剧烈变化,可能影响PDUI的稳定估计。最好先确认表达量变化后,再独立评估APA是否也发生了变化。

5. 未区分coding region APA和3'UTR APA

有些APA事件发生在内含子中(IPA),产生截短的蛋白,其生物学意义与3'UTR APA完全不同。分析时应明确标注APA类型。


补充知识

APA数据库与资源

  • PolyASite 2.0:基于3'端测序数据的pA位点图谱
  • PolyA_DB 3:多物种pA位点数据库
  • APADB:APA注释数据库
  • APAatlas:人类组织APA图谱

其他APA分析工具

  • APAlyzer:R/Bioconductor包,支持多种APA类型检测
  • APARENT:基于深度学习预测polyA信号强度
  • InPAS:Bioconductor中的APA检测工具
  • mountainClimber:从RNA-seq检测3'UTR isoform变化

引用推荐

  • DaPars: Xia et al., Nature Communications, 2014
  • DaPars2: Li et al.(GitHub: 3UTR/DaPars2;相关资源论文 Feng et al., Nucleic Acids Research, 2018——TC3A数据库)
  • QAPA: Ha et al., Genome Biology, 2018
  • APA in cancer: Mayr & Bartel, Cell, 2009