ヘロログ
統計学

確率変数の変数変換

確率変数 X の分布がわかっているとき、X を変換した新しい確率変数 Y = g(X) の分布はどうなるだろうか。

この問題は実世界で頻繁に登場する。金融工学では、株価が対数正規分布に従うとき、対数収益率は正規分布に従う。品質管理では、測定誤差 X が正規分布に従うとき、誤差の二乗 X^2カイ二乗分布に従う。信頼性工学では、部品の寿命 X_1, X_2指数分布に従うとき、合計寿命 X_1 + X_2ガンマ分布に従う。

変数変換の公式を使えば、元の分布から変換後の分布を数学的に導出できる。本記事では、1変数の変換と2変数の変換(ヤコビアン)を学ぶ。

1変数の変数変換

変換公式の導出

連続型確率変数 X の確率密度関数を f_X(x) とする。Y = g(X) という変換を考える(g は単調関数で逆関数 g^{-1} が存在するとする)。

累積分布関数から考えよう。g が単調増加のとき、

F_Y(y) = P(Y \leq y) = P(g(X) \leq y) = P(X \leq g^{-1}(y)) = F_X(g^{-1}(y))

両辺を y で微分すると、

f_Y(y) = f_X(g^{-1}(y)) \cdot \frac{d}{dy} g^{-1}(y)

g が単調減少の場合は符号が逆になるため、一般に絶対値をとって次の公式を得る。

1変数の変数変換公式

X の確率密度関数が f_X(x)Y = g(X) のとき、

f_Y(y) = f_X(g^{-1}(y)) \cdot \left| \frac{dx}{dy} \right|

ここで x = g^{-1}(y) である。

直感的には、\left| \frac{dx}{dy} \right| は「y の微小区間に対応する x の区間の長さの比」を表す。確率密度は「単位区間あたりの確率」なので、この補正が必要になる。

2変数の変数変換(ヤコビアン)

ヤコビアンの定義

2つの確率変数 (X, Y) の同時確率密度関数を f(x, y) とする。変数変換 (Z, W) = (u(X, Y), v(X, Y)) を考え、逆変換 (X, Y) = (s(Z, W), t(Z, W)) が存在するとする。

1変数の場合と同様に、逆変換のヤコビアン(Jacobian)を次の行列式で定義する。

J = \frac{\partial(x, y)}{\partial(z, w)} = \begin{vmatrix} \frac{\partial x}{\partial z} & \frac{\partial x}{\partial w} \\ \frac{\partial y}{\partial z} & \frac{\partial y}{\partial w} \end{vmatrix}

これは1変数における \left| \frac{dx}{dy} \right| の2変数版である。

2変数の変数変換公式
f_{Z,W}(z, w) = f_{X,Y}(s(z,w), t(z,w)) \cdot |J|
順変換のヤコビアンとの関係

順変換のヤコビアン J' = \frac{\partial(z, w)}{\partial(x, y)} を使う流儀もある。逆行列の行列式の性質から J = 1/J' が成り立つので、その場合の公式は f_{Z,W} = f_{X,Y} \cdot |1/J'| となる。

和の分布(畳み込み)

独立な2つの確率変数 X, Y の和 Z = X + Y の分布を求めたい。これは変数変換の重要な応用である。

変換を Z = X + YW = Y と設定する。逆変換は X = Z - WY = W となる。逆変換のヤコビアンを計算すると、

J = \begin{vmatrix} \frac{\partial X}{\partial Z} & \frac{\partial X}{\partial W} \\ \frac{\partial Y}{\partial Z} & \frac{\partial Y}{\partial W} \end{vmatrix} = \begin{vmatrix} 1 & -1 \\ 0 & 1 \end{vmatrix} = 1

XY が独立のとき、(Z, W) の同時密度関数は f_{Z,W}(z, w) = f_X(z - w) \cdot f_Y(w) となる。Z の周辺密度関数は W について積分して、

f_Z(z) = \int_{-\infty}^{\infty} f_X(z - w) \cdot f_Y(w) \, dw

この積分を畳み込み(convolution)と呼ぶ。

計算例

例1:一様分布から指数分布を導く

X \sim U(0, 1)(一様分布)のとき、Y = -\log(X) の分布を求める。

一様分布 U(0, 1) の確率密度関数は f_X(x) = 10 < x < 1)である。変換 y = -\log(x) より、逆変換は x = e^{-y} である。

\left| \frac{dx}{dy} \right| を計算すると、

\frac{dx}{dy} = \frac{d(e^{-y})}{dy} = -e^{-y}, \quad \left| \frac{dx}{dy} \right| = e^{-y}

変数変換公式より、

f_Y(y) = f_X(e^{-y}) \cdot e^{-y} = 1 \cdot e^{-y} = e^{-y} \quad (y > 0)

これはパラメータ \lambda = 1指数分布である。

逆関数法

この結果は「逆関数法」の基礎となる。一様乱数から任意の分布に従う乱数を生成できる。

例2:標準正規分布からカイ二乗分布を導く

X \sim N(0, 1)(標準正規分布)のとき、Y = X^2 の分布を求める。

標準正規分布の確率密度関数は f_X(x) = \frac{1}{\sqrt{2\pi}} \exp\left(-\frac{x^2}{2}\right) である。

変換 y = x^2 は1対1ではない(x = \sqrt{y}x = -\sqrt{y} の2通り)。そこで x > 0 の場合のみ考え、確率密度を2倍する。

x = \sqrt{y} より \left| \frac{dx}{dy} \right| = \frac{1}{2\sqrt{y}} である。

\begin{aligned} f_Y(y) &= 2 \cdot f_X(\sqrt{y}) \cdot \frac{1}{2\sqrt{y}} \\ &= \frac{1}{\sqrt{2\pi}} \cdot \exp\left(-\frac{y}{2}\right) \cdot \frac{1}{\sqrt{y}} \\ &= \frac{1}{\sqrt{2\pi y}} \exp\left(-\frac{y}{2}\right) \quad (y > 0) \end{aligned}

これは自由度1のカイ二乗分布 \chi^2(1) である。

例3:指数分布の和(畳み込みの応用)

X, Y が独立に指数分布 \text{Exp}(\lambda) に従うとき、Z = X + Y の分布を求める。

指数分布の確率密度関数は f(t) = \lambda e^{-\lambda t}t > 0)である。畳み込み公式を使う。X, Y \geq 0 より、z が与えられたとき w0 \leq w \leq z の範囲をとる。

\begin{aligned} f_Z(z) &= \int_0^z f_X(z - w) \cdot f_Y(w) \, dw \\ &= \int_0^z \lambda e^{-\lambda(z-w)} \cdot \lambda e^{-\lambda w} \, dw \\ &= \lambda^2 e^{-\lambda z} \int_0^z dw \\ &= \lambda^2 z e^{-\lambda z} \quad (z > 0) \end{aligned}

これは形状母数 \alpha = 2、尺度母数 \beta = 1/\lambdaガンマ分布 \text{Ga}(2, 1/\lambda) である。一般に、n 個の独立な \text{Exp}(\lambda) の和は \text{Ga}(n, 1/\lambda) に従う。

例4:対数正規分布

正規分布 N(\mu, \sigma^2) に従う X を指数変換した Y = e^X の分布を導出しよう。

正規分布の確率密度関数は f_X(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x - \mu)^2}{2\sigma^2}\right) である。

変換 y = e^x より、逆変換は x = \log(y) である。\left| \frac{dx}{dy} \right| = \frac{1}{y} である。変数変換公式より、

f_Y(y) = \frac{1}{\sigma y \sqrt{2\pi}} \exp\left(-\frac{(\log y - \mu)^2}{2\sigma^2}\right) \quad (y > 0)

これが対数正規分布の確率密度関数である。対数正規分布は右に裾が長い非対称な形状を持ち、株価や所得分布のモデルとしてよく使われる。

期待値と分散は次の通りである。

E[Y] = \exp\left(\mu + \frac{\sigma^2}{2}\right), \quad V[Y] = \exp(2\mu + \sigma^2)(\exp(\sigma^2) - 1)

練習問題

問1. X が一様分布 U(0, 1) に従うとき、Y = X^2 の確率密度関数を求めよ。

y = x^2 より x = \sqrt{y}0 < x < 1 なので正の根のみ)。\left| \frac{dx}{dy} \right| = \frac{1}{2\sqrt{y}} である。

f_Y(y) = f_X(\sqrt{y}) \cdot \frac{1}{2\sqrt{y}} = 1 \cdot \frac{1}{2\sqrt{y}} = \frac{1}{2\sqrt{y}}0 < y < 1

問2. X が指数分布 \text{Exp}(\lambda) に従うとき(f_X(x) = \lambda e^{-\lambda x}x > 0)、Y = \sqrt{X} の確率密度関数を求めよ。

y = \sqrt{x} より x = y^2\left| \frac{dx}{dy} \right| = 2y である。

f_Y(y) = f_X(y^2) \cdot 2y = \lambda e^{-\lambda y^2} \cdot 2y = 2\lambda y e^{-\lambda y^2}y > 0

これはレイリー分布の一種である。

問3. X, Y が独立に一様分布 U(0, 1) に従うとき、Z = X + Y の確率密度関数を畳み込みを用いて求めよ。

f_X(x) = f_Y(y) = 10 < x, y < 1)。畳み込み f_Z(z) = \int f_X(z - w) \cdot f_Y(w) \, dw を計算する。

被積分関数が1になるには、次の2つの条件を同時に満たす必要がある。

  • 0 < w < 1Y の定義域)
  • 0 < z - w < 1、つまり z - 1 < w < zX = z - w が定義域内)

この2条件の共通部分が積分範囲となる。

z = 0.6 のとき w 0 0.6 1 条件1: 0 < w < 1 条件2: -0.4 < w < 0.6 → 積分範囲: 0 〜 0.6 f(0.6) = 0.6 z = 1.4 のとき w 0 0.4 1 条件1: 0 < w < 1 条件2: 0.4 < w < 1.4 → 積分範囲: 0.4 〜 1 f(1.4) = 0.6 = 2 - 1.4

0 \leq z \leq 1 のとき:共通部分は 0 \leq w \leq z なので f_Z(z) = z

1 < z \leq 2 のとき:共通部分は z - 1 \leq w \leq 1 なので f_Z(z) = 1 - (z-1) = 2 - z

結果:三角分布 z f(z) 0 1 2 1 z 2-z

まとめ

変換の種類 公式 ポイント
1変数 Y = g(X) f_Y(y) = f_X(g^{-1}(y)) \cdot \left| \frac{dx}{dy} \right| 逆関数と微分の絶対値を計算
2変数(ヤコビアン) f_{Z,W} = f_{X,Y} \cdot |J| 逆変換のヤコビアンを掛ける
Z = X + Y f_Z(z) = \int f_X(z-w) f_Y(w) \, dw 畳み込み積分

重要な変換例

元の分布 変換 結果の分布
U(0, 1) Y = -\log(X) \text{Exp}(1)
N(0, 1) Y = X^2 \chi^2(1)
N(\mu, \sigma^2) Y = e^X 対数正規分布
\text{Exp}(\lambda) × 2個 Z = X + Y \text{Ga}(2, 1/\lambda)

Pythonで実装する

変数変換の結果をシミュレーションで確認してみよう。

variable_transformation.py
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
n = 100000

# 1. 一様分布 → 指数分布
X_uniform = np.random.uniform(0, 1, n)
Y_exp = -np.log(X_uniform)

# 2. 標準正規分布 → カイ二乗分布
X_normal = np.random.standard_normal(n)
Y_chi2 = X_normal ** 2

# 3. 指数分布の和 → ガンマ分布
X1 = np.random.exponential(1, n)
X2 = np.random.exponential(1, n)
Y_gamma = X1 + X2

# 4. 正規分布 → 対数正規分布
X_norm = np.random.normal(0, 1, n)
Y_lognorm = np.exp(X_norm)

# 結果の確認
print("=== 一様分布 → 指数分布 ===")
print(f"シミュレーション平均: {Y_exp.mean():.4f} (理論値: 1.0)")

print("\n=== 標準正規分布 → カイ二乗分布 ===")
print(f"シミュレーション平均: {Y_chi2.mean():.4f} (理論値: 1.0)")
print(f"シミュレーション分散: {Y_chi2.var():.4f} (理論値: 2.0)")

print("\n=== 指数分布の和 → ガンマ分布 ===")
print(f"シミュレーション平均: {Y_gamma.mean():.4f} (理論値: 2.0)")

print("\n=== 正規分布 → 対数正規分布 ===")
print(f"シミュレーション平均: {Y_lognorm.mean():.4f} (理論値: 1.6487)")
=== 一様分布 → 指数分布 === シミュレーション平均: 1.0008 (理論値: 1.0) === 標準正規分布 → カイ二乗分布 === シミュレーション平均: 0.9965 (理論値: 1.0) シミュレーション分散: 1.9732 (理論値: 2.0) === 指数分布の和 → ガンマ分布 === シミュレーション平均: 1.9989 (理論値: 2.0) === 正規分布 → 対数正規分布 === シミュレーション平均: 1.6507 (理論値: 1.6487)

シミュレーション結果と理論値がよく一致しており、変数変換の公式が正しいことが確認できる。