ヘロログ
統計学

モーメント法

ガンマ分布のパラメータを推定したい。しかし、最尤推定法を使おうとすると、尤度方程式に解析解がなく、数値計算が必要になる。

もっと簡単に推定できないだろうか?

モーメント法(method of moments)は、そんな場面で活躍する推定法である。「母集団のモーメント(平均や分散など)を標本から計算したモーメントで置き換える」という単純なアイデアに基づき、多くの場合、解析的に推定量を求めることができる。

直感的理解

サイコロを100回投げて、出た目の平均が 3.48 だったとする。公正なサイコロの理論的な期待値は 3.5 である。標本平均 3.48 は理論値 3.5 に近い。

この「標本から計算した値が、理論的な値に近づく」という性質を逆に利用するのがモーメント法の発想である。具体的には、次のようにする。

モーメント法の考え方

母集団のモーメント(期待値、分散など)をパラメータで表し、それを標本モーメント(標本平均、標本分散など)と等しいとおいて、パラメータについて解く。

たとえば、ある分布の期待値が E[X] = \theta と表されるなら、\theta = \bar{X}(標本平均)と推定する。これがモーメント法の基本である。

定義

母集団モーメント

確率変数 X原点まわりの k 次モーメント(raw moment)は

\mu'_k = E[X^k]

で定義される。特に \mu'_1 = E[X] は期待値(平均)である。

中心モーメント(central moment)は、期待値からの偏差のべき乗の期待値で

\mu_k = E[(X - E[X])^k]

と定義される。特に \mu_2 = V[X] は分散である。

標本モーメント

標本 X_1, X_2, \ldots, X_n から計算される標本モーメントは、母集団モーメントの推定量として使われる。

標本モーメント
\begin{aligned} \hat{\mu}'_k &= \dfrac{1}{n} \sum_{i=1}^{n} X_i^k \quad \text{(原点まわり)} \\[8pt] \hat{\mu}_k &= \dfrac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^k \quad \text{(中心)} \end{aligned}

\hat{\mu}'_1 = \bar{X} は標本平均、\hat{\mu}_2 は標本分散(n で割る)である。

モーメント法による推定

分布のパラメータを \theta = (\theta_1, \ldots, \theta_m) とする。モーメント法では、以下の手順で推定量を求める。

Step 1: 母集団モーメント \mu'_1, \mu'_2, \ldots をパラメータ \theta の関数として表す。

Step 2: 母集団モーメントを標本モーメントと等しいとおく。

\mu'_k(\theta) = \hat{\mu}'_k, \quad k = 1, 2, \ldots, m

Step 3: この連立方程式を \theta について解く。

原点まわりと中心モーメント

原点まわりのモーメントを使っても中心モーメントを使っても、同じ推定量が得られることが多い。状況に応じて計算しやすい方を選べばよい。

例1:正規分布

正規分布 N(\mu, \sigma^2) に従う標本 X_1, \ldots, X_n から、平均 \mu と分散 \sigma^2 をモーメント法で推定する。

母集団モーメント

正規分布の期待値と分散は

E[X] = \mu, \quad V[X] = \sigma^2

モーメント方程式

これらを標本モーメントと等しいとおく:

\begin{aligned} \mu &= \bar{X} \\[5pt] \sigma^2 &= \dfrac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^2 \end{aligned}

モーメント推定量

\hat{\mu} = \bar{X}, \quad \hat{\sigma}^2 = \dfrac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^2

正規分布の場合、モーメント推定量は最尤推定量と一致する。

例2:ガンマ分布

ガンマ分布 \text{Ga}(\alpha, \beta) は形状パラメータ \alpha > 0 と尺度パラメータ \beta > 0 をもつ。確率密度関数は

f(x; \alpha, \beta) = \dfrac{1}{\Gamma(\alpha) \beta^\alpha} x^{\alpha-1} e^{-x/\beta}, \quad x > 0

この分布の最尤推定量は \alpha について解析解がなく、数値計算が必要になる。しかし、モーメント法なら簡単に求められる。

母集団モーメント

ガンマ分布の期待値と分散は

E[X] = \alpha\beta, \quad V[X] = \alpha\beta^2

パラメータを解く

期待値と分散の式から \alpha\beta を求める。分散を期待値で割ると

\dfrac{V[X]}{E[X]} = \dfrac{\alpha\beta^2}{\alpha\beta} = \beta

よって \beta = \dfrac{V[X]}{E[X]}。これを期待値の式に代入すると

\alpha = \dfrac{E[X]}{\beta} = \dfrac{(E[X])^2}{V[X]}

モーメント推定量

母集団モーメントを標本モーメントで置き換えて

\hat{\alpha} = \dfrac{\bar{X}^2}{S^2}, \quad \hat{\beta} = \dfrac{S^2}{\bar{X}}

ここで S^2 = \dfrac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^2 は標本分散(n で割る)である。

モーメント法の利点

最尤法では数値計算が必要なガンマ分布のパラメータも、モーメント法なら標本平均と標本分散だけで簡単に推定できる。

例3:一様分布

区間 [0, \theta] 上の一様分布から標本が得られたとき、未知の上端 \theta を推定する。

母集団モーメント

一様分布 U(0, \theta) の期待値は

E[X] = \dfrac{\theta}{2}

モーメント方程式

\dfrac{\theta}{2} = \bar{X}

モーメント推定量

\hat{\theta}_{\text{MoM}} = 2\bar{X}

この推定量は不偏である(E[\hat{\theta}_{\text{MoM}}] = 2E[\bar{X}] = 2 \cdot \dfrac{\theta}{2} = \theta)。

最尤推定量との比較

一方、一様分布の最尤推定量は \hat{\theta}_{\text{MLE}} = X_{(n)}(標本の最大値)である。こちらはバイアスをもつが、分散が小さい。

下のグラフは、真の値 \theta = 10、サンプルサイズ n = 20 での両推定量のシミュレーション結果である。

頻度 推定値 6 8 10 12 14 θ = 10 モーメント法 最尤推定量
図1: 一様分布 U(0,10) でのモーメント推定量と最尤推定量の分布(n=20, 1000回シミュレーション)

モーメント推定量は真の値 \theta = 10 を中心に対称に分布するが、ばらつきが大きい。最尤推定量は常に \theta 以下だが(最大値は真の上端を超えないため)、真の値に集中している。

モーメント法の性質

一致性

大数の法則により、標本モーメントは母集団モーメントに確率収束する。したがって、モーメント推定量も真のパラメータに確率収束する。つまり、一致性をもつ。

\hat{\theta}_{\text{MoM}} \xrightarrow{p} \theta \quad (n \to \infty)

漸近正規性

中心極限定理デルタ法を用いて、モーメント推定量の漸近分布を導出できる。多くの場合、近似的に正規分布に従う。

効率性の比較

一般に、モーメント推定量は最尤推定量より効率が低い(分散が大きい)ことが多い。しかし、計算の簡便さとのトレードオフで選択される。

特性 モーメント法 最尤法
計算の容易さ ○ 簡単(連立方程式) △ 数値計算が必要な場合あり
効率性 △ やや劣ることが多い ○ 漸近有効
一致性 ○ あり ○ あり
漸近正規性 ○ あり ○ あり

練習問題

問1. 指数分布 \text{Exp}(\lambda)(期待値 \dfrac{1}{\lambda})に従う標本 X_1, \ldots, X_n から、\lambda のモーメント推定量を求めよ。

指数分布の期待値は E[X] = \dfrac{1}{\lambda} なので、モーメント方程式は

\dfrac{1}{\lambda} = \bar{X}

これを解いて

\hat{\lambda}_{\text{MoM}} = \dfrac{1}{\bar{X}}

この場合、モーメント推定量と最尤推定量は一致する。

問2. ポアソン分布 \text{Po}(\lambda) に従う標本から、\lambda のモーメント推定量を求めよ。

ポアソン分布では E[X] = \lambda なので

\hat{\lambda}_{\text{MoM}} = \bar{X}

ポアソン分布でも、モーメント推定量と最尤推定量は一致する。

問3. ベータ分布 \text{Be}(\alpha, \beta) の期待値は \dfrac{\alpha}{\alpha+\beta}、分散は \dfrac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)} である。標本平均 \bar{X} と標本分散 S^2 を用いて、\alpha\beta のモーメント推定量を導出せよ。

\mu = \bar{X}\sigma^2 = S^2 とおく。期待値の式より

\mu = \dfrac{\alpha}{\alpha+\beta} \implies \alpha = \mu(\alpha+\beta)

分散の式に \beta = \alpha\dfrac{1-\mu}{\mu} を代入して整理すると

\alpha + \beta = \dfrac{\mu(1-\mu)}{\sigma^2} - 1

これを用いて

\begin{aligned} \hat{\alpha} &= \bar{X} \left( \dfrac{\bar{X}(1-\bar{X})}{S^2} - 1 \right) \\[8pt] \hat{\beta} &= (1-\bar{X}) \left( \dfrac{\bar{X}(1-\bar{X})}{S^2} - 1 \right) \end{aligned}

まとめ

項目 内容
考え方 母集団モーメントを標本モーメントで置き換える
原点まわりモーメント \mu'_k = E[X^k]
標本モーメント \hat{\mu}'_k = \dfrac{1}{n}\sum X_i^k
長所 計算が簡単、解析解が得やすい
短所 最尤法より効率が低い場合がある
分布 パラメータ モーメント推定量
正規分布 \mu, \sigma^2 \hat{\mu} = \bar{X}, \hat{\sigma}^2 = S^2
ガンマ分布 \alpha, \beta \hat{\alpha} = \dfrac{\bar{X}^2}{S^2}, \hat{\beta} = \dfrac{S^2}{\bar{X}}
一様分布 U(0,\theta) \theta \hat{\theta} = 2\bar{X}
指数分布 \lambda \hat{\lambda} = \dfrac{1}{\bar{X}}
ポアソン分布 \lambda \hat{\lambda} = \bar{X}

Pythonで実装する

ガンマ分布のパラメータをモーメント法と最尤法で推定し、結果を比較する。

method_of_moments.py
import numpy as np
from scipy import stats

np.random.seed(42)

# 真のパラメータ
true_alpha = 3.0  # 形状パラメータ
true_beta = 2.0   # 尺度パラメータ
n = 100

# サンプルデータを生成
data = np.random.gamma(true_alpha, true_beta, n)

print("=== ガンマ分布のパラメータ推定 ===")
print(f"真の値: α = {true_alpha}, β = {true_beta}")
print(f"サンプルサイズ: n = {n}")
print()

# モーメント法
sample_mean = data.mean()
sample_var = data.var(ddof=0)  # n で割る

alpha_mom = sample_mean**2 / sample_var
beta_mom = sample_var / sample_mean

print("【モーメント法】")
print(f"標本平均: {sample_mean:.4f}")
print(f"標本分散: {sample_var:.4f}")
print(f"α の推定量: {alpha_mom:.4f}")
print(f"β の推定量: {beta_mom:.4f}")
print()

# 最尤法(scipy.stats を使用)
alpha_mle, loc_mle, beta_mle = stats.gamma.fit(data, floc=0)

print("【最尤法】")
print(f"α の推定量: {alpha_mle:.4f}")
print(f"β の推定量: {beta_mle:.4f}")
print()

# 推定精度の比較(シミュレーション)
n_sim = 1000
alpha_mom_list, alpha_mle_list = [], []
beta_mom_list, beta_mle_list = [], []

for _ in range(n_sim):
    data = np.random.gamma(true_alpha, true_beta, n)
    
    # モーメント法
    m, v = data.mean(), data.var(ddof=0)
    alpha_mom_list.append(m**2 / v)
    beta_mom_list.append(v / m)
    
    # 最尤法
    a, _, b = stats.gamma.fit(data, floc=0)
    alpha_mle_list.append(a)
    beta_mle_list.append(b)

print("=== 推定精度の比較(1000回シミュレーション)===")
print()
print("【α の推定】")
print(f"  モーメント法: 平均 = {np.mean(alpha_mom_list):.3f}, "
      f"標準偏差 = {np.std(alpha_mom_list):.3f}")
print(f"  最尤法:       平均 = {np.mean(alpha_mle_list):.3f}, "
      f"標準偏差 = {np.std(alpha_mle_list):.3f}")
print()
print("【β の推定】")
print(f"  モーメント法: 平均 = {np.mean(beta_mom_list):.3f}, "
      f"標準偏差 = {np.std(beta_mom_list):.3f}")
print(f"  最尤法:       平均 = {np.mean(beta_mle_list):.3f}, "
      f"標準偏差 = {np.std(beta_mle_list):.3f}")
=== ガンマ分布のパラメータ推定 === 真の値: α = 3.0, β = 2.0 サンプルサイズ: n = 100 【モーメント法】 標本平均: 5.8454 標本分散: 8.8315 α の推定量: 3.8689 β の推定量: 1.5109 【最尤法】 α の推定量: 4.0207 β の推定量: 1.4538 === 推定精度の比較(1000回シミュレーション)=== 【α の推定】 モーメント法: 平均 = 3.142, 標準偏差 = 0.512 最尤法: 平均 = 3.105, 標準偏差 = 0.424 【β の推定】 モーメント法: 平均 = 1.964, 標準偏差 = 0.341 最尤法: 平均 = 1.971, 標準偏差 = 0.288

シミュレーション結果を見ると、最尤法の方が標準偏差が小さい(効率が良い)ことがわかる。しかし、モーメント法も十分実用的な精度で推定できている。