抽卡与测序的秘诀(超几何分布)

Jul 7, 2024

从一个游戏说起

二十年前,我还是个小学生。每天放学都急着回家看上一集游戏王(Yu-Gi-Oh!)。

这套卡牌游戏有一张传说中的卡——黑暗大法师(Exodia the Forbidden One)。这张卡必须同时集齐五个部件才能生效:右脚、左脚、右手、左手、头部。只要凑齐这五张,直接获胜。

每副卡组四十张。由于规则限制,同一张卡最多只能放三张(某些特卡只能放一张),所以这五个部件在卡组里至多各有一张。

问题来了:开局起手五张牌,恰好集齐全部五个部件的概率是多少?

这是一个经典的"不放回抽样"问题。我们从一副有限的牌堆里抽出若干张,每抽一张,牌堆就少一张,不会重复抽到同一张。(暂时不考虑类似于特殊效果放回牌堆的骚操作

超几何分布(Hypergeometric Distribution)正是为这类场景设计的。

超几何分布的定义

假设一个有限总体共有 $N$ 个单位,其中成功状态(我们感兴趣的类型)有 $K$ 个,失败状态有 $N-K$ 个。我们从这个总体中不放回地抽取 $n$ 个单位,令 $X$ 表示抽到的成功状态的数量,则 $X$ 服从超几何分布:

$$ X \sim \text{Hypergeometric}(N, K, n) $$

其概率质量函数为:

$$ P(X = k) = \frac{\binom{K}{k} \binom{N-K}{n-k}}{\binom{N}{n}}, \quad k = \max(0, n - (N-K)), \ldots, \min(n, K) $$

这个公式的逻辑很清晰:分子是"从 $K$ 个成功中抽到 $k$ 个"与"从 $N-K$ 个失败中抽到 $n-k$ 个"的组合数之积;分母是"从全部 $N$ 个中抽到 $n$ 个"的总组合数。

三个核心参数:

没有放回,没有重复,每一张牌的抽取都改变了下一次抽取的概率。

回到游戏王

现在计算开局集齐黑暗大法师的概率。

卡组 $N = 40$,五个部件 $K = 5$,起手抽牌 $n = 5$,我们想知道抽到全部五张部件的概率,即 $k = 5$。

$$ P(X = 5) = \frac{\binom{5}{5} \binom{35}{0}}{\binom{40}{5}} = \frac{1}{658{,}008} \approx 0.00015\% $$

这个概率小到可以忽(直)略(呼)不(开)计(挂)。

更有趣的是算算起手至少有 $1$ 张部件的概率:

$$ P(X \geq 1) = 1 - P(X = 0) = 1 - \frac{\binom{5}{0}\binom{35}{5}}{\binom{40}{5}} \approx 52.3\% $$

超过一半的概率起手能摸到至少一张部件——我一直以为这个牌组极难上手,原来是我自己脸黑。

我小时候确实打得不好,这点还是有自知之明的。

组学也可以是牌组的"组"

统计学家研究抽样,生命科学里也到处是抽样。

RNA测序(RNA-seq)是分子生物学的核心技术之一。简单来说,就是把细胞里的mRNA分子提取出来,打碎成片段,测序,再把这些片段比对回基因组,以此推断每个基因的表达量。

这个过程中存在一个基本的抽样问题。

一个细胞里特定基因的mRNA拷贝数假设为 $K$,细胞内mRNA的总量为 $N$(这里以分子数计)。我们提取所有mRNA,构建文库,然后上机测序——假设测了 $n$ 条reads。

这 $n$ 条reads就相当于从总mRNA池里的一次抽样。每一跳mRNA被测到的概率,与它在池中的相对丰度成正比。

如果我们关心某个基因被测到了多少次——也就是有多少条reads比对到了这个基因上——这恰好可以用超几何分布来描述。

设总体 $N$ 个mRNA分子中,特定基因有 $K$ 个转录本。从中随机抽取 $n$ 条reads,则抽到该基因 $k$ 条reads的概率为:

$$ P(X = k) = \frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}} $$

这个模型当然有简化。真实的RNA-seq存在捕获效率偏差、测序深度差异、比对不确定性等问题。但在最基础的理论上,这正是超几何分布的用武之地。

结语

抽样无处不在,游戏王与转录组在某个层面上其实是在用不同的语言讲同一个故事。

写这篇文章的时候,我翻出了抽屉里那盒积灰的游戏王卡。

当年的伙伴们早已散落各地,卡片也失去了意义。但概率不会因为我们不再玩牌就停止运作——每一副牌堆,每一次抽卡,每一次生物实验里的取样,都在遵循同样的数学法则。

理解超几何分布,并不必然能让你开出一张黑暗大法师。但至少能让你知道,那一局里,你究竟有多大的概率赢。

Last but not least,如果哪里算错了,请一定要告诉我。