正規分布の特性と確認
- 正規分布を用いた操作を行うときに、直感と感覚が結びつかないことがあり、解析的に出すこともできるが、実際に値を観測してどの様になるかも含める
定義
\[f(x) = \frac{1}{\sqrt{2\pi}\sigma} exp\left( -\frac{(x-\mu)^2}{2 \sigma^2} \right)\]期待値と分散とモーメント母関数
期待値
\[E[X] = \mu\]分散
\[V[X] = \sigma^2\]モーメント母関数
\[\begin{eqnarray*}M_X(t)=e^{\mu t+\frac{1}{2}\sigma^2t^2}\tag{3}\end{eqnarray*}\]再生性
\[X_i \sim N(\mu_i, \sigma_i^2) \rightarrow X_0 + X_1 \sim N(\mu_0 + \mu_1, \sigma_0^2+\sigma_1^2)\]正規分布の線形変換
確率変数Xが正規分布に従う時
\[\begin{eqnarray*}Y=aX+b\end{eqnarray*}\]と変換できる。この時のモーメント母関数は
\[\begin{eqnarray*}M_Y(t)&=&E(e^{ty})\\&=&E(e^{t(ax+b)})\\&=&e^{bt}E(e^{atx})\\&=&e^{bt}M_X(at)\\&=&e^{\left[(a\mu+b)t+\frac{1}{2}(a^2\sigma^2)t^2\right]}\end{eqnarray*}\]標準化正規分布
\[\begin{eqnarray*}Z&=\frac{X-\mu}{\sigma}&\sim N(0,1)\end{eqnarray*}\]独立な正規分布が関わり合ったらどうなるか
N(0, 1)
の正規分布を前提とする
2つの独立な正規分布の足し算
μ
->0
,σ
->1.41
になるはずであるV[x+y] = V[x] + V[y] + 2Cov[x,y] = 1 + 1 + 0 = 2
import numpy as np
from scipy.stats import norm
SIZE = 10**5
def add_two_norm():
l = [0]*SIZE
for i in range(SIZE):
a = np.random.normal(0, 1)
b = np.random.normal(0, 1)
l[i] = a+b
mu, std = norm.fit(l)
print("add_two_norm", mu, std)
-> add_two_norm -0.0042628841482406 1.4169660567119584
2つの独立な正規分布の掛け算
E[xy]
->0
,V[xy]
->1
def times_two_norm():
l = [0]*SIZE
for i in range(SIZE):
a = np.random.normal(0, 1)
b = np.random.normal(0, 1)
l[i] = a*b
mu, std = norm.fit(l)
print("times_two_norm", mu, std)
-> times_two_norm -0.0024197422093484348 0.992487254322104
正規分布の結果を10倍して、5足しす
E[10x+5]
->E[10x] + 5
->10E[x] + 5
->10*0 + 5
->5
V[10x+5]
->V[10x]+V[5]+Cov[10x,5]
->100V[x]
,σ
->10
def k_times_norm():
l = [0]*SIZE
for i in range(SIZE):
a = np.random.normal(0, 1)
l[i] = 10*a + 5
mu, std = norm.fit(l)
print("k_times_norm", mu, std)
-> k_times_norm 4.9767770938339995 9.996086454695526
正規分布の比較
- 独立であるから、2つの正規分布があるとき、片方が大きいのは
0.5
になるはずである - 独立であるから、3つの正規分布があるとき、
A>B & A>C
になるのは、B>A & B>C
,C>A & C>B
のうちの一つの事象だから0.333
def comparence():
l0 = [0]*SIZE
l1 = [0]*SIZE
for i in range(SIZE):
a = np.random.normal(0, 1)
b = np.random.normal(0, 1)
c = np.random.normal(0, 1)
l0[i] = a > b
l1[i] = (a > b) & (a > c)
print("two element", np.mean(l0))
print("three element", np.mean(l1))
-> two element 0.49845
-> three element 0.33291