1
5

More than 3 years have passed since last update.

正規分布の再生性を実際に確かめてみた

Last updated at Posted at 2021-07-31

再生性とは

(1) 確率分布$F$について、2つの独立な確率分布$X,Y$が$F$に従えば、それらの和
$$Z=X+Y$$
も常に$F$に従うとき、確率分布$F$は再現性をもつという

(2) すなわち、確率分布$F$が再生性をもつとは、次が成立することである。
$$ X \sim F, Y \sim F, XとYは独立 \Rightarrow X+Y \sim F $$

このように再生性は定義されます。

正規分布の再生性

そもそも正規分布は再生性をもつのか(証明)

互いに独立な確率変数$X \sim N(μ_1,σ_1^2)$と$Y \sim N(μ_2,σ_2^2)$とおく。
$X$と$Y$の積率母関数は、それぞれ

$$\begin{array}{l}
m_{X}(t)=\mathrm{e}^{\mu_{1} t+\frac{\sigma_{1}^{2} t^{2}}{2}}
\end{array}$$

$$\begin{array}{l}
m_{Y}(t)=\mathrm{e}^{\mu_{2} t+\frac{\sigma_{2}^{2} t^{2}}{2}}
\end{array}$$

したがって、$X+Y$の積率母関数は、

$$\begin{aligned}
m_{X+Y}(t) &=m_{X}(t) m_{Y}(t)\\
&=\mathrm{e}^{\mu_{1}+\frac{\sigma_{1}^{2} t^{2}}{2}} \mathrm{e}^{\mu_{2} t+\frac{\sigma_{2}^{2} t^{2}}{2}}\\
&=\mathrm{e}^{\left(\mu_{1}+\mu_{2}\right) t+\frac{\left(\sigma_{1}{ }^{2}+\sigma_{2}^{2}\right) t^{2}}{2}}
\end{aligned}$$

これは、$N(μ_1+μ_2,σ_1^2+σ_2^2)$の積率母関数であり、積率母関数の一意性から、$X+Y$の確率分布は$N(μ_1+μ_2,σ_1^2+σ_2^2)$といえる。

よって、正規分布は再生性をもつと言える。

という感じで証明できます。

正規分布が再生性をもつということは

上記の$X, Y$に関して、$X+Y \sim N(μ_1+μ_2,σ_1^2+σ_2^2)$に従うということである。

検証

試しに、$X \sim N(50,100)$, $Y \sim N(70,25)$で実験してみます。
グラフには、$X, Y, F(足した分布),T(理論値)$をプロットしました。
np.random.normal()は、平均と標準偏差が引数になるので、分散の平方根を入力とします。

import numpy as np
import matplotlib.pyplot as plt

x_mu, x_sigma = 50, 10
y_mu, y_sigma = 70, 5

X = np.random.normal(x_mu, x_sigma, 50000)  # 平均50, 標準偏差10, 分散100
Y = np.random.normal(y_mu, y_sigma, 50000)  # 平均70, 標準偏差5, 分散25
F = X + Y
theoretical = np.random.normal(x_mu+y_mu, np.sqrt(x_sigma**2+y_sigma**2), 50000)

plt.figure(figsize=(15,7))
plt.hist(X, bins=1000, label='X', alpha=0.7)
plt.hist(Y, bins=1000, label='Y', alpha=0.7)
plt.hist(F, bins=1000, label='F', alpha=0.5)
plt.hist(theoretical, bins=1000, label='theretical', alpha=0.5)

plt.legend()
plt.savefig("dist.png")
plt.show()

dist (1).png

それっぽくなりました。

一応値を変えてみて、再度検証してみます

import numpy as np
import matplotlib.pyplot as plt

x_mu, x_sigma = 50, 10
y_mu, y_sigma = -100, 10

X = np.random.normal(x_mu, x_sigma, 50000)  # 平均50, 標準偏差10, 分散100
Y = np.random.normal(y_mu, y_sigma, 50000)  # 平均-100, 標準偏差10, 分散100
F = X + Y
T = np.random.normal(x_mu+y_mu, np.sqrt(x_sigma**2+y_sigma**2), 50000)

plt.figure(figsize=(15,7))
plt.hist(X, bins=1000, label='X', alpha=0.7)
plt.hist(Y, bins=1000, label='Y', alpha=0.7)
plt.hist(F, bins=1000, label='F', alpha=0.5)
plt.hist(T, bins=1000, label='T', alpha=0.5)

plt.legend()
plt.savefig("dist.png")
plt.show()

dist (2).png

裾の広がりも二つの分布に比べて広がってるのがわかります。

参考

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5