伪批量还是逐细胞?这个选择决定你的文章能不能过审
为什么逐细胞差异表达会制造大量假阳性、什么时候必须用伪批量、以及具体怎么做——附在真实 8 供者公开数据上的实测对比。
你有六只小鼠的单细胞数据,每组三只,想找某个细胞类型里两组之间的差异基因。Seurat 和 scanpy 的默认做法会拿几千个细胞对几千个细胞做检验,然后给你三千个「显著」基因。其中大部分不是真的。
错在哪
同一只动物里的细胞不是独立观测。它们共享这只动物的遗传背景、批次、解离应激和测序批。逐细胞检验假设独立,于是把 2,000 个细胞当成 2,000 份证据,而它们更接近于一份。结果就是:测的细胞越多,你那个错误结论的 p 值越漂亮。
2021 年以来多项基准测试反复得到同一结论:多受试者设计下,逐细胞检验(如默认的 Wilcoxon)产生大量假阳性,而伪批量方法能把错误率控制在名义水平附近。
正确做法,五步
- 先取出一个细胞类型。
- 把该类型在每个样本里的原始 counts 相加(不是归一化后的值),得到一列一个样本的伪批量矩阵——列数才是你真正的样本量。
- 细胞数太少的样本剔除,常用阈值是少于 10–20 个细胞。剔了几个要写出来。
- 用 bulk 方法检验:DESeq2、edgeR 或 limma-voom,协变量(性别、批次、年龄)照常放进模型。
- 每个细胞类型各做一遍,并在类型内部对基因做多重检验校正。
什么时候逐细胞检验仍然是对的
当比较发生在一个样本内部、而且细胞确实是关注单位时:比如找区分第 3 群和第 5 群的 marker。判据很简单:如果你的生物学问题带着样本层面的设计(处理 vs 对照),就用伪批量;如果是样本内的描述性问题(这一群的特征是什么),逐细胞可以,但要当作描述而不是推断。
实测:两种做法差多少
我们用一份真实公开数据(8 位供者,每人各有对照与干扰素-β 刺激)把两种做法都跑了一遍,结果公开在 这一页:两份显著基因列表 68.3% 不重合——而且方向和教科书上的警告不完全一样。 10 个已知的干扰素诱导基因在伪批量结果里全部命中,这是判断流程有没有跑对的自检。
不太舒服的那部分
把差异表达改成正确做法后,基因列表常常从几千缩到几十。很多人体感上是「结果没了」。不是——是你终于看清结果本来是什么。一份短而站得住的列表,好过一份在审稿时溶解掉的长列表;而且这个领域的审稿人现在会点名问这件事。