再生性とは
(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()
それっぽくなりました。
一応値を変えてみて、再度検証してみます
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()
裾の広がりも二つの分布に比べて広がってるのがわかります。