確率分布の性質を調べるとき、確率関数や確率密度関数を直接扱うのは計算が煩雑になることが多い。特に、独立な確率変数の和の分布を求める場合、畳み込み積分を計算する必要があり、手間がかかる。
母関数(generating function)は、こうした計算を劇的に簡単にする道具である。本記事では、離散確率変数に主に用いられる確率母関数(probability generating function, PGF)と、連続確率変数にも使えるモーメント母関数(moment generating function, MGF)を解説する。
母関数のメリット
母関数を使うと、次のようなことが簡単にできる。
まず、期待値や分散の計算である。母関数を微分して特定の点で評価するだけで、モーメント(期待値、分散など)が得られる。複雑な和や積分を直接計算する必要がない。
次に、独立変数の和の分布の計算である。独立な確率変数 X と Y の和 X + Y の母関数は、それぞれの母関数の積になる。畳み込みが単なる掛け算に変わるのだ。
さらに、分布の同定にも使える。ある確率変数の母関数が既知の分布の母関数と一致すれば、その確率変数はその分布に従うことがわかる。これは母関数と分布が1対1に対応するという性質による。
確率母関数(PGF)
確率母関数は、主に非負整数値をとる離散確率変数に対して定義される。
定義
非負整数値をとる確率変数 X の確率関数を p(x) = P(X = x)(x = 0, 1, 2, \ldots)とする。X の確率母関数は、s を変数として次のように定義される。
これは p(x) を係数とするべき級数であり、|s| \leq 1 で収束する。「母関数」という名前は、この関数から元の確率分布を「生成」できることに由来する。
期待値と分散の導出
確率母関数の強力な点は、微分によってモーメントが得られることである。G(s) を s で微分すると
となり、s = 1 を代入すると G'(1) = E[X] が得られる。同様に、2階微分から G''(1) = E[X(X-1)] = E[X^2] - E[X] となる。したがって、分散は
と計算できる。
モーメント母関数(MGF)
モーメント母関数は、確率母関数をより一般化したもので、連続確率変数にも適用できる。
定義
確率変数 X のモーメント母関数は、\theta を変数として次のように定義される。
離散型の場合は M(\theta) = \sum_x e^{\theta x} p(x)、連続型の場合は M(\theta) = \int_{-\infty}^{\infty} e^{\theta x} f(x) dx となる。確率母関数との関係は、s = e^\theta とおけば M(\theta) = G(e^\theta) となることから明らかである。
モーメントの導出
「モーメント母関数」という名前は、この関数からモーメント(積率)が直接得られることに由来する。M(\theta) を k 回微分して \theta = 0 を代入すると
となり、k 次の原点まわりのモーメントが得られる。
母関数の重要な性質
分布との1対1対応
母関数は確率分布と1対1に対応する。すなわち、異なる分布は異なる母関数をもつ。この性質により、ある確率変数のモーメント母関数が既知の分布のモーメント母関数と一致することを示せば、その確率変数の分布を特定できる。
独立変数の和と母関数の積
X と Y が独立な確率変数であるとき、X + Y のモーメント母関数は
となる。畳み込みという面倒な計算が、単なる関数の積に変わるのだ。特に、X_1, \ldots, X_n が独立同一分布(i.i.d.)に従い、共通のモーメント母関数が M(\theta) であるとき、和のモーメント母関数は M_{S_n}(\theta) = (M(\theta))^n とべき乗の形で得られる。
簡単な計算例
例1:ベルヌーイ分布の確率母関数
X が成功確率 p のベルヌーイ分布に従うとする。すなわち P(X=1) = p、P(X=0) = 1-p である。確率母関数は
と計算できる。これを微分すると G'(s) = p、G''(s) = 0 なので、
となり、ベルヌーイ分布の期待値と分散が得られる。
例2:指数分布のモーメント母関数
パラメータ \lambda > 0 の指数分布に従う確率変数 X の確率密度関数は f(x) = \lambda e^{-\lambda x}(x \geq 0)である。モーメント母関数を計算すると
これを微分すると M'(\theta) = \lambda / (\lambda - \theta)^2、M''(\theta) = 2\lambda / (\lambda - \theta)^3 であり、\theta = 0 を代入すると
と求まる。
代表的な分布の母関数
主要な確率分布の母関数を表にまとめる。
| 分布 | パラメータ | 確率母関数 | モーメント母関数 |
|---|---|---|---|
| ベルヌーイ | p | (1-p) + ps | (1-p) + pe^\theta |
| 二項 | n, p | ((1-p) + ps)^n | ((1-p) + pe^\theta)^n |
| ポアソン | \lambda | e^{\lambda(s-1)} | e^{\lambda(e^\theta - 1)} |
| 幾何 | p | p / (1 - (1-p)s) | p / (1 - (1-p)e^\theta) |
| 正規 | \mu, \sigma^2 | — | \exp(\mu\theta + \sigma^2 \theta^2/2) |
| 指数 | \lambda | — | \lambda / (\lambda - \theta) |
| ガンマ | \alpha, \beta | — | (\beta / (\beta - \theta))^\alpha |
応用例:再生性の証明
母関数の積の性質を使うと、分布の再生性を簡潔に証明できる。
二項分布の再生性
X_1 \sim \text{Bin}(n_1, p)、X_2 \sim \text{Bin}(n_2, p) が独立であるとき、確率母関数の積を計算すると
これは \text{Bin}(n_1 + n_2, p) の確率母関数に一致する。母関数と分布の1対1対応により、X_1 + X_2 \sim \text{Bin}(n_1 + n_2, p) が示された。
正規分布の再生性
X_1 \sim N(\mu_1, \sigma_1^2)、X_2 \sim N(\mu_2, \sigma_2^2) が独立であるとき、モーメント母関数の積を計算すると
これは N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2) のモーメント母関数である。したがって、X_1 + X_2 \sim N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2) が成り立つ。
練習問題
確率母関数は G(s) = p / (1 - (1-p)s) = 0.2 / (1 - 0.8s)。q = 0.8 とおくと、G'(1) = q/p = 4、G''(1) = 2q^2/p^2 = 32。したがって E[X] = 4、V[X] = 32 + 4 - 16 = 20。
モーメント母関数は M(\theta) = e^{4(e^\theta - 1)}。M'(0) = 4、M''(0) = 20 より、E[X] = 4、V[X] = 20 - 16 = 4。ポアソン分布では E[X] = V[X] = \lambda が成り立つ。
M_S(\theta) = (2/(2-\theta))^3。これはガンマ分布 \text{Ga}(3, 2) のモーメント母関数に一致する。一般に、独立な n 個の \text{Exp}(\lambda) の和は \text{Ga}(n, \lambda) に従う(アーラン分布)。
まとめ
| 項目 | 内容 |
|---|---|
| 確率母関数(PGF) | G(s) = E[s^X]。主に非負整数値の離散分布に使用 |
| モーメント母関数(MGF) | M(\theta) = E[e^{\theta X}]。連続分布にも適用可能 |
| 期待値の計算 | PGF: E[X] = G'(1)、MGF: E[X] = M'(0) |
| 分布との対応 | 母関数と分布は1対1に対応する |
| 独立変数の和 | 母関数の積になる:M_{X+Y} = M_X \cdot M_Y |
Pythonで実装する
母関数の性質をシミュレーションで確認する。二項分布と正規分布の再生性を検証する。
import numpy as np
# 二項分布の再生性
n1, n2, p = 3, 4, 0.4
n_samples = 100000
np.random.seed(42)
X1 = np.random.binomial(n1, p, n_samples)
X2 = np.random.binomial(n2, p, n_samples)
X_sum = X1 + X2
print("=== 二項分布の再生性 ===")
print(f"シミュレーション: E[X1+X2] = {np.mean(X_sum):.4f}, V[X1+X2] = {np.var(X_sum):.4f}")
print(f"理論値 Bin(7, 0.4): E = {(n1+n2)*p:.4f}, V = {(n1+n2)*p*(1-p):.4f}")
# 正規分布の再生性
mu1, sigma1 = 1.0, 0.5
mu2, sigma2 = 2.0, 1.0
np.random.seed(42)
Y1 = np.random.normal(mu1, sigma1, n_samples)
Y2 = np.random.normal(mu2, sigma2, n_samples)
Y_sum = Y1 + Y2
print("\n=== 正規分布の再生性 ===")
print(f"シミュレーション: E[Y1+Y2] = {np.mean(Y_sum):.4f}, V[Y1+Y2] = {np.var(Y_sum):.4f}")
print(f"理論値 N(3.0, 1.25): E = {mu1+mu2:.4f}, V = {sigma1**2+sigma2**2:.4f}")
シミュレーション結果が理論値とよく一致しており、母関数から導いた再生性が正しいことが確認できる。