多変量正規分布(multivariate normal distribution)は、1変量の正規分布を複数の確率変数に拡張したものである。身長と体重のように複数の変数が同時に観測される場面で、変数間の相関関係まで含めてモデル化できる。
この記事では、まず2変量(2次元)の場合を丁寧に解説し、その後で一般の多変量に拡張する。
2変量正規分布のイメージ
2変量正規分布を理解するために、まず具体例で考える。
ある集団の「身長 X_1」と「体重 X_2」を測定したとする。身長が高い人は体重も重い傾向があるので、この2つの変数には正の相関がある。このような状況をモデル化するのが2変量正規分布である。
2変量正規分布は以下の5つのパラメータで特徴づけられる。
- \mu_1:X_1 の平均(例:身長の平均 170cm)
- \mu_2:X_2 の平均(例:体重の平均 65kg)
- \sigma_1:X_1 の標準偏差(例:身長のばらつき 6cm)
- \sigma_2:X_2 の標準偏差(例:体重のばらつき 8kg)
- \rho:X_1 と X_2 の相関係数(例:0.7)
これらをまとめて、平均ベクトル \boldsymbol{\mu} と分散共分散行列 \Sigma で表す。
分散共分散行列の対角成分は各変数の分散、非対角成分は共分散(= 相関係数 × 標準偏差の積)である。
グラフで理解する
2変量正規分布の確率密度関数は3次元の「山」のような形をしている。これを上から見ると、等高線は楕円になる。
グラフから読み取れる重要なポイント:
- \rho = 0 のとき:等高線は「円」になる(破線)。2つの変数は独立。
- \rho > 0 のとき:等高線は「右上がりの楕円」になる(実線)。正の相関。
- \rho < 0 のとき:等高線は「右下がりの楕円」になる。負の相関。
- |\rho| が大きいほど:楕円は細長くなる。
確率密度関数
2変量正規分布 N_2(\boldsymbol{\mu}, \Sigma) の確率密度関数は以下のようになる。一見複雑に見えるが、順を追って理解すれば難しくない。
ここで Q は以下の式で定義される。
この式の構造を順に見ていく。
【ステップ1】標準化
まず、各変数を標準化する。
これは「平均からのずれを標準偏差で割る」という、1変量の標準化と同じ操作である。
【ステップ2】二次形式 Q の理解
標準化した変数を使うと、Q は次のように書ける。
この Q は「相関を考慮した、中心からの距離の2乗」と解釈できる。
- \rho = 0 のとき:Q = z_1^2 + z_2^2(普通のユークリッド距離の2乗)
- \rho \neq 0 のとき:交差項 -2\rho z_1 z_2 が加わる
【ステップ3】なぜ 1 - \rho^2 で割るのか
\rho \neq 0 のとき、単純な z_1^2 + z_2^2 では相関を無視してしまう。1 - \rho^2 で割ることで、相関の強さに応じた補正が入る。|\rho| が大きいほど 1 - \rho^2 は小さくなり、楕円が細長くなる。
具体例:確率密度関数の計算
具体的な数値で計算する。以下のパラメータを考える。
この分布の f(0, 0)(中心での確率密度)を計算する。
【計算】
標準化すると z_1 = z_2 = 0 なので、Q = 0 である。
比較のため、\rho = 0(独立な場合)の f(0, 0) も計算すると
相関がある方が中心付近の確率密度が高い。これは、相関があると分布がより集中するためである。
周辺分布
2変量正規分布から1つの変数だけを取り出すとどうなるか? これを周辺分布という。
つまり、各成分を個別に見ると普通の正規分布に従う。
重要な注意点:周辺分布は相関係数 \rho に依存しない。つまり、X_1 だけ、または X_2 だけを見ても、それらの間に相関があるかどうかはわからない。
条件付き分布
「身長が 180cm の人の体重は平均的にどのくらいか?」のように、一方の変数の値がわかったとき、もう一方の分布はどうなるかを考える。これを条件付き分布という。
ここで、条件付き期待値と条件付き分散は以下のように計算できる。
これらの式の意味を以下で説明する。
条件付き期待値の意味
条件付き期待値 \mu_{2|1} は、x_1 の1次関数になっている。
- x_1 = \mu_1 のとき:\mu_{2|1} = \mu_2(平均的な X_1 なら、X_2 も平均的)
- x_1 > \mu_1 かつ \rho > 0 のとき:\mu_{2|1} > \mu_2(X_1 が平均より大きいと、X_2 も平均より大きいと予測)
この直線は統計学で回帰直線と呼ばれるものと一致する。
条件付き分散の意味
条件付き分散 \sigma_{2|1}^2 = \sigma_2^2(1 - \rho^2) について:
- \rho = 0 のとき:\sigma_{2|1}^2 = \sigma_2^2(X_1 の情報は役に立たない)
- |\rho| が大きいとき:\sigma_{2|1}^2 は小さくなる(X_1 から X_2 を精度よく予測できる)
- |\rho| = 1 のとき:\sigma_{2|1}^2 = 0(完全に予測可能)
条件付き分散は x_1 の値によらず一定である点も重要である。
具体例:条件付き分布の計算
先ほどと同じパラメータ(\mu_1 = \mu_2 = 0、\sigma_1 = \sigma_2 = 1、\rho = 0.7)で、X_1 = 1 が与えられたときの X_2 の条件付き分布を求める。
【条件付き期待値の計算】
【条件付き分散の計算】
【結論】
つまり、X_1 = 1 と観測されると:
- X_2 の期待値は 0 から 0.7 に更新される
- X_2 の分散は 1 から 0.51 に減少する(予測精度が上がる)
- X_2 の標準偏差は \sqrt{0.51} \approx 0.71
独立性と無相関
一般に、2つの確率変数が「無相関」であっても「独立」とは限らない。しかし、2変量正規分布では特別な性質が成り立つ。
【なぜそうなるか】
\rho = 0 のとき、確率密度関数は次のように因数分解できる。
同時確率密度関数が周辺確率密度関数の積に分解できることが、独立の定義そのものである。
1次結合
2変量正規分布の成分を足したり引いたりすると、どのような分布になるか?
【例】X_1 + X_2 の分布(c_1 = c_2 = 1 の場合)
先ほどのパラメータ(\mu_1 = \mu_2 = 0、\sigma_1 = \sigma_2 = 1、\rho = 0.7)で計算する。
したがって X_1 + X_2 \sim N(0, 3.4) である。
もし独立(\rho = 0)なら V[X_1 + X_2] = 1 + 1 = 2 となる。正の相関があると、和の分散は大きくなる(両方大きい、または両方小さい傾向があるため)。
p次元への一般化
2変量の結果は、p 変量に自然に拡張できる。p 次元の確率ベクトル \mathbf{X} = (X_1, \ldots, X_p)^\top が多変量正規分布 N_p(\boldsymbol{\mu}, \Sigma) に従うとき、確率密度関数は次のようになる。
ここで:
- \boldsymbol{\mu}:p 次元の平均ベクトル
- \Sigma:p \times p の分散共分散行列(正定値対称行列)
- |\Sigma|:\Sigma の行列式
- \Sigma^{-1}:\Sigma の逆行列
指数部分の (\mathbf{x} - \boldsymbol{\mu})^\top \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu}) はマハラノビス距離の2乗と呼ばれる。これは、分散共分散構造を考慮した「中心からの距離」である。
練習問題
【期待値】
【分散】
\sigma_1 = 2、\sigma_2 = 3 であることに注意する。
【答え】 X_1 + X_2 \sim N(5, 19)
\mu_1 = \mu_2 = 0、\sigma_1 = \sigma_2 = 1、\rho = -0.6 である。
【条件付き期待値】
【条件付き分散】
【答え】 X_2 \mid X_1 = 2 \sim N(-1.2, 0.64)
負の相関があるため、X_1 が正の値をとると X_2 の期待値は負になる。
\Sigma が対角行列であることは、すべての非対角成分(共分散)が 0 であることを意味する。
多変量正規分布では無相関と独立が同値なので、X_1, \ldots, X_p は互いに独立である。
このとき確率密度関数は各成分の周辺分布の積に分解できる:
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | 多変量正規分布(multivariate normal distribution) |
| 記号 | N_p(\boldsymbol{\mu}, \Sigma) |
| パラメータ | \boldsymbol{\mu}(平均ベクトル)、\Sigma(分散共分散行列) |
| 周辺分布 | X_i \sim N(\mu_i, \sigma_i^2) |
| 条件付き期待値 | \mu_2 + \rho\dfrac{\sigma_2}{\sigma_1}(x_1 - \mu_1) |
| 条件付き分散 | \sigma_2^2(1 - \rho^2) |
| 独立性 | 無相関 \Leftrightarrow 独立(正規分布の特別な性質) |
| 等高線の形 | \rho = 0:円、\rho \neq 0:楕円 |
Pythonで実装する
Pythonを使って多変量正規分布の計算を確認する。
import numpy as np
from scipy import stats
print("=== 2変量正規分布 ===")
# パラメータ設定
mu = np.array([0, 0])
rho = 0.7
sigma1, sigma2 = 1, 1
cov = np.array([
[sigma1**2, rho*sigma1*sigma2],
[rho*sigma1*sigma2, sigma2**2]
])
print(f"平均ベクトル: {mu}")
print(f"相関係数: ρ = {rho}")
print(f"分散共分散行列:\n{cov}")
# 分布オブジェクト
dist = stats.multivariate_normal(mu, cov)
# 確率密度関数
print("\n--- 確率密度関数 ---")
print(f"f(0, 0) = {dist.pdf([0, 0]):.6f}")
print(f"f(1, 1) = {dist.pdf([1, 1]):.6f}")
# 条件付き分布 (X1=1 のとき)
print("\n--- 条件付き分布 (X1=1 が与えられたとき) ---")
x1_given = 1
E_cond = mu[1] + rho * (sigma2/sigma1) * (x1_given - mu[0])
V_cond = sigma2**2 * (1 - rho**2)
print(f"条件付き期待値 E[X2|X1=1] = {E_cond:.4f}")
print(f"条件付き分散 V[X2|X1=1] = {V_cond:.4f}")
print(f"条件付き標準偏差 = {np.sqrt(V_cond):.4f}")
# 1次結合 X1 + X2
print("\n--- 1次結合 X1 + X2 の分布 ---")
E_sum = mu[0] + mu[1]
V_sum = sigma1**2 + 2*rho*sigma1*sigma2 + sigma2**2
print(f"E[X1 + X2] = {E_sum:.4f}")
print(f"V[X1 + X2] = {V_sum:.4f}")
# シミュレーションで確認
print("\n--- シミュレーション (n=10000) ---")
np.random.seed(42)
samples = dist.rvs(10000)
print(f"標本平均: {samples.mean(axis=0)}")
print(f"標本相関係数: {np.corrcoef(samples.T)[0,1]:.4f}")
Y = samples[:, 0] + samples[:, 1]
print(f"X1+X2 の標本平均: {Y.mean():.4f}")
print(f"X1+X2 の標本分散: {Y.var():.4f}")
シミュレーション結果が理論値とよく一致している。scipy.stats.multivariate_normal を使うと、多変量正規分布を簡単に扱える。