🤖

確率密度関数の畳み込みについて

2024/11/21に公開

定理

X, Y が独立で、それぞれ密度関数 f_X(x), f_Y(y) をもつとき、 U=X+Y の密度関数は、次式で与えられる。

g(u) = \int_{-\infty}^{+\infty}f_X(x)f_Y(u-x)dx

この式は畳み込みと呼ばれる。

Pythonによる視覚的説明。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.integrate import quad

def f_X(x, mu1=0, sigma1=1):
    """X の確率密度関数 (正規分布)"""
    return norm.pdf(x, mu1, sigma1)

def f_Y(y, mu2=0, sigma2=1):
    """Y の確率密度関数 (正規分布)"""
    return norm.pdf(y, mu2, sigma2)

def convolution_integral(u, mu1=0, sigma1=1, mu2=0, sigma2=1):
    """畳み込み積分を計算"""
    integrand = lambda x: f_X(x, mu1, sigma1) * f_Y(u-x, mu2, sigma2)
    result, _ = quad(integrand, -np.inf, np.inf)
    return result

def theoretical_sum_normal(x, mu1=0, sigma1=1, mu2=0, sigma2=1):
    """2つの正規分布の和の理論的な確率密度関数"""
    mu = mu1 + mu2
    sigma = np.sqrt(sigma1**2 + sigma2**2)
    return norm.pdf(x, mu, sigma)

# パラメータ設定
mu1, sigma1 = 1, 1  # X の平均と標準偏差
mu2, sigma2 = 2, 1.5  # Y の平均と標準偏差

# 計算範囲の設定
u = np.linspace(-2, 8, 100)

# 畳み込みによる確率密度関数の計算
g_numerical = [convolution_integral(ui, mu1, sigma1, mu2, sigma2) for ui in u]

# 理論値の計算
g_theoretical = theoretical_sum_normal(u, mu1, sigma1, mu2, sigma2)

# プロット
plt.figure(figsize=(10, 6))
plt.plot(u, g_numerical, 'b-', label='Numerical Convolution')
plt.plot(u, g_theoretical, 'r--', label='Theoretical')
plt.plot(u, [f_X(x, mu1, sigma1) for x in u], 'g:', label='X density')
plt.plot(u, [f_Y(y, mu2, sigma2) for y in u], 'm:', label='Y density')
plt.xlabel('u')
plt.ylabel('Probability Density')
plt.title('Density Function of Sum of Independent Normal Distributions')
plt.legend()
plt.grid(True)
plt.show()

# 数値計算と理論値の差の最大値を確認
max_diff = np.max(np.abs(np.array(g_numerical) - g_theoretical))
print(f"Maximum difference between numerical and theoretical: {max_diff:.6f}")

証明1

変数変換を用いた証明。

u = x + y, v=x という変数変換を考える。
このとき x=v, y = u - v となる。

ヤコビアンを求めると

J = \begin{vmatrix} \frac{\partial x}{\partial w} & \frac{\partial x}{\partial z} \\ \frac{\partial y}{\partial w} & \frac{\partial y}{\partial z} \end{vmatrix} = \begin{vmatrix} 1 & 0 \\ -1 & 1 \end{vmatrix} = 1

よって |J| = 1

(X, Y) の同時確率密度関数は f(x, y) で、 X,Y は独立なので f(x, y) = f_{X}(x)f_{Y}(y) と表せる。
ゆえに (U, V) の同時確率密度関数はg(u, v) = f(v, u - v)|J| = f_{X}(v)f_{Y}(u - v)
このとき U の確率密度関数 g(u)

g(u) = \int_{-\infty}^{+\infty}g(u, v)dv = \int_{-\infty}^{+\infty}f_{X}(v)f_{Y}(u - v)dv

証明2

確率密度関数から導出する方法。

U の確率分布関数 G(u)

G(u) = P(U \le u) = P(X + Y \le u) = \iint_{x + y \le u} f(x, y)dxdy = \int_{-\infty}^{+\infty}\!\!\!\biggl\{\int_{-\infty}^{u-x}f(x, y)dy\biggr\}dx

両辺を u で微分すると

(左辺) = \frac{d}{du}G(u) = g(u)

(右辺) = \int_{-\infty}^{+\infty}f(x, u-x)dx

となる。 X, Y は独立なので f(x, y) = f_{X}(x)f_{Y}(y)、よって与えられた式が成り立つ。

Discussion