跳转至

767. circRNA功能分析

一句话概述:环状RNA(circRNA)是首尾共价闭合的RNA分子,通过海绵吸附miRNA、结合蛋白质、甚至翻译成蛋白来发挥功能——就像一条咬住自己尾巴的蛇,这种特殊的环形结构让它不容易被降解,成为潜在的疾病标志物。


核心知识点速查表

概念白话解释关键工具
circRNA环状RNA,头尾相连反向剪接产生
BSJ反向剪接连接(Back-Splice Junction)circRNA的标志
miRNA海绵circRNA吸附miRNA使其失效竞争性内源RNA
CIRI2从RNA-seq鉴定circRNAPython
CIRCexplorer2注释circRNA的剪接模式Python
find_circ从STAR比对发现circRNAPython

一、原理(白话版)

1.1 circRNA是什么?

线性mRNA:5'---外显子1-外显子2-外显子3---3'(polyA)
  → 正常方向剪接(forward splicing)

环状RNA:外显子2-外显子3-[BSJ]-外显子2(首尾相连成环)
  → 反向剪接(back-splicing):下游外显子的3'端与上游外显子的5'端相连
  → 没有5'帽和3'polyA尾巴
  → 非常稳定(抗RNase R降解,半衰期比线性RNA长数倍)

circRNA的数量:
  人类基因组中已知超过100,000种circRNA
  大多数表达量低,但有些组织/疾病特异性高

circRNA的功能:
  ① miRNA海绵:吸附miRNA,解除miRNA对靶基因的抑制
  ② 蛋白质支架:结合蛋白质调节其功能
  ③ 翻译成蛋白:部分circRNA含IRES可被翻译
  ④ 调控亲本基因:影响自身线性转录本的表达

1.2 circRNA检测策略

关键:找到BSJ(反向剪接连接)读段

方法一(CIRI2):
  BWA比对 → 扫描嵌合比对 → 筛选BSJ → 多过滤 → circRNA列表

方法二(CIRCexplorer2):
  STAR比对 → 提取嵌合读段(Chimeric.out.junction) → 注释BSJ → circRNA

方法三(find_circ):
  Bowtie2比对 → 提取未比对读段 → 锚定比对 → 寻找反向剪接

最佳实践:至少用2个工具,取交集

二、circRNA鉴定流程

2.1 CIRI2流程

# ===== CIRI2流程 =====
# 安装:conda install -c bioconda ciri2

# Step 1: BWA比对(需要特殊参数保留嵌合比对)
bwa mem \
  -t 8 \                               # 线程数
  -T 19 \                              # 最低比对分数
  reference.fa \                       # 参考基因组
  sample_R1.fastq.gz \                 # R1
  sample_R2.fastq.gz \                 # R2
  > sample_bwa.sam                      # 输出SAM

# Step 2: 运行CIRI2
CIRI2 \
  -I sample_bwa.sam \                  # BWA比对结果
  -O sample_ciri2.txt \                # 输出circRNA列表
  -F reference.fa \                    # 参考基因组
  -A annotation.gtf \                  # 基因注释
  -T 8                                 # 线程数

# CIRI2输出格式:
# circRNA_ID  chr  start  end  junction_reads  SM_MS_SMS  ...
# chr1:1000|2000  chr1  1000  2000  15  5_3_7  ...
# junction_reads = BSJ支持读段数

2.2 CIRCexplorer2流程

# ===== CIRCexplorer2流程 =====
# 安装:pip install CIRCexplorer2

# Step 1: STAR比对(需要嵌合读段输出)
STAR \
  --runThreadN 8 \
  --genomeDir star_index/ \
  --readFilesIn sample_R1.fq.gz sample_R2.fq.gz \
  --readFilesCommand zcat \
  --outSAMtype BAM SortedByCoordinate \
  --chimSegmentMin 10 \                 # 关键:启用嵌合比对
  --chimOutType Junctions \             # 输出嵌合连接
  --outFileNamePrefix sample_

# Step 2: 解析嵌合连接
CIRCexplorer2 parse \
  -t STAR \                            # 比对工具类型
  sample_Chimeric.out.junction \       # STAR嵌合连接文件
  -b sample_back_spliced.bed            # 输出BSJ BED文件

# Step 3: 注释circRNA
CIRCexplorer2 annotate \
  -r ref_annotation.txt \              # 参考注释(refFlat格式)
  -g reference.fa \                    # 参考基因组
  -b sample_back_spliced.bed \         # BSJ BED文件
  -o sample_circRNA_annotated.txt       # 输出注释后的circRNA

# 输出关键列:
# chrom  start  end  name  score  strand  circType  geneName  isoformName
# circType: circRNA/ciRNA(环状内含子RNA)

2.3 多工具取交集

# ===== Python合并多工具结果 =====
import pandas as pd  # 导入pandas

# 读取CIRI2结果
ciri = pd.read_csv("sample_ciri2.txt", sep="\t")
ciri_set = set(ciri["circRNA_ID"])  # CIRI2检测到的circRNA ID

# 读取CIRCexplorer2结果
ce2 = pd.read_csv("sample_circRNA_annotated.txt", sep="\t", header=None)
ce2["id"] = ce2[0] + ":" + ce2[1].astype(str) + "|" + ce2[2].astype(str)
ce2_set = set(ce2["id"])  # CIRCexplorer2检测到的circRNA ID

# 取交集
overlap = ciri_set & ce2_set  # 两个工具都检测到的
print(f"CIRI2: {len(ciri_set)} circRNAs")
print(f"CIRCexplorer2: {len(ce2_set)} circRNAs")
print(f"交集: {len(overlap)} circRNAs (高置信)")

# 只保留高置信circRNA(至少2个BSJ reads + 2个工具)
high_conf = ciri[
    (ciri["circRNA_ID"].isin(overlap)) &
    (ciri["#junction_reads"] >= 2)       # 至少2条BSJ reads
]
print(f"高置信circRNA: {len(high_conf)}")
high_conf.to_csv("circRNA_high_confidence.tsv", sep="\t", index=False)

三、circRNA功能分析

3.1 miRNA海绵分析

# ===== miRNA海绵功能预测 =====
import pandas as pd  # 导入pandas

# circRNA上的miRNA结合位点预测
# 工具:miRanda, TargetScan, RNAhybrid

# 读取circRNA序列
from Bio import SeqIO  # 导入BioPython
circrna_seqs = {}
for record in SeqIO.parse("circRNA_sequences.fasta", "fasta"):
    circrna_seqs[record.id] = str(record.seq)

# 用miRanda预测结合位点
import subprocess
for circ_id, seq in list(circrna_seqs.items())[:10]:  # 前10个circRNA
    # 保存临时文件
    with open("tmp_circ.fa", "w") as f:
        f.write(f">{circ_id}\n{seq}\n")

    # 运行miRanda
    result = subprocess.run([
        "miranda",
        "mature_mirnas.fa",         # 成熟miRNA序列
        "tmp_circ.fa",              # circRNA序列
        "-sc", "140",               # 最低分数
        "-en", "-20",               # 最低能量
        "-strict"                   # 严格模式
    ], capture_output=True, text=True)

    # 解析结果
    binding_sites = result.stdout.count(">>")  # 统计结合位点数
    print(f"{circ_id}: {binding_sites} miRNA binding sites")

3.2 circRNA编码潜力预测

# ===== 预测circRNA的翻译潜力 =====
# 一些circRNA含有IRES(内部核糖体进入位点),可以被翻译

# 方法一:ORF预测
from Bio.Seq import Seq  # 导入Seq

def find_orfs(sequence, min_length=30):
    """在circRNA序列中查找ORF(需要考虑环形特性)"""
    # 因为是环形,需要检查跨BSJ的ORF
    doubled = sequence + sequence  # 重复序列模拟环形
    orfs = []

    for frame in range(3):  # 3个阅读框
        i = frame
        while i < len(doubled) - 3:
            codon = doubled[i:i+3]
            if codon == "ATG":  # 找到起始密码子
                # 寻找终止密码子
                for j in range(i+3, min(i+len(sequence), len(doubled)-2), 3):
                    stop = doubled[j:j+3]
                    if stop in ["TAA", "TAG", "TGA"]:
                        orf_len = (j - i) // 3  # ORF长度(aa)
                        if orf_len >= min_length:
                            orfs.append({
                                "start": i % len(sequence),
                                "length_aa": orf_len,
                                "crosses_bsj": i + orf_len*3 > len(sequence)
                            })
                        break
            i += 3
    return orfs

# 对高置信circRNA预测ORF
for circ_id, seq in circrna_seqs.items():
    orfs = find_orfs(seq)
    if orfs:
        print(f"{circ_id}: 发现 {len(orfs)} 个ORF (最长 {max(o['length_aa'] for o in orfs)} aa)")

四、常见报错与解决

报错信息原因解决方案
CIRI2: no circRNAsBWA参数不对确保用bwa mem -T 19
STAR: no chimeric reads未启用嵌合模式--chimSegmentMin 10
假阳性过多单工具结果多工具取交集(≥2个)
BSJ reads太少测序深度不够增加测序深度(≥100M reads)
RNase R处理后仍有线性RNA消化不完全增加RNase R用量或时间
circRNA序列提取错误坐标解析问题检查BSJ坐标是否1-based

五、面试高频问题

Q1: circRNA和线性RNA怎么区分?

A: ①生物信息学:BSJ(反向剪接连接)读段是circRNA的唯一标志,线性RNA不存在BSJ;②实验验证:RNase R处理(消化线性RNA保留环形)、divergent PCR(跨BSJ的引物)、Northern blot(不同迁移率)。

Q2: circRNA作为miRNA海绵的证据?

A: 经典例子是CDR1as/ciRS-7,含有超过70个miR-7结合位点。但大多数circRNA的miRNA结合位点不多(1-3个),"海绵"功能是否显著要看:①circRNA丰度是否足够竞争;②结合位点数量;③共定位在同一亚细胞区室;④过表达/敲低circRNA后miRNA靶基因是否变化。

Q3: circRNA在疾病中的应用前景?

A: ①生物标志物:circRNA在血液/外泌体中稳定存在,适合液体活检;②治疗靶点:某些circRNA在肿瘤中异常表达;③药物载体:人工circRNA可作为mRNA疫苗的替代(更稳定);④CIRCpedia v3(2025)收录了260万+种circRNA。


六、速查表

# ===== circRNA速查 =====

# CIRI2
bwa mem -t 8 -T 19 ref.fa R1.fq R2.fq > aligned.sam
CIRI2 -I aligned.sam -O circs.txt -F ref.fa -A anno.gtf

# CIRCexplorer2
STAR --chimSegmentMin 10 --chimOutType Junctions ...
CIRCexplorer2 parse -t STAR Chimeric.out.junction
CIRCexplorer2 annotate -r ref.txt -g ref.fa -b bsj.bed

# 最佳实践
# 至少2个工具取交集
# BSJ reads ≥ 2
# RNase R实验验证关键circRNA

# 功能分析
# miRNA海绵 → miRanda/TargetScan预测结合位点
# 蛋白编码 → ORF预测 + IRES搜索
# 蛋白结合 → RBP结合位点预测(RBPmap)

# 数据库资源
# CIRCpedia v3: circRNA注释和表达
# circBase: circRNA数据库
# CSCD: 癌症相关circRNA