ガンマ分布(gamma distribution)は、指数分布を一般化した連続型確率分布である。指数分布が「次のイベントまでの待ち時間」を表すのに対し、ガンマ分布は「a 回目のイベントが起こるまでの待ち時間」をモデル化する。
ガンマ分布は統計学において重要な役割を果たす。特に、カイ二乗分布やF分布の基礎となり、ベイズ統計学では事前分布としても使われる。また、保険数理学や信頼性工学でも広く応用されている。
ガンマ関数
ガンマ分布を定義する前に、ガンマ関数を導入する。ガンマ関数は階乗を実数に拡張した関数であり、正の実数 a > 0 に対して次のように定義される。
ガンマ関数には以下の重要な性質がある。
- 漸化式: \Gamma(a+1) = a \cdot \Gamma(a)
- 階乗との関係: 自然数 n に対して \Gamma(n) = (n-1)!
- 特殊値: \Gamma(1) = 1、\Gamma\left(\dfrac{1}{2}\right) = \sqrt{\pi}
漸化式の証明は部分積分により得られる。
定義
形状パラメータ a > 0 と尺度パラメータ b > 0 に対して、確率変数 X が以下の確率密度関数をもつとき、X はガンマ分布に従うという。この分布を \text{Ga}(a, b) と表記する。
パラメータの意味は以下の通りである。
- a(形状パラメータ): 分布の形状を決める。a < 1 では原点で発散、a = 1 で指数分布、a > 1 では単峰型になる
- b(尺度パラメータ): 分布の広がりを決める。b が大きいほど分布が右に広がる
グラフ
異なるパラメータに対するガンマ分布の確率密度関数を示す。
a = 1 のとき指数分布と一致する。a > 1 のとき単峰型となり、a が大きくなるほど正規分布に近づく。最頻値(モード)は (a-1)b(a \geq 1 のとき)である。
期待値と分散
ガンマ分布 \text{Ga}(a, b) の期待値と分散は次のようになる。
【期待値の導出】 ガンマ関数の漸化式を利用する。
y = \dfrac{x}{b} と置換すると x = by, dx = b \, dy より
分散も同様に E[X^2] を計算して求められる。
【分散の導出】 まず E[X^2] を求める。
y = \dfrac{x}{b} と置換すると
よって分散は
モーメント母関数
ガンマ分布のモーメント母関数は次の形をとる。
【導出】
y = x\left(\dfrac{1}{b} - t\right) = \dfrac{x(1-bt)}{b} と置換すると
再生性
ガンマ分布には再生性がある。ただし、尺度パラメータ b が同じ場合に限られる。
X_1 \sim \text{Ga}(a_1, b)、X_2 \sim \text{Ga}(a_2, b) が独立のとき
【証明】 モーメント母関数を用いる。
これは \text{Ga}(a_1 + a_2, b) のモーメント母関数である。
関連する分布
指数分布との関係
ガンマ分布 \text{Ga}(1, b) は、レート \lambda = \dfrac{1}{b} の指数分布 \text{Exp}\left(\dfrac{1}{b}\right) に一致する。
また、独立な指数分布の和はガンマ分布に従う。X_1, X_2, \ldots, X_n が独立に \text{Exp}(\lambda) に従うとき
カイ二乗分布との関係
自由度 n のカイ二乗分布 \chi^2(n) は、ガンマ分布の特殊ケースである。
ベータ分布との関係
独立なガンマ分布の比からベータ分布が得られる。X_1 \sim \text{Ga}(a_1, b)、X_2 \sim \text{Ga}(a_2, b) が独立のとき
計算例
X \sim \text{Ga}(3, 2) のとき、期待値と分散を求める。
練習問題
尺度パラメータが同じ(b = 3)なので、再生性より
期待値は E[X_1 + X_2] = 6 \times 3 = 18
\Gamma(1) = 1 を出発点として
一般に \Gamma(n) = (n-1)! なので、\Gamma(5) = 4! = 24
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | ガンマ分布(gamma distribution) |
| 表記 | \text{Ga}(a, b) |
| パラメータ | a > 0(形状)、b > 0(尺度) |
| 確率密度関数 | f(x) = \dfrac{x^{a-1} e^{-x/b}}{\Gamma(a) b^a}, \quad x > 0 |
| 期待値 | E[X] = ab |
| 分散 | V[X] = ab^2 |
| モーメント母関数 | M(t) = (1 - bt)^{-a}, \quad t < 1/b |
| 再生性 | \text{Ga}(a_1, b) + \text{Ga}(a_2, b) = \text{Ga}(a_1+a_2, b) |
| 関連分布 | 指数分布、カイ二乗分布、ベータ分布 |
Pythonで実装する
Pythonを使ってガンマ分布の計算やシミュレーションを行う。
import numpy as np
from scipy import stats
from scipy.special import gamma as gamma_func
# パラメータ設定
a, b = 3, 2 # Ga(3, 2)
print(f"=== ガンマ分布 Ga({a}, {b}) ===")
# scipy.stats.gamma では shape=a, scale=b
dist = stats.gamma(a=a, scale=b)
print(f"期待値: E[X] = ab = {dist.mean():.4f}")
print(f"分散 : V[X] = ab² = {dist.var():.4f}")
# 確率密度関数
print(f"\n確率密度関数の値:")
for x in [1, 2, 4, 6, 8]:
print(f" f({x}) = {dist.pdf(x):.6f}")
# 累積分布関数
print(f"\n累積分布関数:")
for x in [2, 4, 6, 8, 10]:
print(f" P(X ≤ {x}) = {dist.cdf(x):.4f}")
# ガンマ関数の値
print(f"\nガンマ関数 Γ(a) の値:")
for n in [1, 2, 3, 4, 5]:
print(f" Γ({n}) = {gamma_func(n):.0f}")
print(f" Γ(1/2) = √π = {gamma_func(0.5):.6f}")
# 関連分布との関係
print(f"\n=== 指数分布との関係 ===")
print("Ga(1, b) = Exp(1/b)")
ga1 = stats.gamma(a=1, scale=2)
exp1 = stats.expon(scale=2)
print(f"Ga(1, 2): E[X]={ga1.mean():.2f}, V[X]={ga1.var():.2f}")
print(f"Exp(0.5): E[X]={exp1.mean():.2f}, V[X]={exp1.var():.2f}")
print(f"\n=== カイ二乗分布との関係 ===")
print("χ²(n) = Ga(n/2, 2)")
n = 6
chi2 = stats.chi2(df=n)
ga_chi2 = stats.gamma(a=n/2, scale=2)
print(f"χ²({n}): E[X]={chi2.mean():.2f}, V[X]={chi2.var():.2f}")
print(f"Ga({n/2}, 2): E[X]={ga_chi2.mean():.2f}, V[X]={ga_chi2.var():.2f}")
# シミュレーション
np.random.seed(42)
n_samples = 10000
samples = np.random.gamma(shape=a, scale=b, size=n_samples)
print(f"\nシミュレーション(n={n_samples}):")
print(f"標本平均: {np.mean(samples):.4f}")
print(f"標本分散: {np.var(samples, ddof=0):.4f}")
scipy.stats.gamma では a が形状パラメータ、scale が尺度パラメータに対応する。シミュレーション結果が理論値とよく一致していることが確認できる。