☰
RNA-seq与qPCR结果不一致?从原理差异到六步排查指南
2026/10/7 4:39:10 网站建设 项目流程

每个在实验室摸过转录组测序的人都逃不过这样一个下午:差异基因表终于出炉,挑出心仪的候选基因,设计好引物,满怀期待地跑完 qPCR,结果用 2^-ΔΔCt 一算,要么倍数大幅缩水,要么直接连表达方向都反了。我微信里隔三差五就有同行拿着这样的数据来问,到底该信测序还是该信 PCR。

先说一个可能让你松口气的结论:RNA-seq 和 qPCR 结果对不上,绝大多数情况下是正常现象,不代表你的数据“坏了”。这两个平台的物理原理、数据形态、统计口径都不在同一套体系里,要求它们严丝合缝本来就是不现实的。但不一致比例过高,或者核心基因出现系统性偏差,就需要有一套固定的排查流程,去区分到底是分析参数问题、引物设计问题,还是样本本身的质量问题。这篇文章是我这些年帮人排雷攒下来的一套可复用思路,按顺序走一遍,基本能定位到根因。

1. 不一致不一定是坏事

1.1 三种“不一致”,严重程度完全不同

很多刚入门的同学会把所有 RNA-seq 和 qPCR 之间的差异都当成同一个问题,这是最大的误区。其实“不一致”至少可以分成三种,对应的处理策略差异很大。

第一种是趋势一致但倍数缩水,比如测序显示某个基因上调 4 倍,qPCR 只做出 2.5 倍。这种情况最普遍,通常不是硬伤,因为两个平台的定量标尺不一样,后续我会详细解释原因。一般来说,qPCR 做出的倍数在测序倍数的 30% 到 300% 之间浮动都算合理,不需要恐慌。

第二种是趋势相同但倍数差得离谱,比如测序说 3 倍,qPCR 做出 15 倍,或者反过来测序说 8 倍,qPCR 只有 1.2 倍。这种就需要认真查了,往往和引物效率、内参基因稳定性、或者差异表达分析时选择的阈值不当有关。

第三种是表达方向完全反转,也就是测序说上调,qPCR 跑出来是下调。这种是真正的警示信号,通常意味着你的研究对象在转录本注释、基因家族特异性或样本身份上存在更深层的问题,绝对不能强行解释过去。

1.2 RNA-seq 和 qPCR 本质上是两把不同的尺子

很多人默认 RNA-seq 和 qPCR 测的是同一个东西,所以数据应该差不多。但实际上两者测量逻辑差异非常大,我建议把它当成两套独立的测量系统来理解。

RNA-seq 做的是全转录组范围内的相对定量。它先把 RNA 打断成片段,随机采样测序,根据落到某个基因上的读段数量来推断丰度。这个过程中基因长度会被归一化,样本总测序量也会被归一化,所以 RNA-seq 得到的值本质上是“在转录组整体占比中的估算”。正因为是全基因组扫描,RNA-seq 的动态范围很大,能覆盖从几个转录本到数十万转录本的水平,但单基因的测量精度是有限的,尤其是低丰度基因,随机采样误差会明显变大。

qPCR 则完全不一样。它检测的是 PCR 指数扩增过程中荧光信号越过阈值的循环数,也就是 Ct 值。Ct 值每相差 1,理论上对应模板量相差 2 倍。这个方法的动态范围通常只有四到五个数量级,精度却很高,适合对单基因进行精细测量。但 qPCR 测的是相对表达量,必须依赖内参基因做标准化,而内参基因本身也会波动。

说白了,RNA-seq 是用大网捞鱼,看的是整体格局;qPCR 是精准钓鱼,看的是单点情况。大格局和单点之间当然应该存在对应关系,但不应期望完全一致。理解了这一层,很多所谓的“不一致”就已经解释了一半。

2. RNA-seq 这一头的四个隐藏雷区

2.1 定量单位选错:TPM/FPKM 不是用来筛差异基因的

这是我在新手项目里看到最多的坑。很多分析报告会给出一张带 TPM 或 FPKM 值的基因表达表,同学拿过来直接按表达量排序、按倍数变化手动筛基因,然后拿去验证,结果一塌糊涂。

TPM 和 FPKM 是经过长度归一化、适合在基因之间做比较或者做热图展示的值,但不适合用来做组间差异的统计推断。标准做法是用 DESeq2 或 edgeR 这类软件,输入原始 read count 矩阵,通过负二项分布模型估计组间差异,并对测序文库总读数的差异做专门处理。你手动从 TPM 表里算两组均值之比,等于绕过了所有统计学处理,等于把噪声当成信号。

正确做法是:想看单个候选基因在样本中的相对丰度,用 TPM 没问题;但要判断它是否显著差异表达,必须看 DESeq2 / edgeR 输出的 log2FoldChange 和 padj。如果项目里只有 TPM 表没有差异表达统计结果,那这个数据集的基础分析就是有问题的,需要从头重新跑流程。

2.2 只筛 P 值或者只筛倍数,都是给自己埋雷

差异表达筛选的标准组合是“倍数变化 + 校正后的 P 值”两个维度一起看。常见的标准是 |log2FC| ≥ 1 且 padj < 0.05,对应倍数变化大于 2。但实际项目里,很多人为了快速拿到基因列表,只看未校正的 P 值小于 0.05 就直接挑基因,这是非常危险的。

RNA-seq 一次要比较两万多个基因,如果只用原始 P 值,光靠随机效应就会筛出几百个假阳性。BH 校正后的 padj 才是真正控制了假发现率。我曾经接手过一个项目,对方把未校正 P 值小于 0.05 的基因全部拿去做验证,结果 qPCR 验证率只有不到 30%,而同一批数据里 padj < 0.05 且倍数变化大于 3 的基因,验证率超过 80%。这组数字非常说明问题。

另外,也别把倍数变化标准定得太激进。很多时候我们把阈值调到倍数变化大于 1.5 甚至 1.2,认为这样可以找到更多功能相关的基因。对生信分析来说这不一定是错的,但作为下游 qPCR 验证的候选对象,小倍数基因本身的可重复性就很差,验证不出来太正常了。如果你的目标是做实验验证,尽量优先挑倍数大、表达丰度高、组内变异小的基因。

2.3 基因水平、转录本水平还是外显子水平,搞混了必翻车

RNA-seq 有基因水平定量和转录本水平定量两种最常见口径。基因水平就是把所有比对到这个基因的读段都加起来,不管它来自哪个剪接异构体。转录本水平则需要先做转录本组装或者用参考转录组做定量,区分不同异构体的表达量。

如果你的候选基因存在多个转录本异构体,而你在 qPCR 里设计的引物只覆盖其中某一个外显子区域,那么结果和基因水平定量不一样几乎是必然的。举一个实际场景:某基因有三个注释转录本,其中转录本 A 包含外显子 2-4,转录本 B 缺失外显子 3。RNA-seq 基因水平定量把两种转录本的读段都算进去了,而你的 qPCR 引物设计在外显子 3 上,那么你测到的只是转录本 B 的表达变化,和 RNA-seq 报告的基因水平结果当然对不上。

解决思路是:在设计 qPCR 引物前,先到 UCSC Genome Browser 或 Ensembl 里查看候选基因的转录本结构,尽量把引物设计在所有主要转录本共有的外显子区域,或者反过来,如果你关心的是某个特定异构体,那就把它作为单独研究对象,单独做转录本水平的定量分析,千万别混着来。

2.4 批次效应和样本质量:数据里的隐形炸弹

RNA-seq 对样本质量极其敏感。哪怕是一点点 RNA 降解、建库批次差异、细胞比例改变,都会反映在数据里。有时候你拿到的差异表达结果不是某个基因的真实验变化,而是样本处理不同造成的系统偏差。

我处理过一个非常典型的案例:实验的对照组和给药组由不同人、在不同时间提取 RNA,建库也分了两个批次。下游差异分析跑出几百个差异基因,看起来成果喜人,但 qPCR 验证率很低。后来重新查看主成分分析图,发现样本首先按批次聚成两群,而不是按处理分组。这种情况下,差异基因列表里混入了大量由批次效应驱动的假差异基因,qPCR 当然验证不出来。

所以在找 qPCR 验证问题之前,一定要先回到原始 RNA-seq 分析输出里看一眼 PCA 图、样本聚类图,确认组间差异大于批次内差异。如果确实存在显著批次效应,可以考虑用 limma removeBatchEffect 或 ComBat-seq 做校正;如果是样本本身的问题,直接补建库或者补样本可能都比强行验证更好。

3. qPCR 这一头,其实更危险

很多人在 RNA-seq 和 qPCR 不一致时,下意识怀疑测序数据,觉得是生信分析出了问题。但凭我的经验,qPCR 这一头的问题往往占比一点不低,甚至更高。尤其是以下几个环节,踩一个坑就能让结果偏出去十万八千里。

3.1 内参基因永远不是“选个常用的就行”

内参选择是 qPCR 里最容易被糊弄过去、同时影响最大的环节。不少实验者默认用 GAPDH 或 ACTB,理由是大家都这么用。但这两个基因的表达丰度和稳定性是会随组织类型、处理条件、疾病状态改变的,用错了内参,所有目标基因的标准化都会出问题。

最经典的例子就是缺氧实验。很多研究表明 GAPDH 在缺氧条件下会上调,假设对照组 GAPDH 的 Ct 值平均是 18,处理组是 20,你再用它做内参,相当于所有目标基因都被凭空引入了一个 4 倍的系统偏差。这时候 RNA-seq 结果明明显示某个基因没变化,qPCR 算出来却成了显著下调。

正确的做法是,在开始正式样本检测前,至少选择三到五个候选内参基因,比如 GAPDH、ACTB、B2M、HPRT1、UBC、PPIA,在少量代表性样本里做 qPCR,用 geNorm 或 NormFinder 这类程序评价稳定性。更简单粗暴的办法是看这些基因在 RNA-seq 数据里本身的表达变异系数,挑变异最小的作为后续 qPCR 内参。如果条件有限,至少也要做一次预实验确认候选内参在组间没有显著性变化。

3.2 引物效率不验证,等于拿着不准的尺子量数据

这是另一个非常常见但容易被忽略的点。2^-ΔΔCt 法成立的前提是目标基因和内参基因的扩增效率都接近 100%,也就是每个循环产物量翻倍。现实中的引物很难效率都恰好等于 100%,95% 到 110% 都算可接受,但超过这个范围就需要重新设计或者用校正公式。

举个具体例子,假设你的目标基因引物实际效率只有 90%,也就是每循环扩增 1.9 倍而非 2 倍,而你仍然用 2^-ΔΔCt 计算。当目标基因和内参的 ΔCt 等于 6 时,真实的相对倍数是 1.9 的 6 次方,约等于 47;而按 100% 效率计算得到的是 64。这两个数字差了接近三成。如果目标基因效率是 110%,问题方向反过来,最后结果的偏差会更大。

跑引物效率的标准方法是用同一份 cDNA 做 5 倍或 10 倍梯度稀释,跑标准曲线,看斜率。理想斜率在 -3.32 左右,对应效率 100%;可接受范围是 -3.1 到 -3.6,对应效率 90% 到 110%。这条标准曲线建议在每一次换新引物时都做一次,别偷懒。如果做了效率校正,最后计算相对表达量时可以用效率校正后的公式,具体可以参考 MIQE 指南,里面讲得非常清楚。

3.3 融解曲线单峰不代表没有非特异扩增,模板质量更关键

很多人认为 qPCR 融解曲线是单峰就等于引物特异性没问题,其实不一定。融解曲线的分辨率有限,有时候非特异产物和目的产物 Tm 值相近,或者非特异扩增量很低,表面上也只会看到一个主峰。要确认特异性,尤其是第一次用新引物的时候,必须跑一块琼脂糖凝胶,看看产物大小是不是和设计一致。

更大的坑是模板里有基因组 DNA 污染。如果 RNA 提取后没做高效的 DNase I 处理,或者反转录前没有验证 gDNA 去除效果,qPCR 的结果就会混入基因组 DNA 扩增的信号。要知道基因组 DNA 里含有大量非编码区,如果引物设计恰好在内含子区域,那么 gDNA 模板同样会被扩增。这就很容易造成 qPCR 信号不等于真实 mRNA 表达量,与 RNA-seq 结果自然对不上。

规避方法包括:设计引物时跨越外显子-外显子边界,保证只能扩增成熟 mRNA;RNA 样本反转录前跑一次不做反转录的阴性对照,也就是 NRT 对照,确认没有 gDNA 残留;产物大小尽量控制在 80 到 200 bp,太长会影响扩增效率。

3.4 循环数算法和样本数也在暗中影响结果

除了引物和内参,计算方式和样本数量也会直接影响结果是否“对得上”。2^-ΔΔCt 法有一个隐含假设:生物学重复样本之间内参表达量是稳定的,且每个样本的目标基因和内参扩增效率一致。如果你的生物学重复只有 2 到 3 个,且样本间 Ct 值差异很大,那么最后计算出的均值倍数变化方差会非常大,跟 RNA-seq 基于更大样本量的均值估计当然不容易吻合。

所以我一般建议做验证实验时,至少用 4 到 6 个生物学重复,且每个重复最好跑 2 到 3 个技术重复。如果某个样本的 Ct 值明显偏离整体分布,要先判断是样本质量问题还是加样失误,不要直接留进统计分析。剔除异常值的时候也要有标准,不能为了“结果好看”而随意删数据。

4. 六步排查法,从样本到结果一步步找根因

如果真遇到 RNA-seq 和 qPCR 对不上的情况,最重要的原则是“按顺序查,别跳步”。我这里给出一套在实际项目中反复验证过的排查流程,每一步说明查什么、怎么查、得到什么结果后该往哪条路走。

4.1 排查顺序的核心逻辑:先排除源头错误,再谈技术细节

排查顺序的设计逻辑很简单:越是影响面大、越基础的问题,越应该先排查。比如样本身份搞错了,后面查引物效率毫无意义;统计口径选错了,后面测多少遍 qPCR 也没用。所以顺序先从样本和源头数据开始,再进入引物和 PCR 流程,最后才回到统计学和批次效应。

这个顺序也是从我自己踩坑经验里总结出来的。早期我遇到数据不一致,总是一步到位怀疑引物,重新设计三四对引物花掉两周时间,最后发现是当初 RNA 样本本身有两个样本标签贴反了。从那以后我就养成习惯,任何验证问题先盘样本,再碰引物。

4.2 六步速查表:一条链路看清所有疑点

为了方便对照,我整理了一个速查表,适合贴在实验记录本里,每次验证失败时按顺序逐项打钩。

步骤检查对象具体操作结果解读
1样本同一性确认 qPCR 和 RNA-seq 是否用了同批 RNA 样本、同一批 cDNA 来源批次不一致时,先重新核算同一批样本
2差异基因统计口径查看候选基因的 log2FC、padj、平均表达量,确认是否在高置信区间若 padj 未校正或表达量较低,大概率本身就不该出现在验证列表
3转录本结构与引物匹配比对 qPCR 引物在基因组浏览器中的位置,确认覆盖的转录本引物区域与主要转录本不一致时,重新设计引物
4扩增特异性和模板质量跑融化曲线、琼脂糖凝胶、NRT 阴性对照出现非特异扩增或 gDNA 残留时,做 DNase 处理或重设计引物
5标准曲线和引物效率梯度稀释 cDNA 跑标准曲线,计算引物效率效率超出 90%-110% 时,修正计算公式或换引物
6重复样本和数据分析核对生物学重复数量、组内变异、异常值剔除标准重复数不足或组内波动大时,补齐重复再重新统计

4.3 分步操作说明,每步都给出明确判断动作

第一步,先做样本身份核对。这里不是说让你怀疑协作方造假,而是现实中确实经常出现样本编号混乱、RNA 降解程度不同、反转录批次不同这类基础问题。把 RNA-seq 和 qPCR 同一次实验使用的样本清单拉出来,逐一对照,重点看分组是否一致、样本编号是否张冠李戴。如果发现不对,自认倒霉,但根因找到了,也不会浪费后面的时间。

第二步,回到差异基因列表,查看候选基因的统计指标。重点看三件事:padj 是否小于 0.05、log2FC 绝对值是否大于一定阈值、标准化后的平均表达量是否足够高。我个人的经验阈值是平均标准化计数至少要大于 20,最好是大于 50。如果一个基因在测序数据里的平均表达量本身就低,那么它样本间的采样误差很大,即便是统计学显著,也不属于适合 qPCR 验证的候选,验证不出来很正常。

第三步,查看引物设计和转录本注释。在 UCSC 或 Ensembl 里输入基因名,调出转录本结构,再把引物序列用 BLAT 比对到基因组上。关键看引物结合的外显子是否被所有主要转录本共享受。如果引物落在某一条异构体特有的外显子区域,就老老实实重新设计,或者明确告诉你验证的对象只是特定异构体,不能与基因水平测序结果直接比较。

第四步,回到 qPCR 实验本身。把原始扩增曲线调出来看,确认每个样本的基线、指数期形状都正常;看融解曲线是不是单峰;有条件的话,重跑一块凝胶验证产物大小。同时检查 NRT 对照的 Ct 值,如果 NRT 与正常样本 Ct 值接近,说明 gDNA 污染严重,需要回到 RNA 样本重新处理。

第五步,验证引物效率。如果前面几步都没问题,那效率问题就是下一个疑点。把 cDNA 梯度稀释 5 个点,每个点重复三次,跑标准曲线,记录斜率。效率低于 90% 或者高于 110%,建议重新设计引物;如果只有轻微偏离,也可以选择效率校正公式计算相对表达量。

第六步,重新审视统计过程。看每组生物学重复几个、组内表达变异有多大、异常值是怎么处理的。如果重复只有三个且其中一个明显偏离,一组数据的均值和方差就会被带歪,跟测序结果对不上也就在意料之中。补样本往往是最费时间的,但也是最彻底的办法。

5. 一个复盘案例:同一个基因在两个平台上的反转

5.1 项目背景:看似完美的候选为何验证失败

我经手过的一个真实项目,背景是某肿瘤细胞系在药物处理下做 RNA-seq,差异基因列表里有一个基因 FAM76A,RNA-seq 显示 log2FC 约等于 1.2,padj 小于 0.05,标准化平均计数在对照组和处理组分别是 120 和 260。这个基因当时被列为重点关注对象,因为文献里提到它可能参与类似通路。课题组按照常规流程设计引物,跑 qPCR,结果大跌眼镜,处理组的表达量反而略低于对照组,算出来的倍数变化约 0.9,等于方向完全反转。

课题组成员的第一反应是引物设计有问题。我让他们先别急,按上面的排查顺序走。第一步核对样本,发现 RNA-seq 和 qPCR 用的是同一批细胞样本,排除了样本张冠李戴。第二步看统计口径,padj 合格,平均表达量也不低,候选基因本身不是低丰度假阳性。第三步查转录本结构,问题出现了。

5.2 定位根因:异构体注释让引物掉进了陷阱

在 UCSC 浏览器里查 FAM76A 的转录本结构,发现这个基因有四个注释转录本,其中两个主要转录本包含外显子 4 和外显子 5,另外两个转录本则选择性地跳过了外显子 4。RNA-seq 的基因水平定量会把这四个转录本的读段全部统计进去,但我们设计的引物刚好落在外显子 4 上,等于只检测了包含外显子 4 的转录本,把另外两个转录本全部漏掉了。

进一步分析后发现,药物处理之后,该基因不含外显子 4 的转录本比例发生了上调,而包含外显子 4 的转录本反而下调。所以 RNA-seq 基因水平的结果是微弱的净上调,但我们引物只测了那条下调的异构体,方向自然就反了。重新设计一对落在四个转录本共有外显子区域的引物后,qPCR 很快做出和 RNA-seq 方向一致的结果,倍数也回升到了 1.6 倍左右。

这个案例让我印象很深,因为所有检测环节都“看起来是好的”,但问题藏在注释层级里。碰到基因家族成员多、转录本异构体多的基因,方向反转的风险极大,这也是为什么我后来在文章里反复强调设计引物前一定要看转录本结构。

5.3 案例带来的通用规则:高变基线、多转录本基因谨慎处理

从这次复盘里可以提炼出几条通用经验。第一,对于有多个异构体的基因,在选作候选之前就要先看它在参考转录组里主要表达哪些转录本。这个信息可以直接从 RNA-seq 数据里提取,也可以用可视化软件查看。第二,如果你的 qPCR 就是只想检测特定异构体,记得在文章和方法部分明确写出引物对应的是哪个转录本,不要和基因水平定量混着说。第三,低表达或者微效基因的验证风险高,如果时间和经费有限,优先验证那些平均表达丰度更高、倍数变化更大的候选基因。

5.4 若方向反转但转录本结构没问题,判断优先级

如果转录本结构没问题、引物也验证过效率,方向反转还是存在,那就需要考虑更基础的问题,比如所选基因在不同数据库中的注释是否一致、是否属于假基因或反义转录本区域、以及参考基因组版本是否影响了比对结果。有些基因在旧版本参考基因组里比对率低,比对软件把读段分配到了旁系同源基因上,基因水平的定量结果就会失真。遇到这种情况,可以重新从注释文件和比对结果出发做一次复核,看目的基因位置上有没有高通量噪声。

6. 最后的经验:把可重复性做进实验设计里,而不是事后补救

6.1 候选基因的挑选标准直接影响验证成功率

很多验证失败不是说哪一步实验做错了,而是候选基因本身就不具备足够好的可重复验证基础。RNA-seq 的差异表达列表里通常排名靠前的基因只是统计学显著,不代表每个基因都适合用 qPCR 去测。我总结出一个比较实用的挑选三原则:平均表达丰度足够高、组间倍数差异足够大、组内样本间变异足够小。

表达丰度方面,我倾向于只选标准化计数均值至少大于 20 的基因,低于这个值说明测序的随机采样噪声大,结果的置信度低。倍数差异方面,log2FC 绝对值低于 1 的基因除非有极强的先验生物学理由,否则不建议纳入验证列表。组内变异方面,可以看 DESeq2 分析输出里的 dispersion 估计值,离散度高的基因往往在 qPCR 里也很难测出干净的结果。

如果一篇论文或者项目要求做全转录组 30 到 50 个基因的批量验证,验证率大概率不会太高。你要做的不是抱怨 qPCR 不靠谱,而是从源头缩小挑选范围,把那些生物学变异大的基因排除掉,留下的才会是能经受住重复验证的结果。

6.2 提前跑“阳性对照基因”,为整个批次提供可信度

我现在做每一个转录组验证项目,习惯性先挑两到三个“内部阳性对照基因”。这类基因必须在 RNA-seq 数据里显著差异表达、倍数变化大、表达丰度高,同时在文献里已经被很多独立研究验证过。跑 qPCR 时先看这几个对照基因的结果是否与测序一致,如果一致,说明本次 qPCR 整体体系是可靠的;如果不一致,那问题大概率是整个流程性的,而不是单基因问题。

这个小习惯帮我省了非常多无意义的单基因排查时间。它相当于给整个验证实验一个“系统自检”环节,一旦自检通过,后续再遇到方向反转或倍数异常,就可以把排查重心立刻锁定在目标基因特异性的问题上。

6.3 不要把失败当成数据坏掉,把它当成信息

最后再分享一点心态层面的经验。很多研究者遇到 RNA-seq 和 qPCR 不一致时,第一反应是想办法“把结果调整到一致”,我的建议恰恰相反,不一致本身就是信息。它可能提醒你这个基因存在复杂转录本调控,可能提示你内参选择存在漏洞,也可能是在告诉你差异表达分析时某些基因的统计证据并没有那么牢固。

我在实际项目里学会的最重要一件事,是不要轻易认定测序或者 qPCR 谁对谁错。把每一次不一致当成一次系统性检查的机会,按顺序排查,把问题定位清楚,哪怕最后发现候选基因确实无法被验证,你也会获得对数据和实验体系更深刻的理解。从长期来看,这种理解比单个基因的验证结果更有价值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询