1次元の正規分布は統計学で最も重要な分布ですが、多くの実問題では複数の変数を同時に扱う必要があります。身長と体重は同時に正規分布に従うかもしれませんし、株式ポートフォリオの複数銘柄のリターンも共同で正規分布に従うと仮定されることがあります。これらの問題に対応するのが多変量正規分布(multivariate normal distribution)です。
多変量正規分布は、多変量統計学のほぼすべての手法の基盤をなす分布です。主成分分析、判別分析、因子分析、正準相関分析のいずれも、多変量正規分布の性質に依拠しています。
多変量正規分布を理解すると、以下のような応用が開けます。
- 金融工学: ポートフォリオ理論における資産リターンの共同分布モデル
- ガウス過程回帰: 機械学習における柔軟なベイズ回帰の基盤
- ベイズ推定: 事前分布と事後分布の共役性
- カルマンフィルタ: 線形動的システムの最適推定
本記事では、多変量正規分布の確率密度関数を定義し、周辺分布と条件付き分布を厳密に導出します。マハラノビス距離の幾何学的意味も解説し、Pythonで可視化します。
本記事の内容
- 多変量正規分布の確率密度関数と幾何学的意味
- マハラノビス距離の定義と解釈
- 周辺分布の導出
- 条件付き分布の導出(ブロック行列の逆行列を使用)
- 線形変換の性質
- Pythonでの実装と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
- 正規分布 — 1次元正規分布の性質
- 分散共分散行列 — 共分散行列の定義と性質
- 固有値と固有ベクトル — 行列の対角化
多変量正規分布の定義
1次元からの拡張
1次元正規分布 $N(\mu, \sigma^2)$ の確率密度関数は次の式でした。
$$ f(x) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(x – \mu)^2}{2\sigma^2}\right) $$
指数の肩の $(x – \mu)^2/\sigma^2$ は「平均からの距離を分散で正規化した量」です。多変量に拡張するには、このスカラーの「正規化された距離」を行列を使ったベクトルの距離に拡張すればよいのです。
確率密度関数
$p$ 次元の確率変数ベクトル $\bm{x} = (x_1, x_2, \dots, x_p)^\top$ が多変量正規分布 $N(\bm{\mu}, \bm{\Sigma})$ に従うとき、その確率密度関数は次のように定義されます。
$$ \begin{equation} f(\bm{x}) = \frac{1}{(2\pi)^{p/2}|\bm{\Sigma}|^{1/2}}\exp\left(-\frac{1}{2}(\bm{x} – \bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x} – \bm{\mu})\right) \end{equation} $$
各記号の意味は以下の通りです。
- $\bm{\mu} \in \mathbb{R}^p$: 平均ベクトル。分布の中心
- $\bm{\Sigma} \in \mathbb{R}^{p \times p}$: 共分散行列。正定値対称行列
- $|\bm{\Sigma}|$: 共分散行列の行列式。「分布の広がりの体積」に相当
- $\bm{\Sigma}^{-1}$: 精度行列(共分散行列の逆行列)
1次元の場合と対応させると、$\mu \to \bm{\mu}$、$\sigma^2 \to \bm{\Sigma}$、$(x-\mu)^2/\sigma^2 \to (\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu})$、$\sqrt{2\pi\sigma^2} \to (2\pi)^{p/2}|\bm{\Sigma}|^{1/2}$ と拡張されていることがわかります。
幾何学的な意味
指数の肩に現れる二次形式 $(\bm{x} – \bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x} – \bm{\mu})$ はマハラノビス距離の2乗です。この値が一定の点の集合は $p$ 次元の楕円体($p = 2$ では楕円)になります。つまり、多変量正規分布の等確率密度面は楕円体であり、その形状と向きは共分散行列 $\bm{\Sigma}$ によって決まります。
$\bm{\Sigma}$ を固有値分解 $\bm{\Sigma} = \bm{U}\bm{\Lambda}\bm{U}^\top$ すると、楕円体の各軸の方向は固有ベクトル、各軸の長さは固有値の平方根に比例します。固有値が大きい方向にデータは広がり、小さい方向には密集します。
$\bm{\Sigma}$ が対角行列の場合、変数間に相関がなく、楕円体の軸は座標軸に平行になります。非対角成分が非ゼロの場合は楕円体が回転し、変数間の相関を反映します。
マハラノビス距離について詳しく見ていきましょう。
マハラノビス距離
定義と意味
マハラノビス距離(Mahalanobis distance)は、多変量データにおける「正規化された距離」です。
$$ \begin{equation} d_M(\bm{x}, \bm{\mu}) = \sqrt{(\bm{x} – \bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x} – \bm{\mu})} \end{equation} $$
通常のユークリッド距離 $\|\bm{x} – \bm{\mu}\|$ は、各変数を同じスケールで扱います。しかし、変数のスケールが異なる場合(身長がメートル、体重がキログラムなど)や、変数間に相関がある場合、ユークリッド距離は適切な「離れ具合」を測れません。
マハラノビス距離は共分散行列 $\bm{\Sigma}$ でスケーリングすることで、データの散らばり方を考慮した距離を定義します。分散が大きい方向での距離は相対的に小さく評価され、分散が小さい方向での距離は大きく評価されます。
直感的には、マハラノビス距離は「そのデータ点が分布の中心からどれだけ”異常”に離れているか」を測ります。
マハラノビス距離とカイ二乗分布
$\bm{x} \sim N(\bm{\mu}, \bm{\Sigma})$ のとき、マハラノビス距離の2乗はカイ二乗分布に従います。
$$ \begin{equation} d_M^2 = (\bm{x} – \bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x} – \bm{\mu}) \sim \chi^2(p) \end{equation} $$
この性質は多変量の異常値検出や仮説検定の基盤になります。$d_M^2$ が自由度 $p$ のカイ二乗分布の上側確率点を超えるデータ点は「外れ値」と判定できます。
周辺分布と条件付き分布を導出する準備として、ブロック行列の分割を導入しましょう。
周辺分布の導出
ブロック分割
$p$ 次元の確率変数 $\bm{x}$ を2つの部分に分割します。$\bm{x} = (\bm{x}_1^\top, \bm{x}_2^\top)^\top$ で、$\bm{x}_1 \in \mathbb{R}^{p_1}$、$\bm{x}_2 \in \mathbb{R}^{p_2}$($p_1 + p_2 = p$)とします。
対応して、平均ベクトルと共分散行列もブロック分割します。
$$ \bm{\mu} = \begin{pmatrix}\bm{\mu}_1\\\bm{\mu}_2\end{pmatrix}, \quad \bm{\Sigma} = \begin{pmatrix}\bm{\Sigma}_{11} & \bm{\Sigma}_{12}\\\bm{\Sigma}_{21} & \bm{\Sigma}_{22}\end{pmatrix} $$
周辺分布は正規分布
$\bm{x}_1$ の周辺分布は、$\bm{x}_2$ をすべてのとりうる値について積分することで得られます。
$$ f(\bm{x}_1) = \int_{\mathbb{R}^{p_2}} f(\bm{x}_1, \bm{x}_2)\,d\bm{x}_2 $$
結果を先に述べると、周辺分布も多変量正規分布になります。
$$ \begin{equation} \bm{x}_1 \sim N(\bm{\mu}_1, \bm{\Sigma}_{11}) \end{equation} $$
つまり、多変量正規分布の周辺分布は、対応する平均と共分散のブロックを取り出すだけで得られます。これは多変量正規分布の重要な閉包性質です。
同様に $\bm{x}_2 \sim N(\bm{\mu}_2, \bm{\Sigma}_{22})$ です。
ここまでで周辺分布が得られました。次に、$\bm{x}_2$ の値が与えられたときの $\bm{x}_1$ の条件付き分布を導出します。これは多変量正規分布の最も重要な性質の一つです。
条件付き分布の導出
条件付き分布の結果
$\bm{x}_2 = \bm{a}$ が与えられたときの $\bm{x}_1$ の条件付き分布は、次の多変量正規分布になります。
$$ \begin{equation} \bm{x}_1 | \bm{x}_2 = \bm{a} \sim N(\bm{\mu}_{1|2}, \bm{\Sigma}_{1|2}) \end{equation} $$
ここで条件付き平均と条件付き共分散は次のように表されます。
$$ \begin{equation} \bm{\mu}_{1|2} = \bm{\mu}_1 + \bm{\Sigma}_{12}\bm{\Sigma}_{22}^{-1}(\bm{a} – \bm{\mu}_2) \end{equation} $$
$$ \begin{equation} \bm{\Sigma}_{1|2} = \bm{\Sigma}_{11} – \bm{\Sigma}_{12}\bm{\Sigma}_{22}^{-1}\bm{\Sigma}_{21} \end{equation} $$
この結果にはいくつかの注目すべき特徴があります。
- 条件付き分布も正規分布: 条件付けても正規性が保たれます
- 条件付き平均は $\bm{x}_2$ の線形関数: $\bm{\mu}_{1|2} = \bm{\mu}_1 + \bm{\Sigma}_{12}\bm{\Sigma}_{22}^{-1}(\bm{a} – \bm{\mu}_2)$。$\bm{x}_2$ が平均より大きいとき、$\bm{x}_1$ の期待値も共分散構造に応じてシフトします
- 条件付き共分散は $\bm{x}_2$ の値に依存しない: $\bm{\Sigma}_{1|2}$ は $\bm{a}$ を含みません。観測値の不確実性は「何を観測したか」ではなく「何を観測するか」だけで決まります
導出
条件付き分布 $f(\bm{x}_1 | \bm{x}_2) = f(\bm{x}_1, \bm{x}_2)/f(\bm{x}_2)$ を計算するために、指数の肩の二次形式をブロック分割して整理します。
$\bm{\Sigma}^{-1}$ をブロック分割し、シューア補行列を使います。
$$ \bm{\Sigma}^{-1} = \begin{pmatrix}\bm{\Sigma}^{11} & \bm{\Sigma}^{12}\\\bm{\Sigma}^{21} & \bm{\Sigma}^{22}\end{pmatrix} $$
ここで $\bm{\Sigma}^{11} = (\bm{\Sigma}_{11} – \bm{\Sigma}_{12}\bm{\Sigma}_{22}^{-1}\bm{\Sigma}_{21})^{-1} = \bm{\Sigma}_{1|2}^{-1}$ です。
二次形式 $Q = (\bm{x} – \bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x} – \bm{\mu})$ を展開し、$\bm{x}_1$ に依存する項と依存しない項に分離します。
$\bm{x}_1$ に関する完全平方式を作る(平方完成する)と次のようになります。
$$ Q = (\bm{x}_1 – \bm{\mu}_{1|2})^\top\bm{\Sigma}_{1|2}^{-1}(\bm{x}_1 – \bm{\mu}_{1|2}) + (\bm{x}_2 – \bm{\mu}_2)^\top\bm{\Sigma}_{22}^{-1}(\bm{x}_2 – \bm{\mu}_2) $$
第1項は $\bm{x}_1$ のみに依存し、第2項は $\bm{x}_2$ のみに依存します。
同時密度関数は $f(\bm{x}_1, \bm{x}_2) \propto \exp(-Q/2)$ なので、この分解により次のような分離が可能です。
$$ f(\bm{x}_1, \bm{x}_2) \propto \exp\left(-\frac{1}{2}(\bm{x}_1 – \bm{\mu}_{1|2})^\top\bm{\Sigma}_{1|2}^{-1}(\bm{x}_1 – \bm{\mu}_{1|2})\right) \times \exp\left(-\frac{1}{2}(\bm{x}_2 – \bm{\mu}_2)^\top\bm{\Sigma}_{22}^{-1}(\bm{x}_2 – \bm{\mu}_2)\right) $$
周辺密度 $f(\bm{x}_2) \propto \exp\left(-\frac{1}{2}(\bm{x}_2 – \bm{\mu}_2)^\top\bm{\Sigma}_{22}^{-1}(\bm{x}_2 – \bm{\mu}_2)\right)$ で割ると、条件付き密度が得られます。
$$ f(\bm{x}_1 | \bm{x}_2) \propto \exp\left(-\frac{1}{2}(\bm{x}_1 – \bm{\mu}_{1|2})^\top\bm{\Sigma}_{1|2}^{-1}(\bm{x}_1 – \bm{\mu}_{1|2})\right) $$
これは平均 $\bm{\mu}_{1|2}$、共分散 $\bm{\Sigma}_{1|2}$ の多変量正規分布の密度関数に他なりません。
この条件付き分布の結果は、ガウス過程回帰やカルマンフィルタなど、条件付きガウス分布を活用する多くの手法の数学的基盤です。
線形変換の性質
アフィン変換と正規性の保存
多変量正規分布の重要な性質として、線形変換で正規性が保たれることがあります。$\bm{x} \sim N(\bm{\mu}, \bm{\Sigma})$ で、$\bm{A}$ を $m \times p$ の行列、$\bm{b}$ を $m$ 次元のベクトルとすると次が成り立ちます。
$$ \begin{equation} \bm{y} = \bm{A}\bm{x} + \bm{b} \sim N(\bm{A}\bm{\mu} + \bm{b}, \, \bm{A}\bm{\Sigma}\bm{A}^\top) \end{equation} $$
この性質は主成分分析(データの直交回転)や判別分析(射影方向の探索)の理論的基盤です。
独立性と無相関の同値性
一般に、2つの確率変数が無相関であっても独立とは限りません。しかし、多変量正規分布の場合は無相関と独立が同値です。
$$ \begin{equation} \bm{\Sigma}_{12} = \bm{O} \iff \bm{x}_1 \perp \bm{x}_2 \end{equation} $$
これは正規分布に特有の性質であり、非正規分布では成り立ちません。この性質のおかげで、共分散行列(または精度行列)のゼロパターンから変数間の独立性構造を読み取ることができ、偏相関係数やガウシアングラフィカルモデルの基盤となっています。
Pythonで理論を可視化して確認しましょう。
Pythonによる実装と可視化
2次元正規分布の可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
# --- パラメータ ---
mu = np.array([1, 2])
Sigma = np.array([[2.0, 1.2],
[1.2, 1.0]])
# --- 格子点 ---
x = np.linspace(-3, 5, 200)
y = np.linspace(-2, 6, 200)
X, Y = np.meshgrid(x, y)
pos = np.dstack((X, Y))
# --- 確率密度 ---
rv = multivariate_normal(mu, Sigma)
Z = rv.pdf(pos)
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# (a) 等高線図
ax = axes[0]
ax.contour(X, Y, Z, levels=10, cmap="viridis")
ax.plot(mu[0], mu[1], "r+", markersize=15, markeredgewidth=2)
eigvals, eigvecs = np.linalg.eigh(Sigma)
for k in range(2):
ax.annotate("", xy=mu + 2*np.sqrt(eigvals[k])*eigvecs[:, k],
xytext=mu,
arrowprops=dict(arrowstyle="->", color="red", lw=2))
ax.set_xlabel("$x_1$", fontsize=11)
ax.set_ylabel("$x_2$", fontsize=11)
ax.set_title("(a) Contours of bivariate normal", fontsize=12)
ax.set_aspect("equal")
ax.grid(True, alpha=0.3)
# (b) 3Dサーフェス
ax = axes[1]
ax.remove()
ax = fig.add_subplot(132, projection="3d")
ax.plot_surface(X, Y, Z, cmap="viridis", alpha=0.8, linewidth=0)
ax.set_xlabel("$x_1$", fontsize=10)
ax.set_ylabel("$x_2$", fontsize=10)
ax.set_zlabel("$f(x_1, x_2)$", fontsize=10)
ax.set_title("(b) PDF surface", fontsize=12)
# (c) サンプリングとマハラノビス距離
ax = axes[2]
samples = np.random.multivariate_normal(mu, Sigma, 500)
Sigma_inv = np.linalg.inv(Sigma)
d_mahal = np.array([np.sqrt((s - mu) @ Sigma_inv @ (s - mu)) for s in samples])
sc = ax.scatter(samples[:, 0], samples[:, 1], c=d_mahal, cmap="hot_r",
alpha=0.5, s=15)
plt.colorbar(sc, ax=ax, label="Mahalanobis distance")
ax.plot(mu[0], mu[1], "k+", markersize=15, markeredgewidth=2)
ax.set_xlabel("$x_1$", fontsize=11)
ax.set_ylabel("$x_2$", fontsize=11)
ax.set_title("(c) Samples colored by $d_M$", fontsize=12)
ax.set_aspect("equal")
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("multivariate_normal.png", dpi=150, bbox_inches="tight")
plt.show()
この可視化から、多変量正規分布の幾何学的な性質が確認できます。
-
等高線(図a): 等確率密度の曲線は楕円形をしており、共分散行列の固有ベクトル方向に軸を持っています。赤い矢印は固有ベクトルの方向を示し、矢印の長さは固有値の平方根に比例しています
-
確率密度の表面(図b): ベル型の曲面が2次元に拡張されたものとして描かれています。ピークの位置は平均ベクトル $\bm{\mu}$ に対応します
-
マハラノビス距離(図c): サンプル点をマハラノビス距離で色付けしています。楕円の中心付近は距離が小さく(白)、楕円の外側は距離が大きく(赤)なっています。等距離の点が楕円を形成していることが確認できます
条件付き分布の可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm, multivariate_normal
mu = np.array([1, 2])
Sigma = np.array([[2.0, 1.2], [1.2, 1.0]])
# --- 条件付き分布の計算 ---
x2_given = 3.5 # x2 = 3.5 が与えられたとする
mu_cond = mu[0] + Sigma[0, 1] / Sigma[1, 1] * (x2_given - mu[1])
sigma_cond = Sigma[0, 0] - Sigma[0, 1]**2 / Sigma[1, 1]
x = np.linspace(-3, 5, 200)
y = np.linspace(-1, 5, 200)
X_grid, Y_grid = np.meshgrid(x, y)
pos = np.dstack((X_grid, Y_grid))
rv = multivariate_normal(mu, Sigma)
Z = rv.pdf(pos)
fig, axes = plt.subplots(1, 2, figsize=(13, 5.5))
# (a) 同時分布と条件付き分布の断面
ax = axes[0]
ax.contour(X_grid, Y_grid, Z, levels=10, cmap="viridis", alpha=0.7)
ax.axhline(x2_given, color="red", linewidth=1.5, linestyle="--",
label=f"$x_2 = {x2_given}$")
ax.plot(mu_cond, x2_given, "ro", markersize=10, label=f"$E[x_1|x_2]={mu_cond:.2f}$")
ax.fill_between([mu_cond - 2*np.sqrt(sigma_cond), mu_cond + 2*np.sqrt(sigma_cond)],
x2_given - 0.15, x2_given + 0.15, color="red", alpha=0.3)
ax.set_xlabel("$x_1$", fontsize=11)
ax.set_ylabel("$x_2$", fontsize=11)
ax.set_title("(a) Joint distribution and conditional slice", fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
# (b) 条件付き分布 p(x1 | x2=3.5)
ax = axes[1]
x1_range = np.linspace(-3, 5, 200)
pdf_joint_slice = rv.pdf(np.column_stack([x1_range, np.full_like(x1_range, x2_given)]))
pdf_cond = norm.pdf(x1_range, mu_cond, np.sqrt(sigma_cond))
ax.plot(x1_range, pdf_cond, "r-", linewidth=2,
label=f"$N({mu_cond:.2f}, {sigma_cond:.3f})$")
ax.fill_between(x1_range, pdf_cond, alpha=0.2, color="red")
ax.axvline(mu_cond, color="gray", linewidth=0.8, linestyle="--")
ax.set_xlabel("$x_1$", fontsize=11)
ax.set_ylabel("Density", fontsize=11)
ax.set_title(f"(b) Conditional distribution $p(x_1|x_2={x2_given})$", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("conditional_normal.png", dpi=150, bbox_inches="tight")
plt.show()
print(f"無条件平均: E[x1] = {mu[0]}")
print(f"条件付き平均: E[x1|x2={x2_given}] = {mu_cond:.4f}")
print(f"無条件分散: Var(x1) = {Sigma[0,0]}")
print(f"条件付き分散: Var(x1|x2) = {sigma_cond:.4f}")
print(f"回帰係数: β = Σ12/Σ22 = {Sigma[0,1]/Sigma[1,1]:.4f}")
条件付き分布の可視化から、以下の重要な性質が確認できます。
-
条件付き平均のシフト(図a): $x_2 = 3.5$ が与えられると、$x_1$ の期待値は無条件の平均 $\mu_1 = 1$ からシフトします。$x_2$ が平均 $\mu_2 = 2$ より大きいので、正の相関のもとで $x_1$ の期待値も増加しています
-
条件付き分散の減少(図b): 条件付き分散 $\bm{\Sigma}_{1|2}$ は無条件分散 $\bm{\Sigma}_{11}$ より小さくなっています。$x_2$ を観測することで $x_1$ についての不確実性が減少するのは、両者に相関があるためです
-
回帰係数: 条件付き平均の式 $\mu_{1|2} = \mu_1 + (\Sigma_{12}/\Sigma_{22})(x_2 – \mu_2)$ は、$x_1$ を $x_2$ で回帰したときの回帰式そのものです。多変量正規分布では、条件付き期待値が線形回帰と一致するのです
まとめ
本記事では、多変量正規分布の性質を体系的に解説しました。
- 確率密度関数: $f(\bm{x}) = (2\pi)^{-p/2}|\bm{\Sigma}|^{-1/2}\exp(-\frac{1}{2}(\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu}))$
- マハラノビス距離: $d_M^2 = (\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu}) \sim \chi^2(p)$。データの散らばりを考慮した距離
- 周辺分布: $\bm{x}_1 \sim N(\bm{\mu}_1, \bm{\Sigma}_{11})$。ブロック行列の対応する部分を取り出すだけ
- 条件付き分布: $\bm{x}_1 | \bm{x}_2 \sim N(\bm{\mu}_1 + \bm{\Sigma}_{12}\bm{\Sigma}_{22}^{-1}(\bm{x}_2-\bm{\mu}_2), \bm{\Sigma}_{11}-\bm{\Sigma}_{12}\bm{\Sigma}_{22}^{-1}\bm{\Sigma}_{21})$
次のステップとして、以下の記事も参考にしてください。
- ホテリングのT2検定 — 多変量正規分布に基づく平均の検定
- 判別分析 — 多変量正規分布を仮定したベイズ判別
- 主成分分析の理論 — 共分散行列の固有値分解