• 目次
  • 理解
  • ICT
  • 事例
  • まとめ

【理解】正規分布の数学的解説

正規分布の定義について

「正規分布」とは

実験や製造などの誤差がつくる自然な確率分布のこと。

<記号>正規分布

$N(\mu, \sigma^2)$

解説はこちら
定義(正規分布)

実数 $\mu$ と $\sigma > 0$ について, 次の $f(x)$ を確率密度関数としてもつ確率分布を正規分布 $N(\mu, \sigma^2)$ という。 $$\displaystyle f(x) = \frac{1}{\sqrt{2 \pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$

<正規分布>確率密度関数

$\displaystyle f(x)=\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} dx$

解説はこちら
正規分布の確率密度関数 $f$ について, $\displaystyle \int_{-\infty}^{\infty} f(x) dx = 1$ であることを確かめてみよう。
命題(正規分布の全確率)

$\mu \in \mathbb{R}$, $\sigma > 0$ であるとき, $$\displaystyle f(x) = \frac{1}{\sqrt{2 \pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$ は正規分布の確率密度関数である。 このとき, $$\displaystyle \int_{-\infty}^{\infty} f(x) dx = 1$$ が成り立つ。

ガウス積分 $\displaystyle \int_{-\infty}^{\infty} e^{-t^2} dt = \sqrt{\pi}$ を既知として命題を示す。

Step 1変数変換

与えられた関数 $f(x)$ の積分において, 次のように変数変換を行う。 $$ t = \frac{x - \mu}{\sqrt{2}\sigma} $$ このとき, $x$ が $-\infty$ から $\infty$ まで変化するとき, $t$ も $-\infty$ から $\infty$ まで変化する。また, 微分要素の関係は次の通りである。 $$ dt = \frac{1}{\sqrt{2}\sigma} dx$$ すなわち, $dx = \sqrt{2}\sigma \, dt$ である。

Step 2積分の計算

これらを積分の計算式に代入すると, 次のようになる。 $$ \begin{aligned} &\int_{-\infty}^{\infty} f(x) dx \\ &\quad = \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} dx \\ &\quad = \int_{-\infty}^{\infty} \frac{1}{\sqrt{\pi} \cdot \sqrt{2}\sigma} e^{-t^2} (\sqrt{2}\sigma \, dt) \\ &\quad = \int_{-\infty}^{\infty} \frac{1}{\sqrt{\pi}} e^{-t^2} dt \end{aligned} $$

§結論

ガウス積分の値を適用すると, $$ \begin{aligned} &\int_{-\infty}^{\infty} \frac{1}{\sqrt{\pi}} e^{-t^2} dt \\ &\quad = \frac{1}{\sqrt{\pi}} \int_{-\infty}^{\infty} e^{-t^2} dt \\ &\quad = \frac{1}{\sqrt{\pi}} \cdot \sqrt{\pi} \\ &\quad = 1 \end{aligned} $$ となり, $\displaystyle \int_{-\infty}^{\infty} f(x) dx = 1$ が成り立つ。

次のグラフのいずれも面積が $1$ である.

ベルカーブ(正規分布のグラフ)

正規分布はガウス分布とも呼ばれ、グラフはベルカーブ釣鐘型と呼ばれる。

<正規分布>累積分布関数

$\displaystyle F(x)= \frac{1}{\sqrt{2\pi}\sigma} \int_{-\infty}^{x} e^{-\frac{(t-\mu)^2}{2\sigma^2}} dt$

<正規分布>積率母関数

$\displaystyle E \! \left[e^{tX}\right]
= \exp \! \left(\mu t + \tfrac{1}{2}\sigma^2 t^2\right)$

<定義>標準正規分布

$\displaystyle f(x)=\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} dx$

解説はこちら
定義(標準正規分布)

平均が $0$, 分散が $1$ である正規分布 $N(0, 1^2)$ を標準正規分布という。

この確率分布の確率密度関数 $f_0(x)$ は, 次の通りである。 $$\displaystyle f_0(x) = \frac{1}{\sqrt{2 \pi}} e^{-\frac{x^2}{2}}$$

<標準正規分布>確率密度関数

$\displaystyle f_0(x)=\frac{1}{\sqrt{2\pi}} e^{-\frac{x^2}{2}} dx$

正規分布の性質について

$X \sim N(\mu, \sigma^2)$ とする。また, $X_1 \sim N(\mu_1, \sigma_1^2)$, $X_2 \sim N(\mu_2, \sigma_2^2)$ とする。

<正規分布>期待値

$E[X] =\mu$

証明はこちら
正規分布 $N(\mu, \sigma^2)$ の期待値が $\mu$ であることを確かめてみよう。
命題(正規分布の期待値)

正規分布 $N(\mu, \sigma^2)$ に従う確率変数 $X$ の期待値について, $$E[X] = \mu$$ が成り立つ。

正規分布 $N(\mu, \sigma^2)$ の確率密度関数 $f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$ に対し, 期待値の定義に従って計算を行う。

Step 1変数変換

期待値 $E[X] = \int_{-\infty}^{\infty} x f(x) dx$ において, $y = x - \mu$ と変数変換を行う。このとき $x = y + \mu, \, dx = dy$ であり, 積分範囲は $-\infty < y < \infty$ となる。 $$ \begin{aligned} E[X] &= \int_{-\infty}^{\infty} (y + \mu) \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{y^2}{2\sigma^2}} dy \\ &= \int_{-\infty}^{\infty} y \cdot \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{y^2}{2\sigma^2}} dy + \mu \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{y^2}{2\sigma^2}} dy \end{aligned} $$

Step 2奇関数の性質と全確率の利用

第1項の被積分関数 $g(y) = y \cdot \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{y^2}{2\sigma^2}}$ は $g(-y) = -g(y)$ を満たす奇関数である。したがって, 対称な区間での積分値は $0$ となる。 $$ \int_{-\infty}^{\infty} \frac{y}{\sqrt{2\pi}\sigma} e^{-\frac{y^2}{2\sigma^2}} dy = 0 $$

第2項の積分部分は, 平均 $0$, 分散 $\sigma^2$ の正規分布 $N(0, \sigma^2)$ の全確率を表しているため, その値は $1$ である。 $$ \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{y^2}{2\sigma^2}} dy = 1 $$

§結論

以上の結果をまとめると, $$ E[X] = 0 + \mu \cdot 1 = \mu $$ となり, $E[X] = \mu$ が成り立つ。

$N(50, 10^2)$ では, 期待値は $50$ です。

標準正規分布 $N(0,1^2)$ では, 期待値は $0$ です。

<正規分布>分散

$V[X] = \sigma^2$

<正規分布>標準偏差

$\sigma[X] = \sigma$

証明はこちら
正規分布 $N(\mu, \sigma^2)$ の分散が $\sigma^2$ であることを確かめてみよう。
命題(正規分布の分散)

正規分布 $N(\mu, \sigma^2)$ に従う確率変数 $X$ の分散 $V[X]$ について, $$V[X] = \sigma^2$$ が成り立つ。

正規分布 $N(\mu, \sigma^2)$ の確率密度関数 $f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$ と期待値 $E[X] = \mu$ を用いて, 分散の定義に従い計算を行う。

Step 1変数変換(標準化)

分散 $V[X] = \int_{-\infty}^{\infty} (x-\mu)^2 f(x) dx$ において, $z = \frac{x-\mu}{\sigma}$ と変数変換を行う。 このとき $x-\mu = \sigma z, \, dx = \sigma dz$ であり, 積分範囲は $-\infty < z < \infty$ となる。 $$ \begin{aligned} V[X] &= \int_{-\infty}^{\infty} (\sigma z)^2 \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{z^2}{2}} (\sigma dz) \\ &= \sigma^2 \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}} z^2 e^{-\frac{z^2}{2}} dz \end{aligned} $$

Step 2部分積分による計算

$\left( e^{-\frac{z^2}{2}} \right)' = -z e^{-\frac{z^2}{2}}$ であることに着目し, $z^2 e^{-\frac{z^2}{2}} = z \cdot (z e^{-\frac{z^2}{2}})$ として部分積分を行う。 $$ \begin{aligned} &\int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}} z \left( z e^{-\frac{z^2}{2}} \right) dz \\ &\quad = \left[ \frac{1}{\sqrt{2\pi}} z \left( -e^{-\frac{z^2}{2}} \right) \right]_{-\infty}^{\infty} \\ &\phantom{aaaaaaaa}- \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}} (z)' \left( -e^{-\frac{z^2}{2}} \right) dz \\ &\quad = 0 + \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi}} e^{-\frac{z^2}{2}} dz \end{aligned} $$ ここで, 第一項は $z \to \pm\infty$ のとき $e^{-\frac{z^2}{2}}$ の減衰が勝るため $0$ となる。

§結論

残った積分項は標準正規分布 $N(0, 1)$ の全確率を表すため, その値は $1$ である。 $$ V[X] = \sigma^2 \cdot 1 = \sigma^2 $$ となり, $V[X] = \sigma^2$ が成り立つ。

$N(50, 10^2)$ では, 分散は $100$ です。

標準正規分布 $N(0,1^2)$ では, 分散は $1$ です。

<性質>正規分布の再生性①

$aX+b \sim N(a\mu+b, a^2\sigma^2)$

証明はこちら
確率変数 $X \sim N(\mu, \sigma^2)$ を $Y=aX+b$ と変形すると, $Y \sim N(a \mu + b, (a\sigma)^2)$ であることを確かめてみよう。
命題(正規分布の線形変換)

$a, b \in \mathbb{R}$ $(a \neq 0)$ とする。正規分布 $N(\mu, \sigma^2)$ に従う確率変数 $X$ について, 確率変数 $Y = aX + b$ は正規分布 $N(a\mu + b, (a\sigma)^2)$ に従う。

$X$ の確率密度関数 $f_X(x)$ は次の通りである。 $$ f_X(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$ 変数変換 $Y = aX + b$ による $Y$ の確率密度関数 $f_Y(y)$ を導出する。

Step 1確率密度関数の変換式

確率保存則より, $f_Y(y)|dy| = f_X(x)|dx|$ が成り立つ必要がある。 $y = ax + b$ より $x = \frac{y-b}{a}$ であり, 微分をとると $dx = \frac{1}{a} dy$ となる。 したがって, 次の関係式を得る。 $$\begin{aligned} f_Y(y) &= f_X(x) \left| \frac{dx}{dy} \right| \\[5pt] &= f_X\left( \frac{y-b}{a} \right) \frac{1}{|a|} \end{aligned}$$

Step 2指数の計算

$f_X$ の指数部分に $x = \frac{y-b}{a}$ を代入して整理する。 $$ -\frac{(\frac{y-b}{a} - \mu)^2}{2\sigma^2} = -\frac{(y - (a\mu + b))^2}{2(a\sigma)^2} $$

Step 3$f_Y(y)$ の導出

これらをまとめると, $Y$ の確率密度関数は次のようになる。 $$ \begin{aligned} f_Y(y) &= \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(y-(a\mu+b))^2}{2(a\sigma)^2}} \cdot \frac{1}{|a|} \\ &= \frac{1}{\sqrt{2\pi}(|a|\sigma)} e^{-\frac{(y-(a\mu+b))^2}{2(a\sigma)^2}} \end{aligned} $$

§結論

得られた $f_Y(y)$ は, 平均 $a\mu + b$, 分散 $(a\sigma)^2$ の正規分布の確率密度関数の形をしている。 ゆえに, $Y \sim N(a\mu + b, (a\sigma)^2)$ が成り立つ。

$N(50, 10^2)$ に従う確率変数を $X$ とすると, $Y=2X -10$ という変換をした確率変数 $Y$ は, 正規分布 $N(90, 20^2)$ に従います。

<性質>正規分布の再生性②

$X_1+X_2 \sim N(\mu_1+\mu_2, \sigma_1^2 + \sigma_2^2)$

<性質>正規分布の標準化

$\displaystyle Z=\frac{X-\mu}{\sigma} \sim N(0,1^2)$

証明はこちら

$X \sim N(\mu, \sigma^2)$ ならば, $Z \sim N(0,1^2)$ となる.

証明は, $\displaystyle a=\frac{1}{\sigma}$ と $\displaystyle b=-\frac{\mu}{\sigma}$ とすると, $Z=aX+b$ と表せることで上の再生性の証明①に帰着することができる.

<性質>正規分布の標準化

$$
\begin{aligned}
&P(\mu -\sigma \leq X \leq \mu + \sigma) \fallingdotseq 0.68 \\
&P(\mu -2\sigma \leq X \leq \mu + 2\sigma) \fallingdotseq 0.95 \\
&P(\mu -3\sigma \leq X \leq \mu + 3\sigma) \fallingdotseq 0.99
\end{aligned}
$$

解説はこちら
正規分布 $N(\mu, \sigma^2)$ において, $\mu \pm \sigma$ での確率が約 $68\%$, $\mu \pm 2\sigma$ での確率が約 $95\%$, $\mu \pm 3\sigma$ での確率が約 $99\%$ であることを確かめてみよう。
性質:正規分布の $n\sigma$ 区間の確率

正規分布 $N(\mu, \sigma^2)$ に従う確率変数 $X$ について, 平均 $\mu$ からの広がりに対する確率は次の通りである。

  • $P(\mu-\sigma \leq X \leq \mu + \sigma)$ $\fallingdotseq 0.68$,
  • $P(\mu-2\sigma \leq X \leq \mu + 2\sigma)$ $\fallingdotseq 0.95$,
  • $P(\mu-3\sigma \leq X \leq \mu + 3\sigma)$ $\fallingdotseq 0.99$

標準正規分布 $N(0, 1^2)$ に従う確率変数を $Z$ とし, その確率密度関数を $f(z) = \frac{1}{\sqrt{2\pi}} e^{-\frac{z^2}{2}}$ とする。

Step 1標準正規分布における確率

数値積分等により, $Z$ が各区間に含まれる確率は次の通り計算される。 $$P(-1 \leq Z \leq 1) = \int_{-1}^{1} f(z) dz \fallingdotseq 0.6827$$

>

$$P(-2 \leq Z \leq 2) = \int_{-2}^{2} f(z) dz \fallingdotseq 0.9545$$

$$ P(-3 \leq Z \leq 3) = \int_{-3}^{3} f(z) dz \fallingdotseq 0.9973 $$

Step 2一般の正規分布の標準化

正規分布 $N(\mu, \sigma^2)$ に従う確率変数 $X$ について, $Z = \frac{X-\mu}{\sigma}$ とおくと, $Z$ は標準正規分布 $N(0, 1^2)$ に従う。 このとき, $X = \sigma Z + \mu$ であり, 任意の自然数 $n$ に対して次の等式が成り立つ。 $$ \begin{aligned} & P(\mu - n\sigma \leq X \leq \mu + n\sigma) \\ &\quad = P(\mu - n\sigma \leq \sigma Z + \mu \leq \mu + n\sigma) \\ &\quad = P(-n\sigma \leq \sigma Z \leq n\sigma) \\ &\quad = P(-n \leq Z \leq n) \end{aligned} $$

§結論

$n = 1, 2, 3$ を代入すると, Step 1 の結果より $$ \begin{aligned} P(\mu - \sigma \leq X \leq \mu + \sigma) &\fallingdotseq 0.68 \\ P(\mu - 2\sigma \leq X \leq \mu + 2\sigma) &\fallingdotseq 0.95 \\ P(\mu - 3\sigma \leq X \leq \mu + 3\sigma) &\fallingdotseq 0.99 \end{aligned} $$ が成り立つ。

$N(50, 10^2)$ では,

$P(40 \leq X \leq 60)$ $\fallingdotseq 0.68$,

$P(30 \leq X \leq 70)$ $\fallingdotseq 0.95$,

$P(20 \leq X \leq 80)$ $\fallingdotseq 0.99$

です。

【ICT】正規分布の値を計算

【表計算】Excel・スプレッドシートで正規分布の計算

正規分布の累積積分関数NORM.DIST(x,mu,sigma,TRUE)
正規分布の確率密度関数NORM.DIST(x,mu,sigma,FALSE)

表計算ソフト(Excelなど)で正規分布のCDFとPDFの値を取得してみよう。
※作業環境はGoogleスプレッドシートです。

NORM.DIST関数

正規分布 $N(\mu, \sigma^2)$ の確率密度関数 $f(x)$ と累積分布関数 $F(x)=\int_{-\infty}^x f(t)dt$ の値を取得するためにNORM.DIST()関数を利用する。

NORM.DIST(x, mu, sigma, 関数形式)として入力する。関数形式には累積分布関数の場合はTRUE, 確率密度関数の場合はFALSEを指定する。

★完成イメージ

入力例. 正規分布 $N(50,10^2)$ について, $x=0$, $10$, $\cdots$, $90$, $100$ のときの累積分布関数の値 $F(x)$ と確率密度関数の値 $f(x)$ を取得する。

・A列には $x$ の値を入力した。
B2には, =NORM.DIST(A2, 50, 10, TRUE)と入力した。B列方向に参照して自動入力した。
C2には, =NORM.DIST(A2, 50, 10, FALSE)と入力した。C列方向に参照して自動入力した。

なお, それぞれのグラフを表示すると次のようになった。

【コード】Pythonで正規分布の計算

正規分布の確率密度関数のグラフ scipy.stats.norm.pdf()

平均値と標準偏差から正規分布の確率密度関数のグラフをPythonで出力してみよう。

Pythonコード

scipy.stats.normpdf()関数を使い正規分布の確率密度関数を扱う。

正規分布 $N(\mu, \sigma^2)$ の確率密度関数の $f(x)$ の値は, pdf(x, mu, sigma)によって取得できる。

入力例. 正規分布 $N(50, 10^2)$ の確率密度関数のグラフを描く。

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

#平均値と標準偏差
mu = 50
sigma = 10

#正規分布を表示
X = np.arange(mu-5*sigma, mu+5*sigma, 0.1)
Y = norm.pdf(X, mu, sigma)
plt.plot(X, Y, color="orange", label = "Normal-distribution")

#グラフの表示
plt.legend()
plt.show()

複数の正規分布の確率密度関数のグラフ scipy.stats.norm.pdf()

同じ座標系に複数の正規分布の確率密度関数のグラフをPythonで出力してみよう。

Pythonコード

scipy.stats.normpdf()関数を使い正規分布の確率密度関数を扱う。

$x$ 軸の定義として, (平均値)-5×(標準偏差)が最も小さい値から(平均値)+5×(標準偏差)の値が最も大きい範囲とした。

入力例. 正規分布 $N(50, 10^2)$, $N(60, 10^2)$, $N(50, 15^2)$, $N(70, 20^2)$ の確率密度関数のグラフを同時に描く。

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

# 平均値と標準偏差
params = [
    (50, 10),
    (60, 10),
    (50, 15),
    (70, 20)
]

# 描画範囲(平均±5σの最小から最大の範囲)
mu_values = [p[0] for p in params]
sigma_values = [p[1] for p in params]
x_min = min(mu_values) - 5*max(sigma_values)
x_max = max(mu_values) + 5*max(sigma_values)

X = np.arange(x_min, x_max, 0.1)

# 各パラメータごとにプロット
for mu, sigma in params:
    Y = norm.pdf(X, mu, sigma)
    plt.plot(X, Y, label=f"μ={mu}, σ={sigma}")

# グラフの装飾
plt.title("Normal Distributions (PDF)")
plt.xlabel("x")
plt.ylabel("Probability Density")
plt.legend()
plt.grid(True)
plt.show()

正規分布の累積分布関数のグラフ scipy.stats.norm.cdf()

平均値と標準偏差から正規分布の累積分布関数のグラフをPythonで出力してみよう。

Pythonコード

scipy.stats.normcdf()関数を使い正規分布の累積分布関数を扱う。

正規分布 $N(\mu, \sigma^2)$ の累積分布関数の $F(x)$ の値は, cdf(x, mu, sigma)によって取得できる。

入力例. 正規分布 $N(50, 10^2)$ の累積分布関数のグラフを描く。

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

# 平均と標準偏差
mu = 50
sigma = 10

# x の範囲
X = np.linspace(mu - 5*sigma, mu + 5*sigma, 500)
Y = norm.cdf(X, mu, sigma)

# グラフ描画
plt.plot(X, Y, color="blue", label=f"μ={mu}, σ={sigma}")
plt.xlabel("x")
plt.ylabel("CDF")
plt.title("Normal Distribution CDF")
plt.legend()
plt.grid(True, linestyle="--", alpha=0.6)
plt.show()

正規分布の面積 $P(X \leq c)$ の図示 cdf(c, mu, sigma)

正規分布から確率を計算し、グラフで図示することをPythonでやってみよう。

Pythonコード

scipy.stats.normpdf()関数で正規分布の確率密度関数, cdf()関数で累積分布関数を扱う。

入力例. 正規分布 $N(50, 10^2)$ の累積分布関数の値 $F(60) = \int_{-\infty}^{60}f(x)dx$ を出力しグラフで図示する。

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

# 平均と標準偏差
mu = 50
sigma = 10

# 塗りつぶすxの値
c = 60

# xの範囲
X = np.linspace(mu - 5*sigma, mu + 5*sigma, 500)
pdf = norm.pdf(X, mu, sigma)
cdf_value = norm.cdf(c, mu, sigma)

# グラフ作成
fig, ax1 = plt.subplots(figsize=(8,5))

# PDF描画
ax1.plot(X, pdf, color='orange', label='PDF')
ax1.set_xlabel('x')
ax1.set_ylabel('PDF', color='orange')
ax1.tick_params(axis='y', labelcolor='orange')

# PDF下側の塗りつぶし
X_fill = X[X <= c]
pdf_fill = pdf[X <= c]
ax1.fill_between(X_fill, pdf_fill, color='orange', alpha=0.3)

# CDFを右軸に表示
ax2 = ax1.twinx()
ax2.plot(X, norm.cdf(X, mu, sigma), color='blue', label='CDF')
ax2.set_ylabel('CDF', color='blue')
ax2.tick_params(axis='y', labelcolor='blue')

# x=c の位置にCDF値まで垂直線
ax2.vlines(c, 0, cdf_value, color='blue', linestyle='--', alpha=0.6)

# 水平方向の線:CDF値の高さで右端まで
x_right = ax1.get_xlim()[1]  # x軸の右端
ax2.hlines(cdf_value, c, x_right, color='blue', linestyle='--', alpha=0.6)

# CDFのドット
ax2.plot(c, cdf_value, 'bo', markersize=6)

# CDF値を右上に表示(キャプション)
ax2.text(0.95, 0.90, f"CDF(x={c}) = {cdf_value:.3f}", color='blue',
         fontsize=12, verticalalignment='top', horizontalalignment='right',
         transform=ax2.transAxes, bbox=dict(facecolor='white', alpha=0.5, edgecolor='blue'))

# グリッド・タイトル・凡例
ax1.grid(True, linestyle='--', alpha=0.5)
lines, labels = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines + lines2, labels + labels2, loc='upper left')

plt.title(f'Normal Distribution PDF & CDF (shaded to x={c})')
plt.show()

ちなみに、PDFとCDFの $y$ 軸を同じスケールにすると、次のグラフになります。

正規分布の面積 $P(c_1 \leq X \leq c_2)$ の図示 cdf(c2, mu, sigma)-cdf(c1, mu, sigma)

正規分布から確率を計算し、グラフで図示することをPythonでやってみよう。

Pythonコード

scipy.stats.normcdf()関数で累積分布関数を扱うことができる。

正規分布 $N(\mu, \sigma)$ の累積分布関数を $F_X(x)$ とすると, $P(c_1 \leq X \leq c_2) = F(c_2)-F(c_1)$ であるので, 確率はcdf(c2, mu, sigma)-cdf(c1, mu, sigma)で求めることができる。

入力例. 正規分布 $N(50, 10^2)$ の確率 $P(45 \leq X \leq 65)$ を出力しグラフで図示する。

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

# 平均と標準偏差
mu = 50
sigma = 10

# 塗りつぶす範囲
c1 = 45 #小
c2 = 65 #大

# xの範囲
X = np.linspace(mu - 5*sigma, mu + 5*sigma, 500)
pdf = norm.pdf(X, mu, sigma)

# グラフ作成
fig, ax = plt.subplots(figsize=(8,5))

# PDF描画
ax.plot(X, pdf, color='orange', label='PDF')
ax.set_xlabel('x')
ax.set_ylabel('PDF', color='orange')
ax.tick_params(axis='y', labelcolor='orange')

# 指定範囲を塗りつぶし
mask = (X >= c1) & (X <= c2)
ax.fill_between(X[mask], pdf[mask], color='orange', alpha=0.3)

# 面積を計算
area = norm.cdf(c2, mu, sigma) - norm.cdf(c1, mu, sigma)

# 枠内 左上に表示
ax.text(
    0.05, 0.95,
    f"P({c1} <= X <= {c2}) = {area:.4f}",
    transform=ax.transAxes,   # 枠内の相対座標
    fontsize=12,
    va='top', ha='left',
    bbox=dict(facecolor="white", alpha=0.7, edgecolor="gray")
)

# グリッド・タイトル・凡例
ax.grid(True, linestyle='--', alpha=0.5)
ax.legend(loc='upper right')

plt.title(f'Normal Distribution PDF (shaded between {c1} and {c2})')
plt.tight_layout()
plt.show()

二項分布 $B(n,p)$ と正規分布 $N(np, np(1-p))$ の比較

試行回数を大きくしたとき二項分布は正規分布に近づいていくのか、Pythonでグラフを作成することで検証してみました。

二項分布のヒストグラムと正規分布のグラフを重ねて観察する実験①と、実際にどちらも確率を算出して確率が近似できているのかの実験②の2つを行っています。

正規分布のコード【Python】

正規分布のPythonコード

次のコードをコピペすれば正規分布をPythonで描写できます。母平均と母標準偏差のところの数字を変えて、必要な正規分布を作成してください。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm #normは正規分布

mu = 50 # 母平均
sigma = 10 # 母標準偏差

#正規分布を表示
X = np.arange(mu-5*sigma, mu+5*sigma, 0.1)
Y = norm.pdf(X, mu, sigma)
plt.plot(X, Y, color="orange", label = "Normal-distribution")

#グラフの表示
plt.legend() #凡例表示
plt.show()

正規分布の表示結果

【実験①】二項分布と正規分布の見た目の観察

実験開始(Pythonコード)

試行回数 $n$ の二項分布 $B(n, p)$ と正規分布 $N(np, np(1-p))$ の違いを観察するコードを紹介します。

今回のコードでは、二項分布 $B(100, 0.3)$ と 正規分布 $N(30, 21)$ を比較しています。

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

# 二項分布の情報
n = 100  # Number of trials
p = 0.3  # Probability of success

# Plot the binomial distribution
x_values = np.arange(0, n + 1)
binomial_probs = binom.pmf(x_values, n, p)
plt.bar(x_values, binomial_probs, color='y', alpha=0.7, label = "Binomial-distribution")

#正規分布を表示
mu = n*p # 母平均
sigma = np.sqrt(n*p*(1-p)) # 母標準偏差
X = np.arange(mu-3*sigma, mu+3*sigma, 0.1)
Y = norm.pdf(X, mu, sigma)
plt.plot(X, Y, color="b", label = "Normal-distribution")

# Other Informations
plt.legend() #凡例表示
plt.xlabel("Number of Successes")
plt.ylabel("Probability")
plt.title(f"Binomial Distribution (n={n}, p={p})")
plt.grid(True)
plt.show()

試行結果

試行回数が $n=100$ のときと、他のいくつかの場合で二項分布のヒストグラムと、正規分布を重ねて描写しています。

$B(100, 0.3)$ と $N(30, 21)$ の比較

$n = 100$ のときは,二項分布(黄色)はかなり密なので,正規分布が近似になってそう。

$B(40, 0.3)$ と $N(12, 8.4)$ の比較

$n=40$ では,隙間が見えるが,まだ密なので良い感じで近似になってそう。

$B(30, 0.3)$ と $N(9, 6.3)$ の比較

$n=30$ のときも,まだ正規分布で近似できていると言ってもよさそう。

$B(10, 0.3)$ と $N(3, 2.1)$ の比較

$n=10$ のときは,二項分布の左右非対称性が目立つので,正規分布の対称性と相性が悪そう。

$B(5, 0.3)$ と $N(1.5, 1.05)$ の比較

$n=5$ では,だいぶ左右非対称のスカスカなので,近似の精度が良いのか?って思う。

以上から、試行回数が増えれば、二項分布と正規分布は一致していくと考えてもよさそうですね。

【実験②】二項分布と正規分布の確率の数値比較

二項分布で $P(a<X<b)$ の確率を計算したときと, 正規分布で $P(a<X<b)$ の計算をしたときの値の比較をして近似できているか調べたいと思いました。

実験開始(Pythonコード)

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom
from scipy.stats import norm
from scipy import stats
import math

# 試行回数と成功確率
n = 100  # 試行回数
p = 0.5  # 成功確率
A = 60 # [正規分布]A以上の所の確率を求める [二項分布]Aからnまでの確率の和を求める

# 二項分布を表示
x_values = np.arange(0, n)
binomial_probs = binom.pmf(x_values, n, p)
plt.bar(x_values, binomial_probs, color='y', alpha=0.7, label = "Binomial-distribution")

#正規分布を表示
mu = n*p # 母平均
sigma = np.sqrt(n*p*(1-p)) # 母標準偏差
X = np.arange(0, n+1, 0.1)
Y = norm.pdf(X, mu, sigma)
plt.plot(X, Y, color="b", label = "Normal-distribution")

# Other Informations
plt.legend() #凡例表示
plt.xlabel("Number of Successes")
plt.ylabel("Probability")
plt.title(f"Binomial Distribution (n={n}, p={p})")
plt.grid(True)
plt.fill_between(X[X >= A], Y[X >= A])
plt.show()

def sum_binomial_probs(n, p, m):
    total_prob = 0.0
    for k in range(math.ceil(m), n+1):
        prob = binom.pmf(k, n, p)  # 二項分布の確率質量関数を使用
        total_prob += prob
    return total_prob

sum_prob = sum_binomial_probs(n, p, A)
print(f"[二項分布]{n} 回試行して, 成功回数が {A} 回以上の確率は約{sum_prob*100: .5f}% です.")

probability = 1 - stats.norm.cdf(x = A, loc=mu, scale=sigma)
# 結果の表示
print(f"[正規分布]成功回数が{A}回以上になる確率は約{probability * 100:.5f}%です。")

試行結果

実際に上のPythonコードを実行すると、次の出力が得られます。

試行回数 $n=100$ のとき、成功回数が60回以上の確率を調べています。

黄色の二項分布の方は、約2.84%(0.0284)の確率で、青色の正規分布の方は約2.27%(0.0227)の確率でした。

近似している」とは言えない感じですね。
だいたい同じ」ということもできなくもないです。

でも、もっと試行回数が大きければ、もっと良い近似ができそうな気はします。

おおよその値を出すだけならば、どちらかの計算で代用しても良さそうです。

いろいろと数字を変えて、やってみてね!

【事例】正規分布の具体例

※ここは2学期に授業するので、今後早いうちに詳しく付け加えていきます。

偏差値(成績分布)

$N(50,10^2)$

パスタを半分に折る(誤差の分布)

パスタを半分に折る
(参考:青山学院大学寺尾先生HP

人時計(誤差の分布)

心で数を数える

ゴルトンボード

【まとめ】ポイントノート

「正規分布」とは

実験や製造などの誤差がつくる自然な確率分布のこと。

確率密度関数

$\displaystyle f(x) = \frac{1}{\sqrt{2 \pi}\sigma} e^{-\frac{(x-m)^2}{2\sigma^2}}$($m \in \mathbb{R}$, $\sigma>0$)

A. 期待値 $E[X]$と分散 $V[X]$

正規分布に従う確率変数 $X$ について, $E[X] = m$, $V[X] = \sigma^2$.

記号

平均値 $m$, 標準偏差 $\sigma$ の

正規分布を $N(m, \sigma^2)$

と書く.

B. 正規分布の再帰性

独立な確率変数 $X$ と $Y$ が $N(m_1, \sigma_1^2)$ と $N(m_2, \sigma_2^2)$ にそれぞれ従うとき, $X + Y$ は正規分布 $N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2)$ に従う.

C. 標準化(変数変換)

$N(m,\sigma^2)$ に従う確率変数 $X$ について, 確率変数 $\displaystyle Z=\frac{X-m}{\sigma}$ は 標準正規分布 $N(0,1^2)$ に従う.

D. 性質(確率の目安)

正規分布では, $m \pm 1\sigma$ では約$68 \%$, $m \pm 2\sigma$ では約$95 \%$, $m \pm 3\sigma$ では約$99 \%$の確率に対応する.

ポイント解説

正規分布は

ガウス分布

とも呼ばれ、グラフはベルカーブ釣鐘型と呼ばれる。

標準正規分布

$N(0,1^2)$ のこと:$$f(z) = \frac{1}{\sqrt{2 \pi}} e^{-\frac{z^2}{2}}$$

確率密度関数の証明

$\int_{-\infty}^{\infty} f(x) dx=1$ であることは, ガウス積分 $\int_{-\infty}^{\infty} e^{-t^2} dx=\sqrt{\pi}$ より導かれる。

D

$m-n \sigma \leqq X \leqq m+n\sigma$ の範囲を $m \pm n \sigma$ と略記している。

EXCEL

NORM.DIST関数;引数には①データ範囲②平均値③標準偏差④関数形式(TRUE→下側累積確率, FALSE→確率密度関数の値)を入力する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です