超幾何分布の理論と応用 — 非復元抽出の確率分布

100個の製品が入った箱があり、そのうち5個が不良品であるとわかっています。この箱から10個を無作為に抽出して検査したとき、何個の不良品が含まれるでしょうか。この問いに答えるには、「取り出した製品を戻さずに次を引く」という非復元抽出(sampling without replacement)の確率を計算する必要があります。

この非復元抽出における「当たりの個数」が従う分布が超幾何分布(hypergeometric distribution)です。

二項分布が「復元抽出(元に戻して引く)」の場合の分布であるのに対し、超幾何分布は「非復元抽出(元に戻さずに引く)」の場合の分布です。母集団が有限であり、抽出によって母集団の構成が変化するという、より現実的な状況をモデル化しています。

超幾何分布を理解すると、以下のような応用が開けます。

  • 品質管理: 抜き取り検査で不良品数の確率を計算する(受入検査の基礎理論)
  • 遺伝子セット解析: 特定の遺伝子群が偶然の範囲を超えて濃縮(enrichment)されているかの検定
  • カードゲームの確率: トランプやトレーディングカードのドロー確率
  • 漁獲再捕獲法: 野生動物の個体数推定(マーク再捕獲法)

本記事では、超幾何分布が非復元抽出から自然に導かれることを直感的に理解し、確率質量関数を組み合わせ論で導出します。さらに、モーメントの計算、二項分布との関係、そしてPythonによる可視化と応用例を示します。

本記事の内容

  • 超幾何分布の直感的理解と数学的定義
  • 確率質量関数の組み合わせ論的導出
  • 期待値・分散の計算と有限母集団補正
  • 二項分布との関係と近似
  • Pythonによる可視化とモンテカルロシミュレーション
  • 品質管理と遺伝子セット解析への応用

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

  • 二項分布 — 復元抽出の場合の分布(超幾何分布と比較する対象)
  • 組み合わせ — 確率質量関数の導出に使用

超幾何分布とは — 直感的な理解

くじ引きのモデル

超幾何分布を最も分かりやすく理解するために、くじ引きの場面を考えましょう。

箱の中に赤い玉が $K$ 個、白い玉が $N – K$ 個、合計 $N$ 個の玉が入っています。この箱から $n$ 個の玉を一度に(あるいは1個ずつ戻さずに)取り出したとき、赤い玉の個数 $X$ はいくつになるでしょうか。

この $X$ が従う分布が超幾何分布です。

たとえば、$N = 52$ 枚のトランプから $n = 5$ 枚を引いたとき、ハートの枚数($K = 13$)が超幾何分布に従います。あるいは、$N = 100$ 人の候補者のうち $K = 40$ 人が女性であるとき、$n = 10$ 人の委員を無作為に選んだ場合の女性の人数もこの分布に従います。

二項分布との本質的な違い

二項分布では、各試行の成功確率 $p$ は一定です。これは「復元抽出」に対応しています。引いた玉を戻してから次を引くので、毎回の成功確率は $p = K/N$ のまま変わりません。

一方、超幾何分布では玉を戻さないため、1個引くごとに箱の中の構成が変わります。最初の試行で赤い玉を引いたら、残りは $K – 1$ 個の赤い玉と $N – K$ 個の白い玉になるため、次に赤い玉を引く確率は $(K-1)/(N-1)$ に変化します。

つまり、各試行が独立でないのが超幾何分布の本質的な特徴です。この非独立性のために、超幾何分布の分散は二項分布よりも小さくなります(有限母集団補正)。

名前の由来

「超幾何」(hypergeometric)という名前は、この分布の確率質量関数が超幾何級数(hypergeometric series)${}_{2}F_1$ と関連していることに由来します。ガウスの超幾何関数は

$$ {}_2F_1(a, b; c; z) = \sum_{k=0}^{\infty} \frac{(a)_k (b)_k}{(c)_k} \frac{z^k}{k!} $$

であり、超幾何分布の確率質量関数はこの特殊ケースとして表現できます。

この直感的な理解を踏まえて、数学的な定義に進みましょう。

超幾何分布の数学的定義

$N$ 個の要素からなる母集団のうち、$K$ 個が「成功」(当たり)、$N – K$ 個が「失敗」(はずれ)であるとき、$n$ 個を非復元抽出して得られる成功の個数 $X$ は超幾何分布に従います。

$X$ の確率質量関数は次の式で与えられます。

$$ \begin{equation} P(X = x) = \frac{\binom{K}{x}\binom{N-K}{n-x}}{\binom{N}{n}} \end{equation} $$

ここで $x$ の範囲は $\max(0,\, n – N + K) \leq x \leq \min(n,\, K)$ です。

この式の各因子は組み合わせ論的に明快な意味を持っています。

  • $\binom{N}{n}$: $N$ 個の要素から $n$ 個を選ぶ総数(分母、等確率の場合の数)
  • $\binom{K}{x}$: $K$ 個の成功要素から $x$ 個を選ぶ場合の数
  • $\binom{N-K}{n-x}$: $N-K$ 個の失敗要素から $n-x$ 個を選ぶ場合の数

分子は「成功を $x$ 個、失敗を $n-x$ 個選ぶ」という事象の場合の数であり、それを全体の場合の数で割って確率を得ています。これは古典的確率(ラプラスの定義)の直接的な適用です。

3つのパラメータの意味を整理しましょう。

パラメータ 意味 範囲
$N$ 母集団のサイズ $N \geq 1$
$K$ 母集団中の成功の数 $0 \leq K \leq N$
$n$ 抽出数 $0 \leq n \leq N$

次に、この確率質量関数の導出と正当性をより詳しく見ていきましょう。

確率質量関数の導出

組み合わせ論的導出

$N$ 個の要素が区別可能(番号付き)であると考えます。$K$ 個が「成功」に分類され、残り $N – K$ 個が「失敗」に分類されています。

$n$ 個を選ぶ全方法の数は $\binom{N}{n}$ です。各選び方が等確率であると仮定します(無作為抽出)。

$X = x$(成功がちょうど $x$ 個)となるような選び方を数えます。

  1. $K$ 個の成功要素から $x$ 個を選ぶ: $\binom{K}{x}$ 通り
  2. $N-K$ 個の失敗要素から残り $n – x$ 個を選ぶ: $\binom{N-K}{n-x}$ 通り

これらは独立な選択なので、乗法原理により $\binom{K}{x}\binom{N-K}{n-x}$ 通りです。

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

ヴァンデルモンドの恒等式

確率の総和が1になることは、ヴァンデルモンドの恒等式(Vandermonde’s identity)から確認できます。

$$ \begin{equation} \sum_{x} \binom{K}{x}\binom{N-K}{n-x} = \binom{N}{n} \end{equation} $$

この恒等式は、「$N$ 個($K$ 個のグループ1と $N-K$ 個のグループ2)から $n$ 個を選ぶ方法」を、グループ1から $x$ 個、グループ2から $n-x$ 個を選ぶ場合に分解して数えることで得られます。

$$ \sum_x P(X = x) = \frac{1}{\binom{N}{n}} \sum_x \binom{K}{x}\binom{N-K}{n-x} = \frac{\binom{N}{n}}{\binom{N}{n}} = 1 $$

確率質量関数の正当性が確認できました。次に、期待値と分散を計算しましょう。

期待値と分散

期待値

$X$ の期待値を計算するために、指示確率変数(indicator variable)を使う方法が最もエレガントです。

$X_i$ を「$i$ 番目に抽出された要素が成功である」ことを示す指示変数とします($X_i = 1$ なら成功、$X_i = 0$ なら失敗)。すると、

$$ X = X_1 + X_2 + \cdots + X_n $$

各 $X_i$ について、非復元抽出であっても対称性から

$$ E[X_i] = P(i \text{番目が成功}) = \frac{K}{N} $$

が成り立ちます。これは直感的にも正しいです。$n$ 個の抽出順序を考えたとき、$i$ 番目に来る要素は $N$ 個のどれも等確率で、そのうち $K$ 個が成功です。

期待値の線形性により、

$$ \begin{equation} E[X] = \sum_{i=1}^n E[X_i] = n \cdot \frac{K}{N} \end{equation} $$

これは二項分布 $\text{Bin}(n, K/N)$ の期待値 $np$($p = K/N$)と同じです。非復元抽出でも期待値は復元抽出と変わらないのです。

分散と有限母集団補正

分散を求めるために $\text{Var}(X) = \text{Var}\left(\sum_{i=1}^n X_i\right)$ を展開します。

$$ \text{Var}(X) = \sum_{i=1}^n \text{Var}(X_i) + 2\sum_{i < j} \text{Cov}(X_i, X_j) $$

各 $X_i$ はベルヌーイ変数なので、

$$ \text{Var}(X_i) = \frac{K}{N}\left(1 – \frac{K}{N}\right) $$

共分散を計算します。$E[X_i X_j] = P(i\text{番目も}j\text{番目も成功})$ であり、非復元抽出なので、

$$ E[X_i X_j] = \frac{K}{N} \cdot \frac{K-1}{N-1} $$

したがって、

$$ \text{Cov}(X_i, X_j) = \frac{K(K-1)}{N(N-1)} – \frac{K^2}{N^2} = -\frac{K(N-K)}{N^2(N-1)} $$

共分散がであることに注目してください。これは「1つ成功を引くと、次に成功を引く確率が下がる」という非復元抽出の本質的な性質の表れです。

すべてを合わせると、

$$ \text{Var}(X) = n\frac{K}{N}\left(1-\frac{K}{N}\right) + n(n-1)\left(-\frac{K(N-K)}{N^2(N-1)}\right) $$

整理すると、

$$ \begin{equation} \text{Var}(X) = n\frac{K}{N}\frac{N-K}{N}\frac{N-n}{N-1} \end{equation} $$

$p = K/N$ とおくと、

$$ \text{Var}(X) = np(1-p)\cdot\frac{N-n}{N-1} $$

二項分布の分散 $np(1-p)$ に有限母集団補正係数(finite population correction, FPC)$\frac{N-n}{N-1}$ が掛かった形になっています。

この補正係数は常に1以下($N \geq n$ のとき)であり、超幾何分布の分散が二項分布の分散よりも小さいことを意味します。$n = N$(全数抽出)のとき補正係数はゼロになり、分散もゼロです。これは当然で、母集団全体を調べれば $X = K$ と確定するからです。

$N$ が $n$ に比べて十分大きいとき、$\frac{N-n}{N-1} \approx 1$ となり、二項分布の分散に近づきます。

次に、二項分布との関係をより定量的に見てみましょう。

二項分布への収束

$n$ と $K$ を固定して $N \to \infty$($K/N \to p$ を保つ)のとき、超幾何分布は二項分布に収束します。

$$ \text{Hypergeometric}(N, K, n) \xrightarrow{d} \text{Bin}(n, p) \quad (N \to \infty,\, K/N \to p) $$

直感的な理由: 母集団が非常に大きければ、$n$ 個を引いても母集団の構成はほとんど変わりません。1個引いた後の成功確率は $K/(N-1) \approx K/N = p$ のままです。つまり、各抽出がほぼ独立になり、二項分布に近づくのです。

数学的な確認: 確率質量関数の比を取ると、

$$ \frac{P_{\text{Hyper}}(X = x)}{P_{\text{Bin}}(X = x)} = \frac{\binom{K}{x}\binom{N-K}{n-x}}{\binom{N}{n}\binom{n}{x}p^x(1-p)^{n-x}} $$

$N \to \infty$ でこの比が1に収束することは、スターリングの近似を用いて示せます。

実用上は、$N$ が $n$ の20倍以上($n/N \leq 0.05$)であれば、二項近似は十分な精度を持つとされています。これは品質管理の抜き取り検査で「ロットサイズが十分に大きければ二項分布で近似可能」という経験則の理論的根拠です。

この収束を数値的に確認しましょう。

Pythonによる確率質量関数の可視化

さまざまなパラメータに対する超幾何分布の形状を描画します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))

# (a) パラメータの変化による形状変化
ax = axes[0]
params = [
    (50, 10, 10, "N=50, K=10, n=10"),
    (50, 25, 10, "N=50, K=25, n=10"),
    (50, 40, 10, "N=50, K=40, n=10"),
    (50, 10, 20, "N=50, K=10, n=20"),
]

for N, K, n, label in params:
    x = np.arange(max(0, n-N+K), min(n, K) + 1)
    pmf = stats.hypergeom.pmf(x, M=N, n=K, N=n)
    ax.plot(x, pmf, "o-", markersize=5, linewidth=1.5, label=label)

ax.set_xlabel("Number of successes x", fontsize=12)
ax.set_ylabel("P(X = x)", fontsize=12)
ax.set_title("Hypergeometric distribution", fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# (b) 二項分布との比較
ax = axes[1]
N, K, n = 50, 15, 10
p = K / N
x = np.arange(0, n + 1)

pmf_hyper = stats.hypergeom.pmf(x, M=N, n=K, N=n)
pmf_binom = stats.binom.pmf(x, n=n, p=p)

ax.bar(x - 0.15, pmf_hyper, width=0.3, alpha=0.7, color="steelblue",
       label=f"Hypergeometric (N={N}, K={K}, n={n})")
ax.bar(x + 0.15, pmf_binom, width=0.3, alpha=0.7, color="salmon",
       label=rf"Binomial (n={n}, p={p:.2f})")

ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("P(X = x)", fontsize=12)
ax.set_title("Hypergeometric vs Binomial", fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig("hypergeom_pmf.png", dpi=150, bbox_inches="tight")
plt.show()

# 分散の比較
var_hyper = stats.hypergeom.var(M=N, n=K, N=n)
var_binom = n * p * (1 - p)
fpc = (N - n) / (N - 1)
print(f"超幾何分布の分散: {var_hyper:.4f}")
print(f"二項分布の分散: {var_binom:.4f}")
print(f"有限母集団補正係数: {fpc:.4f}")
print(f"二項分布の分散 × FPC: {var_binom * fpc:.4f}")

このグラフから、以下の特徴が読み取れます。

  1. 左図: パラメータの変化による形状の変化 。$K/N$ が大きいほど分布の中心が右に移動し、$n$ が大きいほど分布が広がります。$N=50, K=25, n=10$ の場合が最も対称的であり、これは $p = K/N = 0.5$ のときに分布が最も対称になるという二項分布と同じ性質です

  2. 右図: 超幾何分布と二項分布はよく似ているが、微妙な差がある 。$N = 50, n = 10$ の場合($n/N = 0.2$)では差はわずかですが、超幾何分布の方がやや中心に集中しています。これは有限母集団補正による分散の減少を反映しています

次に、二項近似の精度を系統的に検証しましょう。

二項近似の精度検証

母集団サイズ $N$ に対する抽出比 $n/N$ の変化が、近似精度にどう影響するかを可視化します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))

# (a) 抽出比に対する近似精度
ax = axes[0]
K_ratio = 0.3  # K/N の比率

for N in [50, 100, 500, 1000]:
    K = int(N * K_ratio)
    n_range = np.arange(1, N // 2, max(1, N // 50))
    max_errors = []

    for n in n_range:
        x = np.arange(max(0, n - N + K), min(n, K) + 1)
        pmf_hyper = stats.hypergeom.pmf(x, M=N, n=K, N=n)
        pmf_binom = stats.binom.pmf(x, n=n, p=K/N)
        max_errors.append(np.max(np.abs(pmf_hyper - pmf_binom)))

    ax.plot(n_range / N, max_errors, linewidth=1.5, label=rf"$N = {N}$")

ax.set_xlabel("Sampling fraction n/N", fontsize=12)
ax.set_ylabel("Max absolute error in PMF", fontsize=12)
ax.set_title("Binomial approximation error", fontsize=13)
ax.legend(fontsize=10)
ax.axvline(0.05, color="gray", linestyle="--", linewidth=1,
           label="n/N = 0.05 (rule of thumb)")
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# (b) Nを大きくしたときの収束
ax = axes[1]
n = 10
K_ratio = 0.3
N_range = np.arange(20, 1001, 10)

total_var_errors = []
for N in N_range:
    K = int(N * K_ratio)
    p = K / N

    var_hyper = stats.hypergeom.var(M=N, n=K, N=n)
    var_binom = n * p * (1 - p)
    total_var_errors.append(abs(var_hyper - var_binom))

ax.plot(N_range, total_var_errors, "b-", linewidth=1.5)
ax.set_xlabel("Population size N", fontsize=12)
ax.set_ylabel("|Var(Hyper) - Var(Binom)|", fontsize=12)
ax.set_title(rf"Variance convergence ($n = {n}$, $K/N = {K_ratio}$)",
             fontsize=13)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig("hypergeom_binom_approx.png", dpi=150, bbox_inches="tight")
plt.show()

この近似精度の分析から、以下のことがわかります。

  1. 左図: 抽出比 $n/N$ が小さいほど近似精度が良い 。$n/N \leq 0.05$(グレーの破線)では最大誤差が十分に小さく、二項近似が実用的に使えます。$n/N$ が大きくなると非復元抽出の効果が顕著になり、近似精度が悪化します

  2. 右図: $N$ が大きくなるにつれて分散の差が単調に減少する 。$n = 10$ を固定して $N$ を増やすと、有限母集団補正係数 $(N-n)/(N-1) \to 1$ に近づき、超幾何分布の分散が二項分布の分散に収束していく様子が確認できます

品質管理では、ロットサイズが大きければ二項近似で計算を簡略化できるという実務的な指針がここから得られます。

次に、超幾何分布の実用的な応用例を見てみましょう。

応用例1: 品質管理の抜き取り検査

問題設定

工場で生産された $N = 1000$ 個の製品ロットから $n = 50$ 個を抜き取り検査します。不良品が $c = 2$ 個以下ならロットを受け入れ、3個以上なら拒否する検査計画を考えます。

ロット中の実際の不良率が $d$ のとき、ロットが受け入れられる確率(OC曲線、Operating Characteristic curve)を計算します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

N = 1000  # ロットサイズ
n = 50    # サンプルサイズ
c = 2     # 合格判定数

# 不良率の範囲
defect_rates = np.linspace(0, 0.15, 100)

fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))

# (a) OC曲線(超幾何 vs 二項)
ax = axes[0]

accept_probs_hyper = []
accept_probs_binom = []

for d in defect_rates:
    K = int(N * d)

    # 超幾何分布
    prob_h = sum(stats.hypergeom.pmf(x, M=N, n=K, N=n)
                 for x in range(c + 1))
    accept_probs_hyper.append(prob_h)

    # 二項分布(近似)
    prob_b = sum(stats.binom.pmf(x, n=n, p=d)
                 for x in range(c + 1))
    accept_probs_binom.append(prob_b)

ax.plot(defect_rates * 100, accept_probs_hyper, "b-", linewidth=2,
        label="Hypergeometric (exact)")
ax.plot(defect_rates * 100, accept_probs_binom, "r--", linewidth=1.5,
        label="Binomial (approx.)")

ax.set_xlabel("Defect rate [%]", fontsize=12)
ax.set_ylabel("Acceptance probability", fontsize=12)
ax.set_title(f"OC Curve (N={N}, n={n}, c={c})", fontsize=13)
ax.axhline(0.10, color="gray", linestyle=":", linewidth=1)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

# (b) サンプルサイズの影響
ax = axes[1]
for n_val in [20, 50, 100, 150]:
    accept_probs = []
    for d in defect_rates:
        K = int(N * d)
        prob = sum(stats.hypergeom.pmf(x, M=N, n=K, N=n_val)
                   for x in range(c + 1))
        accept_probs.append(prob)
    ax.plot(defect_rates * 100, accept_probs, linewidth=2,
            label=rf"$n = {n_val}$, $c = {c}$")

ax.set_xlabel("Defect rate [%]", fontsize=12)
ax.set_ylabel("Acceptance probability", fontsize=12)
ax.set_title(f"OC Curves for different sample sizes (N={N})", fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig("hypergeom_qc.png", dpi=150, bbox_inches="tight")
plt.show()

この品質管理の分析から、以下の知見が得られます。

  1. 左図: 超幾何分布(厳密解)と二項分布(近似)のOC曲線はほぼ一致している 。$n/N = 50/1000 = 0.05$ であるため、二項近似が十分な精度を持っています。不良率が低い(2%以下)ときはほぼ確実に受け入れ、不良率が10%を超えると受け入れ確率が急速に低下します

  2. 右図: サンプルサイズが大きいほどOC曲線が急峻になる 。サンプルサイズが大きいと、良いロットを受け入れ、悪いロットを拒否する判定がより鋭敏になります。サンプルサイズが小さいと、悪いロットも受け入れてしまうリスクが高くなります。検査コストと品質リスクのバランスを取ることが検査計画の本質です

応用例2: 遺伝子セット解析

フィッシャーの正確検定

超幾何分布は、2×2分割表のフィッシャーの正確検定(Fisher’s exact test)の理論的基盤でもあります。遺伝子セット解析(Gene Set Enrichment Analysis)では、特定の遺伝子セットが差異遺伝子の中に過剰に含まれているかを超幾何分布で検定します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# --- 遺伝子セット解析の例 ---
# ゲノム全体: N = 20000 遺伝子
# あるパスウェイに属する遺伝子: K = 200
# 実験で見つかった差異遺伝子: n = 500
# そのうちパスウェイに属する遺伝子: x = 20

N_total = 20000  # ゲノム中の全遺伝子数
K_pathway = 200  # パスウェイに属する遺伝子数
n_deg = 500      # 差異発現遺伝子(DEG)数
x_observed = 20  # DEGのうちパスウェイに属する数

# 期待値
expected = n_deg * K_pathway / N_total
print(f"パスウェイの遺伝子数: {K_pathway}")
print(f"差異発現遺伝子数: {n_deg}")
print(f"パスウェイ内のDEG数: {x_observed}")
print(f"偶然の期待値: {expected:.1f}")

# 超幾何分布によるp値(片側、enrichment)
p_value = 1 - stats.hypergeom.cdf(x_observed - 1, M=N_total, n=K_pathway, N=n_deg)

# 可視化
fig, ax = plt.subplots(figsize=(10, 5.5))

x = np.arange(0, 30)
pmf = stats.hypergeom.pmf(x, M=N_total, n=K_pathway, N=n_deg)

ax.bar(x, pmf, color="steelblue", alpha=0.7, edgecolor="white", label="Null distribution")
ax.bar(x[x >= x_observed], pmf[x >= x_observed], color="red", alpha=0.7,
       edgecolor="white", label=f"p-value = {p_value:.6f}")
ax.axvline(expected, color="green", linewidth=2, linestyle="--",
           label=f"Expected = {expected:.1f}")
ax.axvline(x_observed, color="red", linewidth=2, linestyle="--",
           label=f"Observed = {x_observed}")

ax.set_xlabel("Number of pathway genes in DEGs", fontsize=12)
ax.set_ylabel("Probability", fontsize=12)
ax.set_title("Gene set enrichment analysis (hypergeometric test)", fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig("hypergeom_gene_enrichment.png", dpi=150, bbox_inches="tight")
plt.show()

print(f"\np値 = {p_value:.6f}")
if p_value < 0.05:
    print("結論: このパスウェイは差異遺伝子の中に有意に濃縮されている")
else:
    print("結論: 統計的に有意な濃縮は認められない")

この遺伝子セット解析の結果から、以下のことが読み取れます。

  1. 偶然の期待値は5個だが、実際には20個が観測された 。期待値の4倍もの遺伝子がパスウェイ内で差異発現していることは、このパスウェイが生物学的に重要な役割を果たしていることを示唆します

  2. p値が非常に小さい 。超幾何分布のもとで、20個以上のパスウェイ遺伝子がDEGに含まれる確率が極めて低いため、偶然の一致ではなく有意な濃縮(enrichment)であると結論できます

  3. グラフの赤い部分が右裾の極めて小さな面積を占めている 。これが片側p値に対応しており、観測値が帰無分布の極端な裾に位置していることを視覚的に確認できます

多変量超幾何分布

ここまでは2カテゴリー(成功/失敗)の場合を扱いましたが、3つ以上のカテゴリーがある場合への拡張も自然に定義できます。

$N$ 個の要素が $m$ 個のカテゴリーに分類され、カテゴリー $i$ に $K_i$ 個($\sum K_i = N$)が属しているとき、$n$ 個を非復元抽出したときにカテゴリー $i$ から $x_i$ 個が選ばれる確率は次のように与えられます。

$$ \begin{equation} P(X_1 = x_1, \dots, X_m = x_m) = \frac{\prod_{i=1}^m \binom{K_i}{x_i}}{\binom{N}{n}} \end{equation} $$

ここで $\sum x_i = n$ です。この分布は多変量超幾何分布(multivariate hypergeometric distribution)と呼ばれます。

二項分布の多変量版が多項分布であるのと同様に、超幾何分布の多変量版が多変量超幾何分布です。

まとめ

本記事では、超幾何分布の定義から導出、性質、応用までを解説しました。

  • 超幾何分布は非復元抽出の分布 であり、$N$ 個のうち $K$ 個が成功の母集団から $n$ 個を引いたときの成功数 $X$ の分布です。3つのパラメータ $(N, K, n)$ を持ちます
  • 確率質量関数 $P(X = x) = \frac{\binom{K}{x}\binom{N-K}{n-x}}{\binom{N}{n}}$ は組み合わせ論から直接導かれ、ヴァンデルモンドの恒等式により確率の総和が1になることが保証されます
  • 期待値 $E[X] = nK/N$ は二項分布と同じですが、分散 $\text{Var}(X) = np(1-p)\frac{N-n}{N-1}$ には有限母集団補正係数が掛かり、二項分布よりも小さくなります
  • $N \to \infty$($K/N \to p$ を保つ)のとき二項分布に収束し、実用上は $n/N \leq 0.05$ で十分な近似精度が得られます
  • 品質管理ではOC曲線の計算に、遺伝子セット解析では濃縮検定(フィッシャーの正確検定)に応用されます

次のステップとして、以下の記事も参考にしてください。