ヘロログ
統計学

ガンマ分布

ガンマ分布(gamma distribution)は、指数分布を一般化した連続型確率分布である。指数分布が「次のイベントまでの待ち時間」を表すのに対し、ガンマ分布は「a 回目のイベントが起こるまでの待ち時間」をモデル化する。

ガンマ分布は統計学において重要な役割を果たす。特に、カイ二乗分布F分布の基礎となり、ベイズ統計学では事前分布としても使われる。また、保険数理学や信頼性工学でも広く応用されている。

ガンマ関数

ガンマ分布を定義する前に、ガンマ関数を導入する。ガンマ関数は階乗を実数に拡張した関数であり、正の実数 a > 0 に対して次のように定義される。

ガンマ関数の定義
\Gamma(a) = \int_0^\infty x^{a-1} e^{-x} \, dx, \quad 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}

漸化式の証明は部分積分により得られる。

\begin{aligned} \Gamma(a+1) &= \int_0^\infty x^a e^{-x} \, dx \\[5pt] &= \left[ -x^a e^{-x} \right]_0^\infty + a \int_0^\infty x^{a-1} e^{-x} \, dx = a \cdot \Gamma(a) \end{aligned}

定義

形状パラメータ a > 0 と尺度パラメータ b > 0 に対して、確率変数 X が以下の確率密度関数をもつとき、Xガンマ分布に従うという。この分布を \text{Ga}(a, b) と表記する。

ガンマ分布の確率密度関数
f(x) = \dfrac{1}{\Gamma(a) b^a} x^{a-1} e^{-\frac{x}{b}}, \quad x > 0

パラメータの意味は以下の通りである。

  • a(形状パラメータ): 分布の形状を決める。a < 1 では原点で発散、a = 1 で指数分布、a > 1 では単峰型になる
  • b(尺度パラメータ): 分布の広がりを決める。b が大きいほど分布が右に広がる

グラフ

異なるパラメータに対するガンマ分布の確率密度関数を示す。

f(x) 0.4 0.3 0.2 0.1 0 x 0 3 6 9 12 15 a=1, b=2 a=2, b=2 a=3, b=2 a=5, b=1
図1: 異なるパラメータのガンマ分布

a = 1 のとき指数分布と一致する。a > 1 のとき単峰型となり、a が大きくなるほど正規分布に近づく。最頻値(モード)は (a-1)ba \geq 1 のとき)である。

期待値と分散

ガンマ分布 \text{Ga}(a, b) の期待値と分散は次のようになる。

期待値と分散
E[X] = ab, \quad V[X] = ab^2

【期待値の導出】 ガンマ関数の漸化式を利用する。

\begin{aligned} E[X] &= \int_0^\infty x \cdot \dfrac{1}{\Gamma(a) b^a} x^{a-1} e^{-\frac{x}{b}} \, dx \\[5pt] &= \dfrac{1}{\Gamma(a) b^a} \int_0^\infty x^a e^{-\frac{x}{b}} \, dx \end{aligned}

y = \dfrac{x}{b} と置換すると x = by, dx = b \, dy より

\begin{aligned} E[X] &= \dfrac{b^{a+1}}{\Gamma(a) b^a} \int_0^\infty y^a e^{-y} \, dy = \dfrac{b}{\Gamma(a)} \Gamma(a+1) \\[5pt] &= \dfrac{b}{\Gamma(a)} \cdot a \cdot \Gamma(a) = ab \end{aligned}

分散も同様に E[X^2] を計算して求められる。

【分散の導出】 まず E[X^2] を求める。

\begin{aligned} E[X^2] &= \int_0^\infty x^2 \cdot \dfrac{x^{a-1} e^{-\frac{x}{b}}}{\Gamma(a) b^a} \, dx = \dfrac{1}{\Gamma(a) b^a} \int_0^\infty x^{a+1} e^{-\frac{x}{b}} \, dx \end{aligned}

y = \dfrac{x}{b} と置換すると

\begin{aligned} E[X^2] &= \dfrac{b^{a+2}}{\Gamma(a) b^a} \int_0^\infty y^{a+1} e^{-y} \, dy = \dfrac{b^2}{\Gamma(a)} \Gamma(a+2) \\[5pt] &= \dfrac{b^2}{\Gamma(a)} \cdot (a+1) \cdot a \cdot \Gamma(a) = a(a+1)b^2 \end{aligned}

よって分散は

V[X] = E[X^2] - (E[X])^2 = a(a+1)b^2 - (ab)^2 = a^2 b^2 + ab^2 - a^2 b^2 = ab^2

モーメント母関数

ガンマ分布のモーメント母関数は次の形をとる。

モーメント母関数
M(t) = E[e^{tX}] = (1 - bt)^{-a}, \quad t < \dfrac{1}{b}

【導出】

\begin{aligned} M(t) &= \int_0^\infty e^{tx} \cdot \dfrac{x^{a-1} e^{-\frac{x}{b}}}{\Gamma(a) b^a} \, dx \\[5pt] &= \dfrac{1}{\Gamma(a) b^a} \int_0^\infty x^{a-1} e^{-x(\frac{1}{b} - t)} \, dx \end{aligned}

y = x\left(\dfrac{1}{b} - t\right) = \dfrac{x(1-bt)}{b} と置換すると

M(t) = \dfrac{1}{\Gamma(a) b^a} \cdot \dfrac{b^a}{(1-bt)^a} \Gamma(a) = (1 - bt)^{-a}

再生性

ガンマ分布には再生性がある。ただし、尺度パラメータ b が同じ場合に限られる。

ガンマ分布の再生性

X_1 \sim \text{Ga}(a_1, b)X_2 \sim \text{Ga}(a_2, b) が独立のとき

X_1 + X_2 \sim \text{Ga}(a_1 + a_2, b)

【証明】 モーメント母関数を用いる。

\begin{aligned} M_{X_1+X_2}(t) &= M_{X_1}(t) \cdot M_{X_2}(t) \\[5pt] &= (1 - bt)^{-a_1} \cdot (1 - bt)^{-a_2} = (1 - bt)^{-(a_1+a_2)} \end{aligned}

これは \text{Ga}(a_1 + a_2, b) のモーメント母関数である。

指数分布との関係

ガンマ分布 \text{Ga}(1, b) は、レート \lambda = \dfrac{1}{b} の指数分布 \text{Exp}\left(\dfrac{1}{b}\right) に一致する。

\text{Ga}(1, b) = \text{Exp}\left(\dfrac{1}{b}\right)

また、独立な指数分布の和はガンマ分布に従う。X_1, X_2, \ldots, X_n が独立に \text{Exp}(\lambda) に従うとき

\sum_{i=1}^n X_i \sim \text{Ga}\left(n, \dfrac{1}{\lambda}\right)

カイ二乗分布との関係

自由度 n のカイ二乗分布 \chi^2(n) は、ガンマ分布の特殊ケースである。

\chi^2(n) = \text{Ga}\left(\dfrac{n}{2}, 2\right)

ベータ分布との関係

独立なガンマ分布の比からベータ分布が得られる。X_1 \sim \text{Ga}(a_1, b)X_2 \sim \text{Ga}(a_2, b) が独立のとき

\dfrac{X_1}{X_1 + X_2} \sim \text{Be}(a_1, a_2)

計算例

X \sim \text{Ga}(3, 2) のとき、期待値と分散を求める。

\begin{aligned} E[X] &= ab = 3 \times 2 = 6 \\[5pt] V[X] &= ab^2 = 3 \times 2^2 = 12 \end{aligned}

練習問題

問1. X \sim \text{Ga}(4, 3) のとき、期待値と分散を求めよ。
\begin{aligned} E[X] &= ab = 4 \times 3 = 12 \\[5pt] V[X] &= ab^2 = 4 \times 9 = 36 \end{aligned}
問2. X_1 \sim \text{Ga}(2, 3)X_2 \sim \text{Ga}(4, 3) が独立のとき、X_1 + X_2 の分布を求めよ。

尺度パラメータが同じ(b = 3)なので、再生性より

X_1 + X_2 \sim \text{Ga}(2 + 4, 3) = \text{Ga}(6, 3)

期待値は E[X_1 + X_2] = 6 \times 3 = 18

問3. ガンマ関数の漸化式 \Gamma(a+1) = a \cdot \Gamma(a) を用いて、\Gamma(5) の値を求めよ。

\Gamma(1) = 1 を出発点として

\begin{aligned} \Gamma(2) &= 1 \cdot \Gamma(1) = 1 \\[5pt] \Gamma(3) &= 2 \cdot \Gamma(2) = 2 \\[5pt] \Gamma(4) &= 3 \cdot \Gamma(3) = 6 \\[5pt] \Gamma(5) &= 4 \cdot \Gamma(4) = 24 \end{aligned}

一般に \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を使ってガンマ分布の計算やシミュレーションを行う。

gamma_distribution.py
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}")
=== ガンマ分布 Ga(3, 2) === 期待値: E[X] = ab = 6.0000 分散 : V[X] = ab² = 12.0000 確率密度関数の値: f(1) = 0.075816 f(2) = 0.091970 f(4) = 0.091970 f(6) = 0.074795 f(8) = 0.053630 累積分布関数: P(X ≤ 2) = 0.0803 P(X ≤ 4) = 0.3233 P(X ≤ 6) = 0.5768 P(X ≤ 8) = 0.7619 P(X ≤ 10) = 0.8753 ガンマ関数 Γ(a) の値: Γ(1) = 1 Γ(2) = 1 Γ(3) = 2 Γ(4) = 6 Γ(5) = 24 Γ(1/2) = √π = 1.772454 === 指数分布との関係 === Ga(1, b) = Exp(1/b) Ga(1, 2): E[X]=2.00, V[X]=4.00 Exp(0.5): E[X]=2.00, V[X]=4.00 === カイ二乗分布との関係 === χ²(n) = Ga(n/2, 2) χ²(6): E[X]=6.00, V[X]=12.00 Ga(3.0, 2): E[X]=6.00, V[X]=12.00 シミュレーション(n=10000): 標本平均: 6.0090 標本分散: 11.7921

scipy.stats.gamma では a が形状パラメータ、scale が尺度パラメータに対応する。シミュレーション結果が理論値とよく一致していることが確認できる。