1. 从一张"表达量矩阵"说起:为什么环状RNA定量不能直接套用线性RNA的流程
做转录组分析的人,第一次拿到环状RNA(circRNA)项目时,最容易犯的错误就是把线性RNA那套定量逻辑直接搬过来。我见过不少同行,用常规的比对加计数流程跑完一圈,结果发现同一个样本里,同一个基因位点产出的环状RNA表达量忽高忽低,重复样本之间相关性差得离谱,最后归因于"生物学差异大"。实际上,问题往往出在定量方法本身没有处理环状RNA特有的结构。
环状RNA是由前体mRNA通过反向剪接(back-splicing)形成的共价闭合环状分子,它的特征序列是跨越剪接位点的反向剪接连接点(back-splice junction,简称BSJ)。这个连接点在基因组上并不存在,只在环状RNA分子上出现。所以定量环状RNA,本质上是在数"有多少条读段跨越了BSJ"。听起来简单,但真正落地时会遇到几个绕不开的麻烦:BSJ附近序列和线性转录本高度重叠,读段比对时容易错误分配;不同环状RNA的BSJ序列长度不一,有的短到十几bp,比对特异性差;还有剪接体转换(isoform switching)的问题——同一个基因位点可能产生多个环状RNA异构体,它们共享部分外显子,定量时互相干扰。
CIRIquant这套工具就是冲着这些痛点来的。它不是一个单纯的比对计数脚本,而是一条完整的分析链路:从读段比对、BSJ识别、环状RNA重构,到表达量定量,再到剪接体转换的统计检验。我第一次用它是在一个作物胁迫处理的转录组项目里,当时手头有十几个样本,线性RNA的差异表达结果很漂亮,但环状RNA这边用老方法怎么都跑不出稳定的重复性。换成CIRIquant之后,样本间相关性明显改善,而且它给出的剪接体转换结果直接指向了几个有意思的候选位点。
这篇文章我打算把CIRIquant的完整使用逻辑拆开讲清楚。不是照着手册念参数,而是从"为什么这么设计"的角度,把定量原理、剪接体转换的识别机制、实操中的参数取舍、以及我踩过的坑都摊开来说。适合已经做过基础转录组分析、想深入环状RNA定量的同行,也适合刚接触circRNA、想找一套可靠流程的初学者。读完之后,你应该能独立跑通一套从原始读段到剪接体转换结果的完整分析,并且知道每一步在干什么、哪里容易出问题。
2. CIRIquant的定量内核:BSJ计数背后的比对策略与表达量归一化
2.1 为什么不能只靠"跨BSJ读段数"直接当表达量
很多人对环状RNA定量的第一直觉是:数一数有多少条读段跨越了BSJ,这个数就是表达量。这个思路方向没错,但直接用会出大问题。原因在于,跨越BSJ的读段数量不仅取决于环状RNA分子的丰度,还受好几个因素影响:环状RNA本身的长度、测序深度、读段长度、以及BSJ附近序列的比对唯一性。
举个具体的例子。假设有两个环状RNA,A的长度是200nt,B的长度是1500nt,它们在细胞里的分子数其实一样多。测序时,A因为短,单位分子能产生的跨BSJ读段比例反而更高;B因为长,大部分读段落在环状分子内部,不跨越BSJ。如果只数跨BSJ读段,A会被高估,B会被低估。所以CIRIquant在定量时,不是简单计数,而是引入了有效长度归一化的概念,类似线性RNA定量里RPKM/TPM的思路,但针对环状RNA做了调整。
CIRIquant的做法是:先识别所有可靠的BSJ,然后以BSJ为锚点,把跨越BSJ的读段和落在环状RNA内部、能唯一归属到该环状分子的读段都纳入计数,再根据环状RNA的推定长度和测序深度做归一化。这样得到的表达量,才是可以在样本间比较的相对丰度。
2.2 比对环节的关键选择:为什么推荐用HISAT2而不是STAR
CIRIquant的官方流程默认用HISAT2做比对,这一点值得展开说。STAR在常规RNA-seq里用得很多,速度快、灵敏度高,但它对环状RNA有个不太友好的特性:STAR的剪接感知比对在处理反向剪接时,有时会把跨BSJ的读段强行拆成两段分别比对到基因组上,导致BSJ信号被稀释。HISAT2在这方面相对保守,它允许读段以"嵌合比对"的形式报告,更有利于后续BSJ识别。
当然,这不是说STAR完全不能用。如果你的项目里线性RNA和环状RNA要共用一套比对结果,STAR也不是不行,但后续BSJ识别时可能需要调低阈值、增加容忍度。我个人的习惯是:如果项目核心就是环状RNA,直接用HISAT2,省心;如果环状RNA只是顺带看看,用STAR跑完再单独做BSJ识别,也能出结果,但要多做一步验证。
比对时还有一个参数容易被忽略:允许的错配数。环状RNA的BSJ区域序列往往比较短,如果错配数设得太宽松,会把一些随机匹配也算成BSJ,假阳性飙升。CIRIquant默认的比对参数已经比较保守,我一般不会去动,除非测序质量特别差。
2.3 表达量归一化的具体计算逻辑
CIRIquant输出的表达量通常以CPM(counts per million)或类似的归一化值呈现。它的计算逻辑大致是这样的:对每个识别到的环状RNA,统计支持它的读段数(包括跨BSJ读段和内部读段),然后除以该样本的总有效读段数,再乘以一个缩放因子。这个过程中,环状RNA的推定长度是通过BSJ两侧的外显子坐标推算出来的。
这里有个细节值得注意:CIRIquant在计算有效长度时,会考虑读段长度和环状RNA长度的关系。如果环状RNA本身比读段还短,那有效长度就按实际长度算,不会人为放大。这个处理比一些简单粗暴的流程要严谨得多。
我在实际项目里对比过CIRIquant和另外两套常见流程的定量结果,用同一批样本、同样的比对文件。CIRIquant在重复样本间的Spearman相关系数普遍能到0.9以上,而简单计数法经常只有0.7左右。差异主要就来自归一化策略和对短环状RNA的处理。
2.4 一个容易被忽视的坑:多重比对读段的归属
环状RNA的BSJ序列有时会和基因组上其他区域高度相似,尤其是那些来自同一基因家族、外显子序列相近的位点。这时候,一条跨BSJ读段可能比对到多个位置,到底算给谁?CIRIquant的策略是:优先分配给比对得分最高、且BSJ两侧剪接位点符合经典GT-AG规则的位点。如果得分相同,则标记为模糊,不计入任何单一环状RNA的定量。
这个策略听起来合理,但实操中会遇到一种情况:两个环状RNA共享同一个BSJ,只是内部外显子组成不同。这时候跨BSJ读段无法区分两者,CIRIquant会把它们合并成一个"位点"来定量,然后在剪接体转换分析时再拆开。这个设计逻辑我一开始没理解,后来才明白:定量阶段追求的是稳定和可重复,剪接体转换阶段才需要精细区分。分开处理反而让两个阶段各自更可靠。
3. 剪接体转换识别:从"表达量变化"到"异构体比例变化"的跨越
3.1 剪接体转换到底在问什么问题
剪接体转换(isoform switching)这个概念,在线性RNA领域已经比较成熟,指的是同一个基因在两种条件下,不同异构体的相对比例发生了显著变化,而不是单纯的总表达量变化。放到环状RNA场景里,问题变得更微妙:同一个基因位点可能产生多个环状RNA异构体,它们共享部分外显子,但BSJ组合不同。条件A下主要产出异构体1,条件B下主要产出异构体2,总环状RNA量可能没变,但功能可能完全不同。
CIRIquant识别剪接体转换的逻辑,不是简单比较两个异构体的表达量谁高谁低,而是做比例变化的统计检验。具体来说,它先计算每个环状RNA异构体在样本中的相对比例(该异构体表达量除以该位点所有异构体总表达量),然后在两组样本间比较这个比例是否有显著差异。这个思路和线性RNA里常用的DTU(differential transcript usage)分析是一脉相承的。
3.2 为什么直接比较表达量会误导
我举个实际遇到的例子。某个基因位点产生两个环状RNA:circ-A和circ-B。在对照组里,circ-A表达量100,circ-B表达量50;在处理组里,circ-A表达量200,circ-B表达量100。如果只看表达量,两个都翻倍了,似乎没有转换。但看比例:对照组A占67%,B占33%;处理组A占67%,B占33%。比例没变,确实没有转换。
换个场景:对照组circ-A表达量100,circ-B表达量100;处理组circ-A表达量50,circ-B表达量150。总表达量都是200,但比例从50:50变成了25:75。这就是典型的剪接体转换。如果只做差异表达分析,两个异构体可能都不显著(一个下调、一个上调,但各自变化幅度不够),转换信号就被淹没了。
CIRIquant的剪接体转换分析就是为了捕捉这种"总量不变、比例变了"的情况。它输出的结果里,每个位点会给出转换的统计量和显著性,以及转换的方向。
3.3 统计检验的选择与多重校正
CIRIquant在剪接体转换检验上,默认用的是基于比例的统计方法,具体实现上类似于Fisher精确检验或卡方检验的变体,取决于样本量和数据结构。对于两组比较,它会把每个位点的异构体计数整理成列联表,然后检验比例差异。
这里有个实操要点:多重检验校正。一个典型的环状RNA项目可能识别出几千到上万个环状RNA,剪接体转换检验是对每个位点单独做的,如果不做校正,假阳性会非常多。CIRIquant默认会输出校正后的p值(通常是FDR),我在筛选结果时一般用FDR < 0.05作为阈值,同时要求转换的效应量(比例变化的绝对值)大于0.2,这样能过滤掉那些统计显著但生物学意义不大的微小波动。
3.4 剪接体转换结果的生物学解读
拿到剪接体转换结果后,怎么判断哪些值得跟进?我的经验是分三步走。第一步,看转换位点是否落在已知的功能域或调控区域,比如如果环状RNA的来源基因参与胁迫响应,那转换就更有意思。第二步,看转换是否伴随线性RNA层面的变化,如果线性转录本也在变,说明整个位点的调控在动,不只是环状RNA的事。第三步,看转换的异构体是否影响miRNA结合位点或蛋白结合motif,这直接关系到功能。
CIRIquant的输出里会包含每个异构体的外显子组成信息,方便你做这一步分析。我通常会把这些信息和基因注释交叉比对,快速筛出候选。
4. 完整实操链路:从原始读段到剪接体转换结果的每一步
4.1 环境准备与依赖安装
CIRIquant是一套Python工具,依赖几个外部软件。我建议用conda建一个独立环境,避免和系统里的其他工具冲突。核心依赖包括:HISAT2(比对)、SAMtools(处理比对文件)、StringTie(转录本重构,部分流程会用到)、以及Python的pandas、numpy、scipy等科学计算库。
安装时最容易出问题的是HISAT2的索引。CIRIquant需要参考基因组的HISAT2索引,这个索引要提前建好。建索引时注意,如果基因组里包含很多重复序列,建议加上--ss和--exon参数,用已知的剪接位点信息辅助索引构建,能提高后续BSJ识别的灵敏度。
提示:建HISAT2索引比较耗时,大基因组可能要几个小时。建议在项目开始前就建好,别等到跑分析时才发现索引没准备。
4.2 比对与BSJ识别的参数取舍
比对这一步,CIRIquant的封装命令会调用HISAT2。我一般会显式指定线程数(-p),根据服务器配置来,通常16到32线程比较合适。读段长度如果超过100bp,HISAT2的默认参数可能需要微调,主要是--maxins和--minins,但环状RNA分析里这两个参数影响不大,保持默认即可。
BSJ识别是CIRIquant的核心步骤。它会在比对结果里搜索跨BSJ的读段,然后根据读段支持的证据强度、剪接位点序列特征、以及是否与已知注释一致来打分。这里有个参数叫最小读段支持数,默认是2。意思是至少要有2条读段支持,才认为这个BSJ是可靠的。对于低深度测序项目,可以降到1,但假阳性会增加;对于高深度项目,可以提到3或更高,提高可靠性。
我自己的习惯是:先用默认参数跑一遍,看看识别出的环状RNA数量。如果数量异常多(比如超过5万),可能是假阳性偏高,适当提高支持数阈值;如果数量异常少(比如不到1000),可能是阈值太严,适当放宽。
4.3 定量矩阵的生成与样本间比较
CIRIquant跑完每个样本后,会生成单个样本的环状RNA表达量文件。接下来需要把这些文件合并成一个表达量矩阵,行是环状RNA,列是样本。这个合并步骤CIRIquant提供了辅助脚本,但要注意:不同样本识别出的环状RNA集合可能不完全一致,合并时要决定是取交集还是并集。
取交集保守,但会丢失样本特异的环状RNA;取并集全面,但会有很多零值。我的做法是:先用并集生成矩阵,然后在后续分析时根据需求过滤。如果做差异表达,至少要在半数以上样本里有表达的环状RNA才纳入;如果做样本聚类或PCA,零值太多的环状RNA可以先过滤掉。
矩阵生成后,建议先做样本间相关性热图。如果某些样本明显离群,要么是测序质量问题,要么是生物学差异,需要单独检查。我遇到过一个个例,某个样本的环状RNA表达谱和所有其他样本都不相关,查下来发现是建库时RNA降解了,线性RNA看不出来,但环状RNA对降解更敏感。
4.4 剪接体转换分析的执行与结果筛选
剪接体转换分析需要两组样本的分组信息。CIRIquant的命令行里指定分组文件,格式通常是两列:样本名和组名。跑完之后,输出文件里每个位点一行,包含位点坐标、涉及的异构体、各组比例、统计量、p值和FDR。
筛选时我一般用三个条件:FDR < 0.05、比例变化绝对值 > 0.2、以及该位点总表达量在至少一组里CPM > 1。第三个条件是为了排除低表达噪声。满足这三个条件的位点,才进入下游解读。
这里有个经验:剪接体转换的效应量比p值更重要。有些位点p值很显著,但比例只从0.51变到0.49,这种转换生物学意义有限。反过来,比例从0.8变到0.2,即使p值只是勉强显著,也值得关注。
5. 那些手册不会告诉你的实操细节与排错经验
5.1 参考基因组版本不一致导致的坐标混乱
这是我最开始用CIRIquant时踩的第一个坑。项目里用的比对索引是一个版本的基因组,而基因注释文件是另一个版本,结果BSJ识别出来的坐标和注释对不上,剪接体转换分析时很多位点找不到对应的基因。后来我养成了一个习惯:项目开始前,先确认基因组、HISAT2索引、GTF注释三者版本完全一致,并且在流程记录里写清楚版本号。
如果已经跑完了才发现版本不一致,也不是没救。可以用liftOver工具把坐标转换到目标版本,但转换过程中可能丢失一些位点,尤其是那些落在版本差异区域的。所以最好还是一开始就统一。
5.2 低深度样本的BSJ识别假阴性问题
环状RNA在总RNA里的丰度通常比线性RNA低一到两个数量级。如果测序深度不够,很多真实存在的环状RNA会因为读段支持数不足而被漏掉。我处理过一个项目,初始测序深度是20M读段/样本,识别出的环状RNA只有几百个,而且重复性很差。后来补测到40M,识别数量翻了三倍,重复性也上来了。
所以我的建议是:如果项目核心是环状RNA,每个样本至少保证30M以上的有效读段,最好能到50M。如果实在达不到,那在BSJ识别时把最小支持数降到1,同时接受更高的假阳性率,后续用实验验证来补。
5.3 剪接体转换结果的假阳性来源
剪接体转换分析里,假阳性的一个主要来源是低表达异构体。假设一个位点有两个异构体,一个表达量很高,一个极低。在两组样本里,极低表达的那个异构体计数从1变成3,比例从0.01变成0.03,统计检验可能给出显著p值,但这完全是噪声。所以我在筛选时坚持要求总表达量阈值,就是为了过滤这类情况。
另一个假阳性来源是样本量不均衡。如果一组有10个样本,另一组只有3个,统计检验的效能和假阳性率都会受影响。理想情况下两组样本量尽量接近,至少每组不少于3个。如果实在不均衡,解读结果时要更保守。
5.4 结果的可视化与验证思路
CIRIquant的输出是表格形式的,直接看数字不够直观。我通常会做几种图:一是样本间环状RNA表达量的相关性热图,看整体重复性;二是剪接体转换位点的比例变化条形图,直观展示转换方向;三是转换位点对应基因的功能富集分析,看是否集中在某些通路。
验证方面,如果条件允许,可以对候选的剪接体转换位点设计 divergent primer,做qPCR验证。环状RNA的qPCR引物要跨BSJ设计,这是基本要求。另外,RNase R处理实验可以区分环状和线性,进一步确认。
注意:qPCR验证时,引物设计要避开线性转录本也能扩增的区域,否则结果无法区分环状和线性信号。建议用在线工具先预测引物特异性。
5.5 流程的可重复性与版本记录
最后说一个容易被忽视但很重要的点:记录版本。CIRIquant本身在更新,依赖的HISAT2、SAMtools也在更新,不同版本的行为可能有细微差异。我在项目里会建一个README,记录所有工具的版本号、关键参数、以及运行日期。这样半年后回头复现,或者换个人接手,都能快速对上。
我见过一个实验室,两个人用同样的数据跑CIRIquant,结果不一致,查了半天发现是HISAT2版本不同。这种问题不记录版本根本找不到原因。
6. 从定量到生物学:把CIRIquant结果用起来的几个思路
跑完CIRIquant,拿到表达量矩阵和剪接体转换列表,这只是起点。真正有价值的是怎么把这些结果和生物学问题挂上钩。我分享几个自己用过的思路。
第一个思路是环状RNA与线性RNA的联合分析。同一个基因位点,线性转录本和环状RNA的表达可能此消彼长,也可能同向变化。CIRIquant的输出可以和线性RNA的差异表达结果合并,看哪些位点存在"线性-环状"的协调变化。我做过一个分析,发现某些基因在胁迫下线性转录本下调、环状RNA上调,提示环状RNA可能起到了"海绵"作用,吸附了原本作用于线性转录本的调控因子。
第二个思路是剪接体转换与表型的关联。如果项目有表型数据,可以把剪接体转换位点的比例作为连续变量,和表型做关联分析。我试过用转换比例去预测样本的耐逆性,虽然样本量不大,但有几个位点的关联信号很强,后续做了实验验证。
第三个思路是跨物种保守性分析。如果手头有多个物种的环状RNA数据,可以看剪接体转换位点是否在进化上保守。保守的转换位点往往功能更重要。这个分析需要做基因组比对和坐标转换,工作量不小,但能筛出高价值候选。
第四个思路是构建环状RNA调控网络。把环状RNA表达量、剪接体转换比例、以及下游靶基因表达整合起来,用相关性网络或因果推断方法,推断调控关系。CIRIquant的结果可以作为网络的输入节点,配合miRNA靶点预测或RBP结合位点预测,构建多层调控网络。
这些思路不一定都适用于每个项目,但至少提供了一个方向:CIRIquant不只是给一堆数字,它是通往生物学解释的桥梁。关键在于你问的问题是什么,以及怎么把定量结果转化成可检验的假设。
我在实际使用中的体会是,CIRIquant最让我放心的地方,是它在定量和剪接体转换两个环节都做了针对环状RNA特性的优化,而不是简单套用线性RNA的逻辑。当然,它也不是万能的,低深度、复杂基因组、样本量不均衡这些情况仍然需要人工判断和额外验证。但作为一套从原始读段到剪接体转换的完整流程,它确实省去了很多自己拼凑工具的麻烦,而且结果的可重复性在我用过的几套方案里是最好的。如果你正在做环状RNA项目,不妨从它开始,把精力更多放在生物学问题的设计上,而不是和流程细节较劲。