ヘロログ
統計学

多変量正規分布

多変量正規分布(multivariate normal distribution)は、1変量の正規分布を複数の確率変数に拡張したものである。身長と体重のように複数の変数が同時に観測される場面で、変数間の相関関係まで含めてモデル化できる。

この記事では、まず2変量(2次元)の場合を丁寧に解説し、その後で一般の多変量に拡張する。

2変量正規分布のイメージ

2変量正規分布を理解するために、まず具体例で考える。

ある集団の「身長 X_1」と「体重 X_2」を測定したとする。身長が高い人は体重も重い傾向があるので、この2つの変数には正の相関がある。このような状況をモデル化するのが2変量正規分布である。

2変量正規分布は以下の5つのパラメータで特徴づけられる。

  • \mu_1X_1 の平均(例:身長の平均 170cm)
  • \mu_2X_2 の平均(例:体重の平均 65kg)
  • \sigma_1X_1 の標準偏差(例:身長のばらつき 6cm)
  • \sigma_2X_2 の標準偏差(例:体重のばらつき 8kg)
  • \rhoX_1X_2 の相関係数(例:0.7)

これらをまとめて、平均ベクトル \boldsymbol{\mu}分散共分散行列 \Sigma で表す。

\boldsymbol{\mu} = \begin{pmatrix} \mu_1 \\ \mu_2 \end{pmatrix}, \quad \Sigma = \begin{pmatrix} \sigma_1^2 & \rho\sigma_1\sigma_2 \\ \rho\sigma_1\sigma_2 & \sigma_2^2 \end{pmatrix}

分散共分散行列の対角成分は各変数の分散、非対角成分は共分散(= 相関係数 × 標準偏差の積)である。

グラフで理解する

2変量正規分布の確率密度関数は3次元の「山」のような形をしている。これを上から見ると、等高線は楕円になる。

x₁ x₂ 0 2 -2 0 2 -2
━━ \rho = 0.7(1σ)
━━ \rho = 0.7(2σ)
- - - \rho = 0(1σ)
図1: 2変量正規分布の等高線(μ₁=μ₂=0, σ₁=σ₂=1)

グラフから読み取れる重要なポイント:

  • \rho = 0 のとき:等高線は「円」になる(破線)。2つの変数は独立。
  • \rho > 0 のとき:等高線は「右上がりの楕円」になる(実線)。正の相関。
  • \rho < 0 のとき:等高線は「右下がりの楕円」になる。負の相関。
  • |\rho| が大きいほど:楕円は細長くなる。

確率密度関数

2変量正規分布 N_2(\boldsymbol{\mu}, \Sigma) の確率密度関数は以下のようになる。一見複雑に見えるが、順を追って理解すれば難しくない。

2変量正規分布の確率密度関数
f(x_1, x_2) = \dfrac{1}{2\pi\sigma_1\sigma_2\sqrt{1-\rho^2}} \exp\left[-\dfrac{Q}{2(1-\rho^2)}\right]

ここで Q は以下の式で定義される。

Q = \left(\dfrac{x_1-\mu_1}{\sigma_1}\right)^2 - 2\rho\left(\dfrac{x_1-\mu_1}{\sigma_1}\right)\left(\dfrac{x_2-\mu_2}{\sigma_2}\right) + \left(\dfrac{x_2-\mu_2}{\sigma_2}\right)^2

この式の構造を順に見ていく。

【ステップ1】標準化
まず、各変数を標準化する。

z_1 = \dfrac{x_1 - \mu_1}{\sigma_1}, \quad z_2 = \dfrac{x_2 - \mu_2}{\sigma_2}

これは「平均からのずれを標準偏差で割る」という、1変量の標準化と同じ操作である。

【ステップ2】二次形式 Q の理解
標準化した変数を使うと、Q は次のように書ける。

Q = z_1^2 - 2\rho z_1 z_2 + z_2^2

この 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 は小さくなり、楕円が細長くなる。

具体例:確率密度関数の計算

具体的な数値で計算する。以下のパラメータを考える。

\mu_1 = 0, \quad \mu_2 = 0, \quad \sigma_1 = 1, \quad \sigma_2 = 1, \quad \rho = 0.7

この分布の f(0, 0)(中心での確率密度)を計算する。

【計算】

標準化すると z_1 = z_2 = 0 なので、Q = 0 である。

\begin{aligned} f(0, 0) &= \dfrac{1}{2\pi \cdot 1 \cdot 1 \cdot \sqrt{1 - 0.7^2}} \exp\left(-\dfrac{0}{2(1-0.7^2)}\right) \\[8pt] &= \dfrac{1}{2\pi \sqrt{1 - 0.49}} \cdot e^0 \\[8pt] &= \dfrac{1}{2\pi \sqrt{0.51}} \\[8pt] &= \dfrac{1}{2\pi \times 0.714} \\[8pt] &= \dfrac{1}{4.49} \\[8pt] &\approx 0.223 \end{aligned}

比較のため、\rho = 0(独立な場合)の f(0, 0) も計算すると

f(0, 0) = \dfrac{1}{2\pi \cdot 1 \cdot 1 \cdot 1} = \dfrac{1}{2\pi} \approx 0.159

相関がある方が中心付近の確率密度が高い。これは、相関があると分布がより集中するためである。

周辺分布

2変量正規分布から1つの変数だけを取り出すとどうなるか? これを周辺分布という。

周辺分布
X_1 \sim N(\mu_1, \sigma_1^2), \quad X_2 \sim N(\mu_2, \sigma_2^2)

つまり、各成分を個別に見ると普通の正規分布に従う

重要な注意点:周辺分布は相関係数 \rho に依存しない。つまり、X_1 だけ、または X_2 だけを見ても、それらの間に相関があるかどうかはわからない。

条件付き分布

「身長が 180cm の人の体重は平均的にどのくらいか?」のように、一方の変数の値がわかったとき、もう一方の分布はどうなるかを考える。これを条件付き分布という。

条件付き分布
X_2 \mid X_1 = x_1 \sim N\left(\mu_{2|1}, \, \sigma_{2|1}^2\right)

ここで、条件付き期待値と条件付き分散は以下のように計算できる。

\begin{aligned} \mu_{2|1} &= \mu_2 + \rho\dfrac{\sigma_2}{\sigma_1}(x_1 - \mu_1) \\[10pt] \sigma_{2|1}^2 &= \sigma_2^2(1 - \rho^2) \end{aligned}

これらの式の意味を以下で説明する。

条件付き期待値の意味

条件付き期待値 \mu_{2|1} は、x_1 の1次関数になっている。

\mu_{2|1} = \mu_2 + \underbrace{\rho\dfrac{\sigma_2}{\sigma_1}}_{\text{傾き}}(x_1 - \mu_1)
  • x_1 = \mu_1 のとき:\mu_{2|1} = \mu_2(平均的な X_1 なら、X_2 も平均的)
  • x_1 > \mu_1 かつ \rho > 0 のとき:\mu_{2|1} > \mu_2X_1 が平均より大きいと、X_2 も平均より大きいと予測)

この直線は統計学で回帰直線と呼ばれるものと一致する。

条件付き分散の意味

条件付き分散 \sigma_{2|1}^2 = \sigma_2^2(1 - \rho^2) について:

  • \rho = 0 のとき:\sigma_{2|1}^2 = \sigma_2^2X_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 の条件付き分布を求める。

【条件付き期待値の計算】

\begin{aligned} \mu_{2|1} &= \mu_2 + \rho\dfrac{\sigma_2}{\sigma_1}(x_1 - \mu_1) \\[8pt] &= 0 + 0.7 \times \dfrac{1}{1} \times (1 - 0) \\[8pt] &= 0.7 \end{aligned}

【条件付き分散の計算】

\begin{aligned} \sigma_{2|1}^2 &= \sigma_2^2(1 - \rho^2) \\[8pt] &= 1 \times (1 - 0.7^2) \\[8pt] &= 1 - 0.49 \\[8pt] &= 0.51 \end{aligned}

【結論】

X_2 \mid X_1 = 1 \sim N(0.7, 0.51)

つまり、X_1 = 1 と観測されると:

  • X_2 の期待値は 0 から 0.7 に更新される
  • X_2 の分散は 1 から 0.51 に減少する(予測精度が上がる)
  • X_2 の標準偏差は \sqrt{0.51} \approx 0.71

独立性と無相関

一般に、2つの確率変数が「無相関」であっても「独立」とは限らない。しかし、2変量正規分布では特別な性質が成り立つ。

ポイント
2変量正規分布において、X_1X_2無相関であることと独立であることは同値である。

【なぜそうなるか】
\rho = 0 のとき、確率密度関数は次のように因数分解できる。

\begin{aligned} f(x_1, x_2) &= \dfrac{1}{2\pi\sigma_1\sigma_2} \exp\left[-\dfrac{1}{2}\left(\dfrac{(x_1-\mu_1)^2}{\sigma_1^2} + \dfrac{(x_2-\mu_2)^2}{\sigma_2^2}\right)\right] \\[10pt] &= \underbrace{\dfrac{1}{\sqrt{2\pi}\sigma_1} \exp\left(-\dfrac{(x_1-\mu_1)^2}{2\sigma_1^2}\right)}_{f_1(x_1)} \times \underbrace{\dfrac{1}{\sqrt{2\pi}\sigma_2} \exp\left(-\dfrac{(x_2-\mu_2)^2}{2\sigma_2^2}\right)}_{f_2(x_2)} \end{aligned}

同時確率密度関数が周辺確率密度関数の積に分解できることが、独立の定義そのものである。

1次結合

2変量正規分布の成分を足したり引いたりすると、どのような分布になるか?

1次結合の分布
c_1 X_1 + c_2 X_2 \sim N\left(c_1 \mu_1 + c_2 \mu_2, \, c_1^2 \sigma_1^2 + 2c_1 c_2 \rho \sigma_1 \sigma_2 + c_2^2 \sigma_2^2\right)

【例】X_1 + X_2 の分布c_1 = c_2 = 1 の場合)

先ほどのパラメータ(\mu_1 = \mu_2 = 0\sigma_1 = \sigma_2 = 1\rho = 0.7)で計算する。

\begin{aligned} E[X_1 + X_2] &= 0 + 0 = 0 \\[8pt] V[X_1 + X_2] &= 1^2 \cdot 1 + 2 \cdot 1 \cdot 1 \cdot 0.7 \cdot 1 \cdot 1 + 1^2 \cdot 1 \\[5pt] &= 1 + 1.4 + 1 \\[5pt] &= 3.4 \end{aligned}

したがって 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) に従うとき、確率密度関数は次のようになる。

p変量正規分布の確率密度関数
f(\mathbf{x}) = \dfrac{1}{(2\pi)^{p/2} |\Sigma|^{1/2}} \exp\left(-\dfrac{1}{2}(\mathbf{x} - \boldsymbol{\mu})^\top \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})\right)

ここで:

  • \boldsymbol{\mu}p 次元の平均ベクトル
  • \Sigmap \times p の分散共分散行列(正定値対称行列)
  • |\Sigma|\Sigma の行列式
  • \Sigma^{-1}\Sigma の逆行列

指数部分の (\mathbf{x} - \boldsymbol{\mu})^\top \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})マハラノビス距離の2乗と呼ばれる。これは、分散共分散構造を考慮した「中心からの距離」である。

練習問題

問1. (X_1, X_2)^\top \sim N_2(\boldsymbol{\mu}, \Sigma)\mu_1 = 2\mu_2 = 3\sigma_1^2 = 4\sigma_2^2 = 9\rho = 0.5 のとき、X_1 + X_2 の分布を求めよ。

【期待値】

E[X_1 + X_2] = 2 + 3 = 5

【分散】

\sigma_1 = 2\sigma_2 = 3 であることに注意する。

\begin{aligned} V[X_1 + X_2] &= \sigma_1^2 + 2\rho\sigma_1\sigma_2 + \sigma_2^2 \\[5pt] &= 4 + 2 \times 0.5 \times 2 \times 3 + 9 \\[5pt] &= 4 + 6 + 9 \\[5pt] &= 19 \end{aligned}

【答え】 X_1 + X_2 \sim N(5, 19)

問2. (X_1, X_2)^\top \sim N_2(\mathbf{0}, \Sigma)\Sigma = \begin{pmatrix} 1 & -0.6 \\ -0.6 & 1 \end{pmatrix} のとき、X_1 = 2 が与えられたときの X_2 の条件付き分布を求めよ。

\mu_1 = \mu_2 = 0\sigma_1 = \sigma_2 = 1\rho = -0.6 である。

【条件付き期待値】

\begin{aligned} \mu_{2|1} &= 0 + (-0.6) \times \dfrac{1}{1} \times (2 - 0) \\[5pt] &= -1.2 \end{aligned}

【条件付き分散】

\begin{aligned} \sigma_{2|1}^2 &= 1 \times (1 - (-0.6)^2) \\[5pt] &= 1 - 0.36 = 0.64 \end{aligned}

【答え】 X_2 \mid X_1 = 2 \sim N(-1.2, 0.64)

負の相関があるため、X_1 が正の値をとると X_2 の期待値は負になる。

問3. \mathbf{X} \sim N_p(\boldsymbol{\mu}, \Sigma)\Sigma が対角行列のとき、X_1, \ldots, X_p の関係について述べよ。

\Sigma が対角行列であることは、すべての非対角成分(共分散)が 0 であることを意味する。

多変量正規分布では無相関と独立が同値なので、X_1, \ldots, X_p互いに独立である。

このとき確率密度関数は各成分の周辺分布の積に分解できる:

f(\mathbf{x}) = \prod_{i=1}^{p} \dfrac{1}{\sqrt{2\pi}\sigma_i} \exp\left(-\dfrac{(x_i - \mu_i)^2}{2\sigma_i^2}\right)

まとめ

項目 内容
分布名 多変量正規分布(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を使って多変量正規分布の計算を確認する。

multivariate_normal.py
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}")
=== 2変量正規分布 === 平均ベクトル: [0 0] 相関係数: ρ = 0.7 分散共分散行列: [[1. 0.7] [0.7 1. ]] --- 確率密度関数 --- f(0, 0) = 0.222861 f(1, 1) = 0.123756 --- 条件付き分布 (X1=1 が与えられたとき) --- 条件付き期待値 E[X2|X1=1] = 0.7000 条件付き分散 V[X2|X1=1] = 0.5100 条件付き標準偏差 = 0.7141 --- 1次結合 X1 + X2 の分布 --- E[X1 + X2] = 0.0000 V[X1 + X2] = 3.4000 --- シミュレーション (n=10000) --- 標本平均: [-0.00589 0.00199] 標本相関係数: 0.6976 X1+X2 の標本平均: -0.0039 X1+X2 の標本分散: 3.3963

シミュレーション結果が理論値とよく一致している。scipy.stats.multivariate_normal を使うと、多変量正規分布を簡単に扱える。