確率母関数の定義と性質をわかりやすく解説する

確率母関数(Probability Generating Function; PGF)は、確率変数の定義域が非負の整数($x \geq 0$)である離散確率変数において定義できる関数です。

確率母関数は確率分布に対して1対1に対応し、確率母関数を求めることで $k$ 次階乗モーメントを次々と求めることができ、実用上重要な関数となっています。

今回は、確率母関数の定義や性質をできるだけ分かりやすく解説していきます。

本記事の内容

  • 確率母関数の定義
  • 微分による階乗モーメントの導出
  • 期待値・分散との関係
  • 具体例(ベルヌーイ分布、ポアソン分布)

前提知識

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

確率母関数の定義

非負整数値をとる確率変数 $X$ に対して、確率母関数 $G_X(s)$ を次のように定義します。

$$ \begin{equation} G_X(s) = E[s^X] = \sum_{k=0}^{\infty} s^k p(k) \end{equation} $$

ここで $|s| \leq 1$ です。

(1) 式を展開すると、

$$ \begin{equation} G_X(s) = p(0) + s \cdot p(1) + s^2 \cdot p(2) + s^3 \cdot p(3) + \cdots \end{equation} $$

確率母関数は、べき級数の係数として各値の確率 $p(k)$ を持つ関数であることがわかります。

確率母関数の性質

性質1: 確率の復元

$G_X(s)$ を $k$ 回微分して $s = 0$ を代入すると、

$$ \begin{equation} p(k) = \frac{1}{k!} G_X^{(k)}(0) \end{equation} $$

性質2: 正規化条件

$$ G_X(1) = \sum_{k=0}^{\infty} p(k) = 1 $$

性質3: 階乗モーメント

$G_X(s)$ を $n$ 回微分して $s = 1$ を代入すると、$n$ 次階乗モーメントが得られます。

$$ \begin{equation} G_X^{(n)}(1) = E[X(X-1)(X-2)\cdots(X-n+1)] \end{equation} $$

1次階乗モーメント(期待値):

$$ G_X'(1) = E[X] $$

2次階乗モーメント:

$$ G_X”(1) = E[X(X-1)] = E[X^2] – E[X] $$

期待値と分散

$$ \begin{align} E[X] &= G_X'(1) \\ \text{Var}(X) &= G_X”(1) + G_X'(1) – (G_X'(1))^2 \end{align} $$

具体例1: ベルヌーイ分布

$X \sim \text{Bern}(\mu)$ のとき、$p(0) = 1-\mu$, $p(1) = \mu$ なので、

$$ \begin{equation} G_X(s) = (1-\mu) + \mu s = 1 – \mu + \mu s \end{equation} $$

$$ G_X'(s) = \mu \implies E[X] = \mu \quad \checkmark $$

$$ G_X”(s) = 0 \implies \text{Var}(X) = 0 + \mu – \mu^2 = \mu(1-\mu) \quad \checkmark $$

具体例2: ポアソン分布

$X \sim \text{Poi}(\lambda)$ のとき、$p(k) = \frac{\lambda^k e^{-\lambda}}{k!}$ なので、

$$ \begin{align} G_X(s) &= \sum_{k=0}^{\infty} s^k \frac{\lambda^k e^{-\lambda}}{k!} = e^{-\lambda} \sum_{k=0}^{\infty} \frac{(\lambda s)^k}{k!} = e^{-\lambda} e^{\lambda s} \end{align} $$

$$ \begin{equation} G_X(s) = \exp(\lambda(s-1)) \end{equation} $$

$$ G_X'(s) = \lambda \exp(\lambda(s-1)) \implies E[X] = \lambda \quad \checkmark $$

$$ G_X”(s) = \lambda^2 \exp(\lambda(s-1)) \implies \text{Var}(X) = \lambda^2 + \lambda – \lambda^2 = \lambda \quad \checkmark $$

独立な確率変数の和

独立な確率変数 $X, Y$ の和 $Z = X + Y$ の確率母関数は、

$$ \begin{equation} G_Z(s) = G_X(s) \cdot G_Y(s) \end{equation} $$

これは確率分布の再生性の証明に利用されます。

Python での可視化

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson, binom

# ポアソン分布の確率母関数
lam = 3.0
s = np.linspace(0, 1, 200)

# 理論的なPGF
pgf_theory = np.exp(lam * (s - 1))

# 確率関数から直接計算
K_max = 20
k_values = np.arange(K_max + 1)
pmf = poisson.pmf(k_values, lam)
pgf_direct = np.array([np.sum(si**k_values * pmf) for si in s])

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# 左: PGFの比較
ax1 = axes[0]
ax1.plot(s, pgf_theory, 'r-', linewidth=2, label='Theory: exp(lam*(s-1))')
ax1.plot(s, pgf_direct, 'b--', linewidth=1.5, label='Direct sum')
ax1.axhline(y=1, color='k', linestyle=':', alpha=0.3)
ax1.axvline(x=1, color='k', linestyle=':', alpha=0.3)
ax1.set_xlabel('s', fontsize=12)
ax1.set_ylabel('G_X(s)', fontsize=12)
ax1.set_title(f'PGF of Poisson(lambda={lam})', fontsize=12)
ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3)

# 中央: 微分からのモーメント導出
ax2 = axes[1]
ds = 0.001
pgf_deriv1 = np.gradient(pgf_theory, s)
pgf_deriv2 = np.gradient(pgf_deriv1, s)

ax2.plot(s, pgf_deriv1, 'b-', linewidth=2, label="G'(s)")
ax2.plot(s, pgf_deriv2, 'g-', linewidth=2, label="G''(s)")
idx_1 = np.argmin(np.abs(s - 1))
ax2.scatter(1, pgf_deriv1[idx_1], s=100, color='blue', zorder=5)
ax2.scatter(1, pgf_deriv2[idx_1], s=100, color='green', zorder=5)
ax2.annotate(f"E[X] = {pgf_deriv1[idx_1]:.1f}", (0.7, pgf_deriv1[idx_1]+0.5), fontsize=11)
ax2.annotate(f"E[X(X-1)] = {pgf_deriv2[idx_1]:.1f}", (0.5, pgf_deriv2[idx_1]+0.5), fontsize=11)
ax2.set_xlabel('s', fontsize=12)
ax2.set_title('Derivatives of PGF', fontsize=12)
ax2.legend(fontsize=10)
ax2.grid(True, alpha=0.3)

# 右: 独立なポアソン変数の和のPGF
ax3 = axes[2]
lam1, lam2 = 2.0, 4.0
pgf_X = np.exp(lam1 * (s - 1))
pgf_Y = np.exp(lam2 * (s - 1))
pgf_Z = pgf_X * pgf_Y  # 和のPGF
pgf_Z_theory = np.exp((lam1 + lam2) * (s - 1))

ax3.plot(s, pgf_X, 'b-', linewidth=1.5, label=f'X ~ Poi({lam1})')
ax3.plot(s, pgf_Y, 'g-', linewidth=1.5, label=f'Y ~ Poi({lam2})')
ax3.plot(s, pgf_Z, 'r-', linewidth=2, label=f'Z=X+Y: product')
ax3.plot(s, pgf_Z_theory, 'k--', linewidth=1.5, label=f'Poi({lam1+lam2})')
ax3.set_xlabel('s', fontsize=12)
ax3.set_ylabel('G(s)', fontsize=12)
ax3.set_title('PGF of Sum of Independent Variables', fontsize=12)
ax3.legend(fontsize=9)
ax3.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

右のグラフでは、独立なポアソン変数の和のPGFが $G_X \cdot G_Y$ として計算でき、$\text{Poi}(\lambda_1 + \lambda_2)$ のPGFと一致することが確認できます。

まとめ

本記事では、確率母関数について解説しました。

  • 確率母関数 $G_X(s) = E[s^X]$ は非負整数値の離散確率変数に対して定義される
  • 微分と $s = 1$ の代入により、階乗モーメント、期待値、分散が得られる
  • 独立な変数の和のPGFは各PGFの積で表される
  • 確率分布を一意に特徴づけるため、分布の同定や再生性の証明に利用できる

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