ヘロログ
統計学

多項分布

多項分布は、3つ以上の結果がありうる試行を繰り返したとき、各結果の出現回数が従う確率分布である。コインの表裏(2通り)ではなく、サイコロの目(6通り)やアンケートの選択肢(複数通り)のような状況をモデル化する。

二項分布が「成功か失敗か」の2択を扱うのに対し、多項分布は K 個の選択肢を扱う。K = 2 のとき、多項分布は二項分布と一致する。つまり多項分布は二項分布の一般化である。

定義

K 個の結果 1, 2, \ldots, K のいずれか1つが起こる試行を考える。結果 j が起こる確率を p_j とする(p_j > 0p_1 + p_2 + \cdots + p_K = 1)。

この試行を独立に n 回行ったとき、結果 j が起こる回数を Y^{(j)} とする。確率変数のベクトル \mathbf{Y} = (Y^{(1)}, Y^{(2)}, \ldots, Y^{(K)}) が従う分布を多項分布(multinomial distribution)といい、M(n; p_1, \ldots, p_K) と表す。

常に Y^{(1)} + Y^{(2)} + \cdots + Y^{(K)} = n が成り立つことに注意する。

多項分布の確率関数
P(Y^{(1)} = y_1, \ldots, Y^{(K)} = y_K) = \dfrac{n!}{y_1! \cdots y_K!} \, p_1^{y_1} \cdots p_K^{y_K}

ただし y_j \in \{0, 1, \ldots, n\}y_1 + \cdots + y_K = n

係数 \dfrac{n!}{y_1! \cdots y_K!}多項係数と呼ばれ、\binom{n}{y_1, \ldots, y_K} とも書かれる。

確率関数の導出

n 回の試行で各結果が y_1, y_2, \ldots, y_K 回ずつ起こるとする。

  • 特定の順序で結果が並ぶ確率:p_1^{y_1} p_2^{y_2} \cdots p_K^{y_K}
  • その順序の並べ方の総数:\dfrac{n!}{y_1! y_2! \cdots y_K!}

並べ方の総数は、n 個の場所から結果1が入る y_1 個を選び、残りから結果2が入る y_2 個を選び、と順に選んでいくことで

{}_n C_{y_1} \times {}_{n-y_1} C_{y_2} \times \cdots \times {}_{y_K} C_{y_K} = \dfrac{n!}{y_1! y_2! \cdots y_K!}

と求められる。

二項分布との関係

K = 2 のとき、Y^{(1)} + Y^{(2)} = n より Y^{(2)} = n - Y^{(1)} と決まる。このとき Y^{(1)} \sim \text{Bin}(n, p_1) となり、多項分布は二項分布に帰着する。

確率分布の可視化

多項分布は多次元の分布なので、2次元や3次元でのグラフ化が難しい。ここでは K = 3n = 10(p_1, p_2, p_3) = (0.3, 0.5, 0.2) の場合に、Y^{(3)} = n - Y^{(1)} - Y^{(2)} として (Y^{(1)}, Y^{(2)}) の同時確率をヒートマップで表す。

M(10; 0.3, 0.5, 0.2) の同時確率 Y⁽¹⁾(赤) Y⁽²⁾(青) 0 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 0 確率
図1: M(10; 0.3, 0.5, 0.2) の同時確率(赤枠は最頻値付近)

確率が最も高いのは期待値 (E[Y^{(1)}], E[Y^{(2)}]) = (3, 5) 付近であり、そこから離れるほど確率は低くなる。

確率母関数

多項分布の確率母関数は多変数関数となる。

確率母関数
G(s_1, \ldots, s_K) = E\left[s_1^{Y^{(1)}} \cdots s_K^{Y^{(K)}}\right] = (p_1 s_1 + \cdots + p_K s_K)^n

導出

n = 1 の場合、ちょうど1つの Y^{(j)} だけが1で他は0となるので

E\left[s_1^{Y^{(1)}} \cdots s_K^{Y^{(K)}}\right] = s_1 \cdot p_1 + s_2 \cdot p_2 + \cdots + s_K \cdot p_K = \sum_{j=1}^{K} p_j s_j

一般の n の場合、\mathbf{Y} = \mathbf{X}_1 + \cdots + \mathbf{X}_n(各 \mathbf{X}_i \sim M(1; p_1, \ldots, p_K) が独立)と表せるので

G(s_1, \ldots, s_K) = \left(\sum_{j=1}^{K} p_j s_j\right)^n = (p_1 s_1 + \cdots + p_K s_K)^n

期待値・分散・共分散

多項分布の各成分の期待値、分散、および異なる成分間の共分散は次のようになる。

期待値と分散
E[Y^{(j)}] = np_j
V[Y^{(j)}] = np_j(1 - p_j)

これは各 Y^{(j)} が「結果 j か、それ以外か」という二項分布 \text{Bin}(n, p_j) に従うことから理解できる。

共分散

j \neq j' のとき

\text{Cov}[Y^{(j)}, Y^{(j')}] = -np_j p_{j'}

共分散が常にであることに注目したい。これは Y^{(1)} + \cdots + Y^{(K)} = n という制約があるため、ある結果の回数が増えれば他の結果の回数は減るという関係を反映している。

共分散の導出

n = 1 のとき、j \neq j' に対して「Y^{(j)} = 1 かつ Y^{(j')} = 1」は起こりえないので

E[Y^{(j)} Y^{(j')}] = 0

したがって

\text{Cov}[Y^{(j)}, Y^{(j')}] = E[Y^{(j)} Y^{(j')}] - E[Y^{(j)}]E[Y^{(j')}] = 0 - p_j p_{j'} = -p_j p_{j'}

一般の n の場合は、独立な n 回の試行の和として

\text{Cov}[Y^{(j)}, Y^{(j')}] = n \times (-p_j p_{j'}) = -np_j p_{j'}
ポイント

多項分布 M(n; p_1, \ldots, p_K) では

  • 各成分 Y^{(j)} は周辺分布として \text{Bin}(n, p_j) に従う
  • 異なる成分間の共分散は常に負(トレードオフの関係)
  • 相関係数は \rho_{jj'} = -\sqrt{\dfrac{p_j p_{j'}}{(1-p_j)(1-p_{j'})}}

計算例

例1:サイコロ

公正なサイコロを6回振ったとき、各目がちょうど1回ずつ出る確率を求めよ。

【解答】

K = 6n = 6p_1 = \cdots = p_6 = \dfrac{1}{6}y_1 = \cdots = y_6 = 1

P = \dfrac{6!}{1! \cdot 1! \cdot 1! \cdot 1! \cdot 1! \cdot 1!} \left(\dfrac{1}{6}\right)^6 = \dfrac{720}{46656} = \dfrac{5}{324} \approx 0.0154

例2:3色のボール

袋の中に赤30%、青50%、緑20%の割合でボールが大量に入っている。10個を復元抽出するとき、赤3個、青5個、緑2個となる確率を求めよ。

【解答】

M(10; 0.3, 0.5, 0.2) に従う。

\begin{aligned} P &= \dfrac{10!}{3! \cdot 5! \cdot 2!} (0.3)^3 (0.5)^5 (0.2)^2 \\[5pt] &= 2520 \times 0.027 \times 0.03125 \times 0.04 \\[5pt] &\approx 0.0851 \end{aligned}

練習問題

問1. 4択問題を10問解くとき、各選択肢をランダムに選ぶ場合、選択肢Aを3回、Bを4回、Cを2回、Dを1回選ぶ確率を求めよ。

M(10; 0.25, 0.25, 0.25, 0.25) に従う。

P = \dfrac{10!}{3! \cdot 4! \cdot 2! \cdot 1!} \left(\dfrac{1}{4}\right)^{10} = \dfrac{12600}{1048576} \approx 0.0120
問2. M(20; 0.2, 0.3, 0.5) において、E[Y^{(1)}]V[Y^{(2)}]\text{Cov}[Y^{(1)}, Y^{(3)}] を求めよ。
\begin{aligned} E[Y^{(1)}] &= 20 \times 0.2 = 4 \\[5pt] V[Y^{(2)}] &= 20 \times 0.3 \times 0.7 = 4.2 \\[5pt] \text{Cov}[Y^{(1)}, Y^{(3)}] &= -20 \times 0.2 \times 0.5 = -2 \end{aligned}
問3. K = 2 のとき、多項分布の確率関数が二項分布の確率関数と一致することを確認せよ。

K = 2 のとき y_2 = n - y_1p_2 = 1 - p_1 より

\begin{aligned} P(Y^{(1)} = y_1) &= \dfrac{n!}{y_1! (n-y_1)!} p_1^{y_1} (1-p_1)^{n-y_1} \\[5pt] &= {}_n C_{y_1} p_1^{y_1} (1-p_1)^{n-y_1} \end{aligned}

これは \text{Bin}(n, p_1) の確率関数である。

まとめ

項目 内容
分布名 多項分布(multinomial distribution)
記法 M(n; p_1, \ldots, p_K)
確率変数 K 種類の結果の出現回数 (Y^{(1)}, \ldots, Y^{(K)})
確率関数 P(\mathbf{Y} = \mathbf{y}) = \dfrac{n!}{y_1! \cdots y_K!} p_1^{y_1} \cdots p_K^{y_K}
期待値 E[Y^{(j)}] = np_j
分散 V[Y^{(j)}] = np_j(1-p_j)
共分散 \text{Cov}[Y^{(j)}, Y^{(j')}] = -np_j p_{j'} (j \neq j'
確率母関数 G(s_1, \ldots, s_K) = (p_1 s_1 + \cdots + p_K s_K)^n
二項分布との関係 K = 2 のとき Y^{(1)} \sim \text{Bin}(n, p_1)

Pythonで実装する

Pythonを使って多項分布の計算やシミュレーションを行う。

multinomial_distribution.py
import numpy as np
from scipy.stats import multinomial
import math

# パラメータ設定
n = 10
p = [0.3, 0.5, 0.2]  # 赤, 青, 緑
K = len(p)

print(f"=== 多項分布 M({n}; {p}) ===")

# 期待値・分散・共分散
print("\n期待値 E[Y^(j)] = n × p_j:")
for j, pj in enumerate(p):
    print(f"  E[Y^({j+1})] = {n*pj}")

print("\n分散 V[Y^(j)] = n × p_j × (1-p_j):")
for j, pj in enumerate(p):
    print(f"  V[Y^({j+1})] = {n*pj*(1-pj):.2f}")

print("\n共分散 Cov[Y^(j), Y^(j')] = -n × p_j × p_j':")
for j in range(K):
    for jp in range(j+1, K):
        print(f"  Cov[Y^({j+1}), Y^({jp+1})] = {-n*p[j]*p[jp]:.2f}")

# 確率計算
y = [3, 5, 2]
dist = multinomial(n, p)
print(f"\nP(Y=(3,5,2)) = {dist.pmf(y):.6f}")

# 多項係数の計算
coef = math.factorial(n) // np.prod([math.factorial(yi) for yi in y])
print(f"  多項係数 = {coef}")
print(f"  = {coef} × 0.3^3 × 0.5^5 × 0.2^2")

# シミュレーション
np.random.seed(42)
samples = np.random.multinomial(n, p, size=10000)
print(f"\nシミュレーション(10000回):")
print(f"標本平均: {np.mean(samples, axis=0)}")
print(f"理論値  : {np.array(p) * n}")
=== 多項分布 M(10; [0.3, 0.5, 0.2]) === 期待値 E[Y^(j)] = n × p_j: E[Y^(1)] = 3.0 E[Y^(2)] = 5.0 E[Y^(3)] = 2.0 分散 V[Y^(j)] = n × p_j × (1-p_j): V[Y^(1)] = 2.10 V[Y^(2)] = 2.50 V[Y^(3)] = 1.60 共分散 Cov[Y^(j), Y^(j')] = -n × p_j × p_j': Cov[Y^(1), Y^(2)] = -1.50 Cov[Y^(1), Y^(3)] = -0.60 Cov[Y^(2), Y^(3)] = -1.00 P(Y=(3,5,2)) = 0.085050 多項係数 = 2520 = 2520 × 0.3^3 × 0.5^5 × 0.2^2 シミュレーション(10000回): 標本平均: [2.9952 5.002 2.0028] 理論値 : [3. 5. 2.]

共分散が負であること、各成分の標本平均が期待値に近いことが確認できる。