跳转至

circRNA-miRNA互作分析

一句话概述

预测环状RNA(circRNA)作为miRNA海绵的竞争性内源RNA(ceRNA)功能,利用miRanda/TargetScan等工具进行circRNA-miRNA结合位点预测,构建ceRNA调控网络揭示基因表达调控机制。


核心知识点总览

知识点关键内容重要程度
ceRNA假说circRNA海绵miRNA→解除mRNA抑制⭐⭐⭐⭐⭐
miRNA结合预测miRanda/RNAhybrid/TargetScan⭐⭐⭐⭐⭐
circRNA鉴定CIRI2/CIRCexplorer2/find_circ⭐⭐⭐⭐
ceRNA网络构建circRNA-miRNA-mRNA三元网络⭐⭐⭐⭐
表达相关性竞争关系需要负相关验证⭐⭐⭐⭐
数据库资源circBase/circInteractome/StarBase⭐⭐⭐
功能验证RIP/pulldown/荧光素酶实验⭐⭐⭐
AGO-CLIP证据AGO结合数据支持的互作⭐⭐⭐

各步骤详解

第一步:ceRNA假说与circRNA海绵机制

白话解释: ceRNA(competing endogenous RNA)假说认为:含有相同miRNA结合位点的RNA分子之间存在"竞争"关系。circRNA因为环状结构不易被降解,可以稳定地"吸附"大量miRNA(像海绵一样),使这些miRNA无法抑制其靶mRNA,从而间接上调mRNA表达。经典例子是CDR1as/ciRS-7含有超过70个miR-7结合位点。

技术细节: ceRNA机制的关键要素: 1. circRNA在细胞中有足够的丰度 2. circRNA含有足够多的miRNA响应元件(MRE) 3. circRNA与miRNA的结合是功能性的(在RISC复合体中) 4. circRNA的表达变化能显著改变游离miRNA的有效浓度

ceRNA网络的三元关系: - circRNA ↔ miRNA(结合/海绵) - miRNA → mRNA(抑制/降解) - circRNA → mRNA(间接正调控:通过吸附miRNA解除抑制)

# ceRNA调控示意
#
# 正常状态:
# miR-7 →→→ 抑制 Target mRNA → 低表达
#
# circRNA(CDR1as)高表达时:
# CDR1as ←← 吸附 miR-7    Target mRNA → 高表达(解除抑制)
#   (海绵)
#
# 关键条件:
# 1. circRNA含≥多个miRNA结合位点
# 2. circRNA丰度足够高
# 3. miRNA在特定细胞中表达
# 4. 下游靶mRNA被同一miRNA调控

第二步:circRNA鉴定与定量

白话解释: 从RNA-seq数据中鉴定circRNA,需要找到"反向剪接"(back-splice)的reads——即reads跨越了环化接头(junction),5'剪接位点的碱基顺序被"倒过来"了。多个工具可以做这件事。

技术细节:

# === circRNA鉴定(CIRI2)===
# CIRI2从BWA比对结果中检测back-splice junction reads

# 1. BWA比对(需要使用BWA-MEM,不去除chimeric reads)
bwa mem -T 19 -t 16 genome.fa R1.fq.gz R2.fq.gz > sample.sam

# 2. CIRI2检测
perl CIRI2.pl \
    -I sample.sam \
    -O sample_circRNA.txt \
    -F genome.fa \
    -A annotation.gtf \
    -T 16

# === circRNA鉴定(CIRCexplorer2)===
# 1. STAR比对(检测chimeric reads)
STAR --runThreadN 16 \
    --genomeDir star_index \
    --readFilesIn R1.fq.gz R2.fq.gz \
    --readFilesCommand zcat \
    --outSAMtype BAM SortedByCoordinate \
    --chimSegmentMin 10 \
    --chimOutType Junctions \
    --outFileNamePrefix sample_

# 2. CIRCexplorer2 parse + annotate
CIRCexplorer2 parse -t STAR sample_Chimeric.out.junction \
    -b back_spliced_junction.bed  # 默认输出即为此文件名
CIRCexplorer2 annotate \
    -r ref.txt \
    -g genome.fa \
    -b back_spliced_junction.bed \
    -o circRNA_annotated.txt

# === circRNA定量(汇总junction reads数)===
# BSJ (back-splice junction) reads count作为circRNA表达量
# CPM归一化
# circRNA结果整理
import pandas as pd

# 读取CIRI2结果
circ_df = pd.read_csv("sample_circRNA.txt", sep="\t")

# 关键列:circRNA_ID, chr, start, end, #junction_reads, strand, gene_name
# 过滤:至少2个BSJ reads
circ_filtered = circ_df[circ_df['#junction_reads'] >= 2]

# 提取circRNA序列(用于下游miRNA结合预测)
# circRNA序列 = back-splice junction两端外显子序列的拼接
print(f"Total circRNAs detected: {len(circ_filtered)}")
print(f"Mean BSJ reads: {circ_filtered['#junction_reads'].mean():.1f}")

第三步:circRNA-miRNA结合位点预测

白话解释: 这一步的核心问题是:某个circRNA上有哪些miRNA可以结合?我们用miRanda、RNAhybrid、TargetScan等工具,将miRNA序列与circRNA序列进行互补配对预测。一般要求seed区(miRNA的2-8位)能完美匹配,且整体结合自由能足够低。

技术细节:

# === miRanda 预测 circRNA-miRNA结合 ===
# miRanda基于动态规划的序列互补+热力学稳定性

# 准备文件
# 1. miRNA成熟序列(mature miRNAs fasta)
# 从miRBase下载 mature.fa
# 2. circRNA序列(fasta格式)
# 从基因组中提取circRNA对应外显子序列

# 运行miRanda
miranda \
    mature_mirna.fa \
    circRNA_sequences.fa \
    -sc 140 \
    -en -20 \
    -scale 4 \
    -strict \
    -out miranda_results.txt

# 参数说明:
# -sc 140: 最小比对分数(默认140)
# -en -20: 最小自由能(kcal/mol,越低越稳定)
# -strict: 严格seed匹配(要求seed区完美配对)

# 解析结果
grep "^>" miranda_results.txt | \
    awk -F'\t' '{print $1"\t"$2"\t"$3"\t"$4}' > miranda_parsed.txt
# === RNAhybrid 预测 ===
# RNAhybrid计算最优互补结合的最小自由能(MFE)

RNAhybrid \
    -t circRNA_sequences.fa \
    -q mature_mirna.fa \
    -b 100 \
    -c \
    -f 2,7 \
    -e -25 \
    -p 0.05 \
    > rnahybrid_results.txt

# -f 2,7: 强制seed区(position 2-7)完美匹配
# -e -25: MFE阈值
# -p 0.05: p值阈值
# === TargetScan方法(适用于3'UTR,此处用于circRNA seed match)===
# TargetScan seed类型:
# 8mer: 完美配对 position 2-8 + A at position 1
# 7mer-m8: 完美配对 position 2-8
# 7mer-A1: 完美配对 position 2-7 + A at position 1
# 6mer: 完美配对 position 2-7

from Bio import SeqIO
import re

def find_seed_matches(circ_seq, mirna_seed, match_type="7mer-m8"):
    """在circRNA序列中搜索miRNA seed互补位点"""
    # miRNA seed (position 2-8)的互补序列
    complement = {'A': 'U', 'U': 'A', 'G': 'C', 'C': 'G'}
    seed_rc = ''.join(complement[b] for b in reversed(mirna_seed))
    # RNA中U替换为T用于搜索DNA序列
    seed_rc_dna = seed_rc.replace('U', 'T')

    matches = []
    for m in re.finditer(seed_rc_dna, str(circ_seq)):
        matches.append({
            'start': m.start(),
            'end': m.end(),
            'type': match_type
        })
    return matches

# 批量预测
results = []
for circ_record in SeqIO.parse("circRNA_sequences.fa", "fasta"):
    for mirna_record in SeqIO.parse("mature_mirna.fa", "fasta"):
        mirna_seq = str(mirna_record.seq)
        seed = mirna_seq[1:8]  # position 2-8
        matches = find_seed_matches(circ_record.seq, seed)
        if matches:
            results.append({
                'circRNA': circ_record.id,
                'miRNA': mirna_record.id,
                'num_sites': len(matches),
                'sites': matches
            })

import pandas as pd
results_df = pd.DataFrame(results)
# 按结合位点数排序(更多位点=更强的海绵效应)
results_df = results_df.sort_values('num_sites', ascending=False)

第四步:构建ceRNA网络

白话解释: 有了circRNA-miRNA的结合预测后,还需要找到同一个miRNA调控的mRNA靶基因,这样就能构建完整的circRNA-miRNA-mRNA三元调控网络。最后还要用表达数据验证:circRNA与mRNA应该正相关(它们竞争同一个miRNA),circRNA与miRNA应该负相关。

技术细节:

# === ceRNA网络构建 ===
library(igraph)
library(ggplot2)

# 1. circRNA-miRNA互作(来自miRanda/RNAhybrid预测)
circ_mirna <- read.table("miranda_parsed.txt", header = TRUE)
# 过滤:保留高置信度互作
circ_mirna_filtered <- circ_mirna[circ_mirna$score >= 150 & 
                                    circ_mirna$energy <= -25, ]

# 2. miRNA-mRNA互作(来自TargetScan/miRDB)
# 下载TargetScan预测结果
mirna_mrna <- read.table("targetscan_predictions.txt", header = TRUE, sep = "\t")
# 保留高置信度(cumulative weighted context++ score < -0.2,越负越强)
mirna_mrna_filtered <- mirna_mrna[mirna_mrna$context_pp_score < -0.2, ]

# 3. 构建三元网络
# 找到共享miRNA的circRNA-mRNA对
shared_mirnas <- intersect(circ_mirna_filtered$miRNA, mirna_mrna_filtered$miRNA)

# 构建边列表
edges_circ_mirna <- data.frame(
  from = circ_mirna_filtered$circRNA[circ_mirna_filtered$miRNA %in% shared_mirnas],
  to = circ_mirna_filtered$miRNA[circ_mirna_filtered$miRNA %in% shared_mirnas],
  type = "sponge"
)
edges_mirna_mrna <- data.frame(
  from = mirna_mrna_filtered$miRNA[mirna_mrna_filtered$miRNA %in% shared_mirnas],
  to = mirna_mrna_filtered$gene[mirna_mrna_filtered$miRNA %in% shared_mirnas],
  type = "inhibit"
)

all_edges <- rbind(edges_circ_mirna, edges_mirna_mrna)

# 创建网络图
g <- graph_from_data_frame(all_edges, directed = TRUE)
V(g)$type <- ifelse(grepl("^circ", V(g)$name), "circRNA",
                     ifelse(grepl("^hsa-mi", V(g)$name), "miRNA", "mRNA"))
V(g)$color <- c("circRNA" = "red", "miRNA" = "green", "mRNA" = "blue")[V(g)$type]

plot(g, vertex.size = 5, vertex.label.cex = 0.6,
     edge.arrow.size = 0.3, layout = layout_with_fr(g))

# 4. 表达相关性验证
# circRNA与mRNA应正相关(它们竞争同一个miRNA)
# circRNA与miRNA可能负相关(海绵效应)
cor_circ_mrna <- cor.test(expression$circRNA_X, expression$mRNA_Y)
cor_circ_mirna <- cor.test(expression$circRNA_X, expression$miR_Z)

第五步:ceRNA网络的表达验证

白话解释: 预测出来的ceRNA网络需要用实际表达数据来验证。如果一个circRNA真的在"海绵"某个miRNA,那么当circRNA表达升高时,该miRNA的有效浓度降低,其靶mRNA应该表达升高。因此需要验证circRNA-mRNA正相关、circRNA-miRNA负相关的模式。

技术细节:

# === 表达相关性验证 ===

# 需要同一样本的circRNA、miRNA、mRNA表达数据
# circRNA: 来自RNA-seq (BSJ reads count, CPM)
# miRNA: 来自small RNA-seq (RPM)
# mRNA: 来自RNA-seq (FPKM/TPM)

# 读取表达矩阵
circ_expr <- read.csv("circRNA_expression.csv", row.names = 1)
mirna_expr <- read.csv("miRNA_expression.csv", row.names = 1)
mrna_expr <- read.csv("mRNA_expression.csv", row.names = 1)

# 确保样本一致
common_samples <- Reduce(intersect, list(
  colnames(circ_expr), colnames(mirna_expr), colnames(mrna_expr)))

# 对每个预测的ceRNA关系计算相关性
validate_ceRNA <- function(circ_id, mirna_id, mrna_id) {
  circ_vals <- as.numeric(circ_expr[circ_id, common_samples])
  mirna_vals <- as.numeric(mirna_expr[mirna_id, common_samples])
  mrna_vals <- as.numeric(mrna_expr[mrna_id, common_samples])

  # circRNA vs mRNA (期望正相关)
  cor_cm <- cor.test(circ_vals, mrna_vals, method = "spearman")
  # circRNA vs miRNA (期望负相关)
  cor_ci <- cor.test(circ_vals, mirna_vals, method = "spearman")
  # miRNA vs mRNA (期望负相关)
  cor_im <- cor.test(mirna_vals, mrna_vals, method = "spearman")

  return(data.frame(
    circRNA = circ_id, miRNA = mirna_id, mRNA = mrna_id,
    cor_circ_mrna = cor_cm$estimate, p_circ_mrna = cor_cm$p.value,
    cor_circ_mirna = cor_ci$estimate, p_circ_mirna = cor_ci$p.value,
    cor_mirna_mrna = cor_im$estimate, p_mirna_mrna = cor_im$p.value
  ))
}

# 批量验证
validated_results <- do.call(rbind, apply(cerna_predictions, 1, function(row) {
  validate_ceRNA(row['circRNA'], row['miRNA'], row['mRNA'])
}))

# 筛选符合ceRNA模式的三元组
# 条件:circRNA-mRNA正相关 AND miRNA-mRNA负相关
valid_cerna <- validated_results %>%
  filter(cor_circ_mrna > 0.3 & p_circ_mrna < 0.05 &
         cor_mirna_mrna < -0.3 & p_mirna_mrna < 0.05)

第六步:利用数据库资源增强预测

白话解释: 除了从头预测,还可以利用已有的circRNA互作数据库来获取已验证或高置信度的circRNA-miRNA互作关系。这些数据库整合了AGO-CLIP实验数据、高通量验证结果和文献报道。

技术细节:

# === 数据库资源利用 ===

# 1. StarBase/ENCORI:基于AGO-CLIP数据的实验支持互作
# https://starbase.sysu.edu.cn/
# 下载circRNA-miRNA互作数据
starbase_interactions <- read.table("starbase_circRNA_miRNA.txt",
                                     header = TRUE, sep = "\t")
# 列:circRNA, miRNA, clipExpNum, pancancerNum, ...

# 2. circInteractome:circRNA互作预测
# https://circinteractome.nia.nih.gov/
# 提供circRNA的miRNA结合位点预测和RBP结合位点

# 3. circBank/circBase:circRNA基本信息和注释
# https://www.circbank.cn/

# 4. 取预测与数据库的交集
# 增加可信度
predicted_pairs <- paste(circ_mirna_filtered$circRNA, circ_mirna_filtered$miRNA)
database_pairs <- paste(starbase_interactions$circRNA, starbase_interactions$miRNA)
overlap <- intersect(predicted_pairs, database_pairs)
cat(sprintf("Predicted: %d\nDatabase-supported: %d\nOverlap: %d\n",
            length(predicted_pairs), length(database_pairs), length(overlap)))

实战命令速查

# circRNA鉴定
bwa mem -T 19 -t 16 genome.fa R1.fq.gz R2.fq.gz > sample.sam
perl CIRI2.pl -I sample.sam -O circ.txt -F genome.fa -A anno.gtf -T 16

# miRNA结合预测
miranda mature.fa circRNA.fa -sc 140 -en -20 -strict -out miranda_out.txt
RNAhybrid -t circRNA.fa -q mirna.fa -f 2,7 -e -25 > hybrid_out.txt

# ceRNA网络(R中构建)
# 见上文详细代码

面试常问点

Q1: ceRNA假说的核心条件是什么?在什么情况下circRNA的海绵功能成立?

A: 核心条件:(1) circRNA需要足够高的表达丰度(与miRNA浓度可比);(2) 含有足够多的MRE(miRNA结合位点);(3) miRNA的总量有限(竞争才有意义);(4) 共同靶标在同一时空表达。很多文献中报道的ceRNA关系因circRNA丰度太低而存在争议——如果circRNA拷贝数远低于miRNA,其海绵效应微乎其微。

Q2: 如何评估circRNA-miRNA结合预测的可靠性?

A: 多重证据策略:(1) 多工具交叉(miRanda + RNAhybrid + TargetScan取交集);(2) 数据库验证(ENCORI/StarBase中AGO-CLIP数据支持);(3) 结合位点数量(多个位点比单个更可靠);(4) 种间保守性(保守的结合位点更可能功能性);(5) 表达相关性验证。

Q3: circRNA与线性RNA的miRNA海绵功能有何区别?

A: circRNA因环状结构抵抗RNA外切酶降解,半衰期远长于线性RNA(>24h vs 数小时)。且部分circRNA含有大量密集的MRE(如CDR1as有>70个miR-7位点)。但大多数circRNA的MRE数量有限(1-5个),这时与3'UTR较长的mRNA相比,海绵效应可能并不显著。

Q4: AGO-CLIP数据如何支持circRNA-miRNA互作?

A: AGO-CLIP(如HITS-CLIP/PAR-CLIP/eCLIP)通过免疫沉淀AGO蛋白捕获正在被RISC复合体结合的RNA片段。如果在AGO-CLIP数据中发现circRNA的序列片段,说明该circRNA确实被加载到RISC中与miRNA互作。ENCORI/StarBase数据库整合了大量AGO-CLIP数据用于支持互作验证。

Q5: 如何实验验证circRNA的miRNA海绵功能?

A: (1) 双荧光素酶报告基因:将circRNA片段克隆到荧光素酶3'UTR,共转miRNA mimics检测抑制;(2) RNA pulldown:生物素标记circRNA探针pulldown结合的miRNA;(3) RIP-seq:AGO2免疫沉淀后检测结合的circRNA和miRNA;(4) 功能实验:过表达/敲低circRNA后检测miRNA靶基因表达变化。


易错点

1. 忽略circRNA丰度对海绵功能的影响

许多circRNA表达量极低(<10 copies/cell),而单个miRNA可达数千copies。低丰度circRNA无法有效竞争miRNA,其ceRNA功能成疑。应始终评估circRNA的绝对丰度。

2. 仅凭序列互补就确认互作

序列互补是必要不充分条件。需要额外证据:(1) 两者在同一细胞中共表达;(2) 表达相关性符合ceRNA模式;(3) 实验验证或数据库支持。

3. 忽略circRNA的亚细胞定位

作为miRNA海绵的circRNA应该在细胞质中(miRNA主要在胞浆发挥作用)。如果circRNA主要定位在细胞核,其海绵功能不成立。可通过核质分离RNA-seq或FISH确认定位。

4. 对非特异性结合位点过度解读

只有1个7mer seed match的预测互作可靠性低。建议设置更严格标准:8mer匹配,或多个7mer位点,或额外的3'端配对。

5. 未区分真实circRNA和线性剪接假象

RNA-seq中检测到的back-splice junction reads也可能来自模板切换(template switching)等技术假象。应设置minimum BSJ reads阈值(≥2-5),并用RNase R消化验证。


补充知识

circRNA的其他功能(非海绵)

  • 蛋白质支架/翻译:部分circRNA含IRES可翻译微肽
  • 转录调控:EIciRNA在转录位点促进宿主基因转录
  • 蛋白互作:circFoxo3与CDK2/p21形成三元复合物
  • 免疫调控:外源circRNA可激活RIG-I先天免疫

ceRNA网络分析工具

  • ENCORI/StarBase:最全面的RNA互作数据库
  • circMine:circRNA功能预测
  • Circlncnet:circRNA-lncRNA-mRNA网络
  • ceRNAR:R包构建ceRNA网络

引用推荐

  • CDR1as/ciRS-7: Hansen et al., Nature, 2013
  • ceRNA hypothesis: Salmena et al., Cell, 2011
  • circRNA catalog: Salzman et al., PLoS ONE, 2012
  • CIRI2: Gao et al., Briefings in Bioinformatics, 2018