跳转至

长非编码RNA分析

一句话概述

从转录组数据中鉴定长非编码RNA(lncRNA),利用CPC2/CNCI评估编码潜能,预测lncRNA的顺式/反式靶基因,并进行功能注释与疾病关联分析。


核心知识点总览

知识点关键内容重要程度
lncRNA鉴定流程组装→过滤→编码潜能评估⭐⭐⭐⭐⭐
编码潜能评估CPC2/CNCI/CPAT/FEELnc多工具⭐⭐⭐⭐⭐
lncRNA分类sense/antisense/intergenic/intronic⭐⭐⭐⭐
靶基因预测顺式(cis)/反式(trans)靶标预测⭐⭐⭐⭐
功能注释GSEA/共表达/ceRNA网络⭐⭐⭐⭐
差异表达lncRNA差异分析与聚类⭐⭐⭐
亚细胞定位核/胞浆定位影响功能机制⭐⭐⭐
数据库资源NONCODE v7.0/LNCipedia 5/lncRNAdb⭐⭐⭐

各步骤详解

第一步:lncRNA的生物学基础

白话解释: 长非编码RNA(lncRNA)是长度超过200nt但不编码蛋白质的RNA分子。它们曾被认为是"转录垃圾",现在被发现参与基因表达调控、染色质修饰、细胞分化等几乎所有生命过程。人类基因组中lncRNA的数量甚至超过蛋白编码基因。

技术细节: lncRNA根据基因组位置分类: - lincRNA(long intergenic ncRNA):位于两个蛋白编码基因之间 - Antisense lncRNA:与蛋白编码基因反义链重叠 - Sense intronic:位于蛋白编码基因内含子中 - Sense overlapping:与蛋白编码基因外显子重叠 - Bidirectional:与蛋白编码基因启动子区双向转录

lncRNA的功能机制: - 表观遗传调控(招募PRC2/LSD1等复合物) - 转录调控(增强子RNA、启动子干扰) - 转录后调控(mRNA稳定性、翻译调控) - miRNA海绵(ceRNA假说) - 蛋白质支架/分子诱饵

# lncRNA特征与mRNA的区别
# | 特征 | lncRNA | mRNA |
# |------|--------|------|
# | 外显子数 | 较少(2-3) | 较多 |
# | 表达水平 | 偏低 | 较高 |
# | 组织特异性 | 高 | 相对低 |
# | 保守性 | 低(一级序列) | 高 |
# | PolyA尾 | 部分有 | 大多有 |
# | 5'cap | 有 | 有 |

第二步:从RNA-seq数据鉴定lncRNA

白话解释: 从RNA-seq数据中找lncRNA的基本思路是:先组装所有转录本,然后排除已知的蛋白编码基因,再对剩下的未注释转录本做编码潜能评估,保留"确实不编码蛋白"的转录本作为候选lncRNA。

技术细节: 标准流程: 1. 序列比对(HISAT2/STAR) 2. 转录本组装(StringTie/Cufflinks) 3. 合并转录本(StringTie merge/TACO) 4. 过滤已知蛋白编码转录本 5. 长度过滤(>200nt)和外显子数过滤(≥2) 6. 编码潜能评估

# === lncRNA鉴定流程 ===

# Step1: 比对
hisat2 -x genome_index -1 R1.fq.gz -2 R2.fq.gz \
    --rna-strandness RF --dta -p 16 \
    -S sample.sam
samtools sort -@ 8 -o sample.sorted.bam sample.sam

# Step2: 转录本组装
stringtie sample.sorted.bam \
    -G reference.gtf \
    -o sample_assembled.gtf \
    -p 16 -l STRG

# Step3: 合并所有样本的组装结果
stringtie --merge \
    -G reference.gtf \
    -o merged.gtf \
    -m 200 \
    sample1.gtf sample2.gtf sample3.gtf

# Step4: 与已知注释比较(gffcompare)
gffcompare -r reference.gtf -o gffcmp merged.gtf

# Step5: 过滤候选lncRNA
# 保留class_code为 u(intergenic), x(antisense), i(intronic) 的转录本
awk '$3=="transcript"' gffcmp.annotated.gtf | \
    grep -E 'class_code "[uxi]"' > candidate_lncrna.gtf

# Step6: 长度和外显子过滤
# 转录本长度 > 200nt, 外显子数 >= 2
python filter_lncrna.py candidate_lncrna.gtf --min-length 200 --min-exon 2 \
    > filtered_candidates.gtf

# 提取序列
gffread filtered_candidates.gtf -g genome.fa -w candidate_lncrna.fa

第三步:编码潜能评估——CPC2与CNCI

白话解释: 过滤出来的候选转录本,还需要确认它们真的不编码蛋白质。CPC2和CNCI是两个最常用的编码潜能评估工具。CPC2通过ORF质量和蛋白数据库比对来判断,CNCI则分析核苷酸三联体频率的模式来区分编码和非编码RNA。

技术细节:

# === CPC2 编码潜能评估 ===
# CPC2: Coding Potential Calculator 2(与CPC1不同,CPC2不需要蛋白数据库比对)
# 基于4个序列内在特征:ORF长度、Fickett TESTCODE、等电点(pI)和ORF完整性
# 使用SVM分类器,alignment-free,物种中性模型,速度比CPC1快约1000倍

# 安装
# git clone https://github.com/gao-lab/CPC2_standalone.git

# 运行CPC2
python CPC2.py -i candidate_lncrna.fa -o cpc2_results

# 输出格式: ID, peptide_length, Fickett_score, isoelectric_point, ORF_integrity, coding_probability, label
# label: coding / noncoding
# 保留 noncoding 的转录本
awk '$NF=="noncoding"' cpc2_results.txt | cut -f1 > cpc2_noncoding_ids.txt

# === CNCI 编码潜能评估 ===
# CNCI: Coding-Non-Coding Index(2013年发布,已有升级版CNIT,2019年)
# 基于邻接核苷酸三联体(ANT)频率分类,alignment-free
# 注意:CNCI依赖Python 2和libsvm-3.0,兼容性可能有问题;CNIT是其更新版本

# 运行CNCI
python CNCI.py -f candidate_lncrna.fa -o cnci_results -m ve -p 8
# -m ve: vertebrate model (脊椎动物)
# -m pl: plant model (植物)

# 输出: Transcript ID, index, score, start, end, label
# 保留 noncoding
awk '$NF=="noncoding"' cnci_results/CNCI.index | cut -f1 > cnci_noncoding_ids.txt

# === CPAT 编码潜能评估(当前版本3.0.5)===
# CPAT: Coding Potential Assessment Tool
# 基于ORF大小、转录本长度、Fickett分数、六聚体分数(v3.0+用转录本长度替代了ORF覆盖度)
# 使用逻辑回归模型,alignment-free,可针对特定物种重新训练模型

cpat.py -g candidate_lncrna.fa \
    -d Human_logitModel.RData \
    -x Human_Hexamer.tsv \
    -o cpat_results
# Human coding probability cutoff: 0.364(灵敏度和特异度均为0.966)
# 注意:对小ORF/微肽分析,0.364阈值可能过高,可考虑降至0.109
awk '$NF < 0.364' cpat_results.ORF_prob.tsv | cut -f1 > cpat_noncoding_ids.txt

# === 取交集(多工具共识)===
comm -12 <(sort cpc2_noncoding_ids.txt) <(sort cnci_noncoding_ids.txt) | \
    comm -12 - <(sort cpat_noncoding_ids.txt) > consensus_lncrna_ids.txt

echo "Final lncRNA count: $(wc -l < consensus_lncrna_ids.txt)"

第四步:lncRNA分类与基本特征分析

白话解释: 确认了哪些是lncRNA后,需要对它们进行分类(根据基因组位置关系),并分析基本特征——长度分布、外显子数、表达水平等。这些特征可以帮助理解lncRNA的潜在功能。

技术细节:

# === lncRNA分类与特征分析 ===
library(GenomicFeatures)
library(rtracklayer)

# 读取lncRNA GTF和参考注释
lncrna_gtf <- import("final_lncrna.gtf")
ref_gtf <- import("reference.gtf")
protein_coding <- ref_gtf[ref_gtf$gene_biotype == "protein_coding"]

# 基于gffcompare class_code分类
# u: intergenic (lincRNA)
# x: antisense
# i: intronic (sense)
# o: sense overlapping

# 统计各类别
class_counts <- table(lncrna_gtf$class_code)
barplot(class_counts, main = "lncRNA Classification",
        xlab = "Class", ylab = "Count")

# 特征比较: lncRNA vs mRNA
# 1. 转录本长度
lncrna_lengths <- width(lncrna_gtf[lncrna_gtf$type == "transcript"])
mrna_lengths <- width(protein_coding[protein_coding$type == "transcript"])

# 2. 外显子数
lncrna_exons <- table(lncrna_gtf[lncrna_gtf$type == "exon"]$transcript_id)
mrna_exons <- table(protein_coding[protein_coding$type == "exon"]$transcript_id)

# 可视化比较
library(ggplot2)
df_compare <- data.frame(
  length = c(lncrna_lengths, mrna_lengths),
  type = c(rep("lncRNA", length(lncrna_lengths)),
           rep("mRNA", length(mrna_lengths)))
)
ggplot(df_compare, aes(x = log10(length), fill = type)) +
  geom_density(alpha = 0.5) +
  theme_minimal() +
  labs(title = "Transcript Length Distribution")

第五步:lncRNA靶基因预测

白话解释: lncRNA通过不同机制调控基因表达。预测靶基因主要两种策略:(1) 顺式作用(cis-acting)——lncRNA调控其基因组邻近的基因;(2) 反式作用(trans-acting)——lncRNA通过碱基互补配对或蛋白介导调控远距离基因。

技术细节:

# === Cis-靶基因预测 ===
# 策略:lncRNA上下游100kb内的蛋白编码基因为潜在cis靶标

library(GenomicRanges)

# lncRNA位置
lncrna_gr <- GRanges(lncrna_info$chr,
                      IRanges(lncrna_info$start, lncrna_info$end),
                      strand = lncrna_info$strand)
names(lncrna_gr) <- lncrna_info$gene_id

# 扩展100kb窗口
lncrna_extended <- resize(lncrna_gr, width = width(lncrna_gr) + 200000,
                           fix = "center")

# 蛋白编码基因位置
pc_gr <- GRanges(pc_genes$chr,
                  IRanges(pc_genes$start, pc_genes$end))
names(pc_gr) <- pc_genes$gene_id

# 找重叠
cis_targets <- findOverlaps(lncrna_extended, pc_gr)
cis_pairs <- data.frame(
  lncRNA = names(lncrna_extended)[queryHits(cis_targets)],
  target = names(pc_gr)[subjectHits(cis_targets)]
)

# 进一步用表达相关性过滤
# 只保留 |Pearson r| > 0.6 且 p < 0.05 的pair
cor_results <- apply(cis_pairs, 1, function(row) {
  cor.test(expression_matrix[row[1], ], expression_matrix[row[2], ])
})
cis_pairs$correlation <- sapply(cor_results, function(x) x$estimate)
cis_pairs$pvalue <- sapply(cor_results, function(x) x$p.value)
cis_pairs_sig <- cis_pairs[abs(cis_pairs$correlation) > 0.6 & cis_pairs$pvalue < 0.05, ]
# === Trans-靶基因预测 ===
# 策略1:表达相关性(共表达网络)
# 策略2:碱基互补配对(RNAplex/IntaRNA)

# 策略2示例:使用RNAplex预测RNA-RNA互作
import subprocess
import pandas as pd

# 批量预测lncRNA与mRNA的互作能量
results = []
for lncrna_id in lncrna_sequences:
    for mrna_id in mrna_sequences:
        cmd = f"RNAplex -q {lncrna_sequences[lncrna_id]} -t {mrna_sequences[mrna_id]}"
        output = subprocess.check_output(cmd, shell=True).decode()
        energy = float(output.strip().split()[-1].strip('()'))
        if energy < -30:  # 自由能阈值
            results.append({
                'lncRNA': lncrna_id,
                'mRNA': mrna_id,
                'energy': energy
            })

trans_targets = pd.DataFrame(results)
# 使用LncTar预测lncRNA靶基因
# LncTar基于碱基互补配对和自由能计算
java -jar LncTar.jar \
    -l lncrna_sequences.fa \
    -m mrna_sequences.fa \
    -o lnctar_results.txt \
    -t -0.1

第六步:lncRNA功能注释

白话解释: lncRNA本身功能未知,但可以通过其靶基因的功能来"借东风"——如果一个lncRNA的靶基因都富集在免疫通路,那这个lncRNA可能参与免疫调控。这就是"guilt by association"(关联定罪)策略。

技术细节:

# === lncRNA功能注释(guilt by association)===
library(clusterProfiler)
library(org.Hs.eg.db)

# 对每个lncRNA的靶基因做GO/KEGG富集
lncrna_of_interest <- "XLOC_001234"
targets <- cis_pairs_sig$target[cis_pairs_sig$lncRNA == lncrna_of_interest]

# GO富集
ego <- enrichGO(gene = targets,
                OrgDb = org.Hs.eg.db,
                keyType = "SYMBOL",
                ont = "BP",
                pvalueCutoff = 0.05)
dotplot(ego, showCategory = 15)

# KEGG富集
target_entrez <- bitr(targets, fromType = "SYMBOL",
                       toType = "ENTREZID", OrgDb = org.Hs.eg.db)
ekegg <- enrichKEGG(gene = target_entrez$ENTREZID,
                     organism = "hsa", pvalueCutoff = 0.05)

# === 基于共表达网络的功能注释(批量) ===
# WGCNA找lncRNA所在模块,用模块基因功能代表lncRNA功能
library(WGCNA)

# 合并lncRNA和mRNA表达矩阵
combined_expr <- rbind(lncrna_expr, mrna_expr)

# 运行WGCNA(简化)
net <- blockwiseModules(t(combined_expr), power = 6,
                         TOMType = "unsigned", minModuleSize = 30)

# 找包含lncRNA的模块及其蛋白编码基因
module_colors <- net$colors
lncrna_modules <- module_colors[rownames(lncrna_expr)]

第七步:lncRNA差异表达与疾病关联

白话解释: 与mRNA差异分析类似,我们可以找到在疾病和正常组织之间差异表达的lncRNA,这些可能是疾病的潜在标志物或功能参与者。结合已有的lncRNA-疾病关联数据库,可以做更深入的功能推断。

技术细节:

# === lncRNA差异表达 ===
library(DESeq2)

# 从featureCounts定量(使用包含lncRNA的GTF)
# featureCounts -a combined_annotation.gtf -o counts.txt *.bam
count_matrix <- read.table("counts.txt", header = TRUE, row.names = 1)

# 分离lncRNA counts
lncrna_ids <- read.table("consensus_lncrna_ids.txt")$V1
lncrna_counts <- count_matrix[rownames(count_matrix) %in% lncrna_ids, ]

# DESeq2差异分析
dds <- DESeqDataSetFromMatrix(countData = lncrna_counts,
                               colData = sample_info,
                               design = ~ condition)
dds <- DESeq(dds)
res <- results(dds, contrast = c("condition", "Disease", "Control"))
res_sig <- subset(res, padj < 0.05 & abs(log2FoldChange) > 1)

# 火山图
library(EnhancedVolcano)
EnhancedVolcano(res, lab = rownames(res),
                x = 'log2FoldChange', y = 'pvalue',
                title = 'lncRNA Differential Expression')

实战命令速查

# 一站式lncRNA鉴定
hisat2 -x genome -1 R1.fq.gz -2 R2.fq.gz --dta -p 16 | samtools sort -o aligned.bam
stringtie aligned.bam -G ref.gtf -o assembled.gtf -p 16
gffcompare -r ref.gtf assembled.gtf
# 过滤 + 编码潜能评估
python CPC2.py -i candidates.fa -o cpc2_out
python CNCI.py -f candidates.fa -o cnci_out -m ve -p 8
cpat.py -g candidates.fa -d model.RData -x hexamer.tsv -o cpat_out

面试常问点

Q1: 如何判断一个转录本是lncRNA而非mRNA?

A: 多重证据策略:(1) 长度>200nt排除小RNA;(2) 无显著ORF(<100aa或无完整ORF);(3) 多个编码潜能工具(CPC2/CNCI/CPAT)一致判定为non-coding;(4) 与已知蛋白数据库(SwissProt/Pfam)无显著匹配;(5) 与已知lncRNA数据库(NONCODE/LNCipedia)注释一致。

Q2: CPC2和CNCI的算法区别?

A: CPC2基于ORF质量特征(ORF长度、完整性、Fickett TESTCODE评分)和isoelectric point,使用SVM分类器。CNCI基于邻接核苷酸三联体(Adjacent Nucleotide Triplets)的频率分布差异,利用编码序列与非编码序列在密码子使用频率上的差异进行分类。两者都是alignment-free工具,不需要序列数据库比对——注意CPC2与CPC1不同,CPC1需要比对UniRef90等蛋白数据库,而CPC2只使用序列内在特征,速度比CPC1快约1000倍。CNCI运行速度相对较慢(处理数千条序列需约20分钟),但适合无参考物种。

Q3: lncRNA靶基因预测中cis和trans的区别?

A: Cis-靶基因是lncRNA在基因组上邻近(通常100kb内)的基因,lncRNA可能通过染色质环、局部转录调控等机制影响它们。Trans-靶基因是远距离或不同染色体上的基因,lncRNA通过碱基互补配对(RNA-RNA互作)或蛋白介导发挥作用。Cis预测较可靠(有距离约束),trans预测假阳性率高,需要更严格的过滤。

Q4: 为什么lncRNA研究中共表达分析很重要?

A: lncRNA功能注释困难(无蛋白产物可检测),而共表达分析利用"功能相关的基因倾向于共表达"的原则,通过lncRNA与已知功能基因的表达相关性来推断lncRNA功能。WGCNA等方法可以把lncRNA和mRNA放入同一网络,找到lncRNA所在的功能模块。

Q5: lncRNA数据库有哪些?各有什么特点?

A: NONCODE:最全面的lncRNA数据库,覆盖动植物多物种,当前版本v7.0(2025年)整合了2061个人类scRNA-seq数据集,涵盖1400万高质量单细胞,注释了94,843个lncRNA的单细胞表达谱。LNCipedia:侧重人类lncRNA,提供结构和编码潜能评估,当前版本5.x(2019年),含127,802转录本、56,946基因。lncRNAdb:经实验验证的lncRNA,但已较久未更新。LncBook(中国):整合多数据库的人类lncRNA资源。TANRIC:TCGA中lncRNA表达与临床关联。lnc2cancer:lncRNA与癌症关联数据库。


易错点

1. 链特异性信息丢失

lncRNA鉴定强烈依赖链特异性测序(strand-specific RNA-seq)。非链特异性数据无法区分正义和反义转录本,导致lncRNA分类错误(如antisense被误判为sense overlapping)。

2. 单一工具判定编码潜能

只用一个工具(如仅CPC2)判断编码潜能不够可靠。推荐至少用2-3个工具取交集,减少假阳性。不同工具的原理不同,互补性好。

3. 忽略小ORF蛋白(smORF)

近年发现许多"lncRNA"实际含有功能性小开放阅读框(<100aa),翻译出微肽(micropeptide)。仅凭长度筛选可能遗漏这些情况。可用Ribo-seq数据验证翻译活性。

4. 跨物种分析忽略保守性差异

lncRNA一级序列保守性远低于mRNA,直接做跨物种同源性比较(如BLAST)往往找不到同源物。应考虑结构保守性、位置保守性(synteny)或功能保守性。

5. 表达量过低的lncRNA强行分析

lncRNA普遍表达量低、高组织特异性。如果某lncRNA在目标组织中几乎不表达(如CPM<1),其差异分析和共表达分析都不可靠。应设置合理的表达过滤阈值。


补充知识

lncRNA实验验证方法

  • RNA-FISH:原位杂交确认亚细胞定位
  • RIP-seq/CLIP-seq:确认结合蛋白
  • ChIRP/CHART/RAP:确认lncRNA在染色质上的结合位点
  • CRISPR-KO/ASO:功能缺失实验验证功能
  • Ribo-seq:排除翻译活性

前沿方向

  • 空间转录组中的lncRNA定位分析
  • 单细胞水平lncRNA表达异质性(NONCODE v7.0已整合scRNA-seq数据)
  • lncRNA治疗靶点开发(如ASO药物)
  • 基于深度学习的lncRNA编码潜能预测(如LncRNA-BERT,2025年;在benchmark中深度学习工具总体优于传统SVM/LR方法)
  • RNA语言模型在lncRNA功能注释中的应用

引用推荐

  • CPC2: Kang et al., Nucleic Acids Research, 2017(alignment-free,SVM分类器)
  • CNCI: Sun et al., Nucleic Acids Research, 2013(升级版CNIT: Guo et al., NAR, 2019)
  • CPAT: Wang et al., Nucleic Acids Research, 2013(当前版本3.0.5,逻辑回归,可重训练)
  • FEELnc: Wucher et al., Nucleic Acids Research, 2017(随机森林,含完整lncRNA注释流程)
  • NONCODE v7.0: 2025年更新,整合scRNA-seq数据
  • LNCipedia 5: Volders et al., Nucleic Acids Research, 2019