编辑率为何从 0% 变成 86%:RNA-seq 判敲除的几个陷阱

摘要 ·

HISAT2 把大缺失记成 CIGAR N 而不是 D,只数 D/I 的脚本会把编辑率算成 0%——以及 RNA-seq 判 CRISPR 敲除时另外几个会翻车的地方。

核对一批 CRISPR KO 的 RNA-seq 时,我发现两条 sgRNA 里有一条的编辑率是 0%。这很容易被解释成“这条 guide 没切动”,但把同一套脚本搬到姊妹项目上,整个基因跑出 0 个候选切点——干净得不正常。继续追查后才发现:0% 不是实验失败,是扫描脚本制造的假象。

先说为什么要费这个劲。CRISPR indel 不一定触发 NMD,所以靶基因的 TPM 没降,既不能证明没敲掉,也不能证明敲掉了。想知道敲没敲成,只能回到 BAM 里,逐条数跨过切点的 read。

问题出在哪

HISAT2 把超过约 20 bp 的缺失当成内含子,在 CIGAR 里记成 N 而不是 D。而写 CIGAR 遍历时,几乎所有人都会顺手把 N 当剪接跳过:

for op, ln in read.cigartuples:
    if op == 0: pos += ln          # M
    elif op == 2: mark_deletion()  # D,小 indel 抓到了
    elif op == 3: pos += ln        # N,大缺失全从这里漏光

因果链很短:大缺失被记成 N → 遍历时当剪接跳过 → 这条 read 不计入病变 → 编辑率接近零。

那条报 0% 的 guide,真实情况是它的编辑几乎全是大缺失。姊妹项目那两条 guide 也一样,主等位分别是 27、22、54、357 bp 的缺失,一条都不在 D 里。

有多大影响

同一批 BAM、同一个位点,只改遍历 CIGAR 的那一行,sgRNA 2 的编辑率从 0% 变成 85.7%,sgRNA 1 从 10.8% 变成 32.0%。四个切点全部中招,低估了 4 到 14 倍。

代价也要说清楚:把非注释的 N 计入之后,非靶样本的本底从精确 0 升到 ≤6%,原先“非目标样本必须为零”的判据得相应放宽。这笔交易是划算的——漏掉全部大等位是致命的,本底 6% 只是让判据不那么漂亮。

怎么修

病变的定义改成 DI、以及供体或受体不落在注释剪接位点上的 N。从 GTF 里把该基因所有转录本的内含子首末碱基取出来做白名单,白名单之外的 N 一律按缺失算。

顺带还有几个地方会翻车

修完 N 之后,我又在另外几处栽了跟头,一并记下来。

分母不能用覆盖度。 缺失掉的碱基本身不被 M 覆盖,一条带缺失的 read 会进分子却不进分母,于是算出大于 100% 的编辑率。分母应该是跨越该位点的全部 read,带病变的和不带的都算。

判据要看特异性,不看幅度。 剪接边界会在所有样本里都产生 indel 假象,我们有个位点在 12 管里都是 40–80%,看着惊人,跟 CRISPR 无关。真切点的特征是非靶样本干净,而它自己的编辑率可以很低——有条真实切点逐位点只有 3–4%,被“编辑率 > 8%”的阈值直接漏掉了。反过来,“要求两组独立细胞都命中同一位点”是很强的特异性约束,但它会漏掉只在单组成功的编辑:上面那条 86% 的 guide 只在一个臂里命中,另一个臂 0/35 条,那是 read 太少功效不足,不是没编辑。所以拿到 guide 序列后,应当直接查预期切点,别只靠复现判据。

“编辑率”一个数说不清。 切割还会诱发外显子跳读——Cas9 切开后,剪接机器把含切点的整个外显子跳过去,接的是两个已注释的剪接位点。注释白名单会放行它,因为它看起来就是一次正常剪接,但它只在对应 guide 的样本里出现。把跳读并进编辑率,数字从 20% 涨到 50%,可那两条跳读全是整码的(少 88 aa 和 128 aa),移码率一点没动。所以后来不再输出一个数,而是把每条 read 归到“病变类型 × 是否移码”里,分开报编辑率(切到了没有)和移码率(蛋白可能坏了没有)。两条 guide 的编辑率是 32.0% 和 85.7%,移码率却只有 9.2% 和 14.3%。

阅读框要按 CDS 算。 拿病变在基因组上的跨度去 % 3 是错的,跨度里含内含子。一段 1011 bp 的基因组跳读,落到 CDS 上只去掉 264 bp,也就是 88 个氨基酸,不是 337 个。应该取 MANE Select 转录本的 CDS 区段,只累加病变与 CDS 的交集长度。

整码不等于敲掉,也不等于没敲掉

拿到干净的数之后还有一步判读。某条 guide 编辑率 32–50%、移码率只有 9–12%,其余是整码 indel 和整码跳读,这该怎么说?

不能说“没敲掉”——少掉 88 个氨基酸是全长的 10.7%,多结构域蛋白的内部缺失完全可能失活。但也不能说“敲掉了”——整码意味着蛋白仍然被翻译出来

这一条直接决定验证实验怎么读:整码截短等位在 western 上预期是一条位移的带,不是消失的带。只按“有没有带”读胶,会把这条 guide 误判成完全没敲掉。

顺带也解开了一个假矛盾。“靶基因 mRNA 没降,所以没敲掉”是错误推理:大缺失和外显子跳读不产生近端提前终止密码子,转录本本来就不该被 NMD 清掉,mRNA 稳定和编辑率很高可以同时成立。

RNA-seq 到哪儿为止

它能告诉你切点在哪、等位怎么构成、每类等位整码还是移码,而且不用额外做实验。但它答不了蛋白到底还在不在——那只有 western 能答;它给的等位频率也偏低,因为 NMD 会清掉一部分移码转录本;内含子和 UTR 里的编辑它更是看不见。完整的链条是 RNA-seq 定位分型 → gDNA amplicon 或 TIDE 核对频率 → western 确认蛋白。

一个简单的检查习惯

当一条 guide 报出 0%、或者一个基因干净得不像话时,先别急着说实验失败。去看一眼那些 read 到底去哪了——是真的没有病变,还是病变被记成了另一种 CIGAR 操作。在这类分析里,把口径写清楚通常比多算一个统计量更值钱。

有话这里说 ↓