Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

統計学 – 二項分布

統計学 – 二項分布

概要

離散確率分布の1つである二項分布について解説します。

Advertisement

確率関数

確率変数 $X$ が次のような確率関数をもつとき、$X$ はパラメータ $n, p$ の二項分布 (binominal distribution) に従うという。 確率変数 $X$ がパラメータ $n, p$ の二項分布に従うことを $X \sim B(n, p)$ と表す。

$$ f_X(x) = \begin{cases} \binom{n}{x} p^x (1 – p)^{n – x} & x = 0, 1, \cdots, n \\ 0 & その他の場合 \end{cases} $$

ただし、$n$ は正の整数、$0 \le p \le 1$

確率関数である

二項定理 $(a + b)^n = \sum_{x = 0}^n \binom{n}{x} a^x b^{n – x}$ より、

$$ \sum_{x = 0}^n \binom{n}{x} p^x (1 – p)^{n – x} = \sum_{x = 0}^n (p + (1 – p))^n = 1 $$

また、$f_X(x) \ge 0$ は明らか。

解釈

結果が成功か失敗かのいずれかである試行をベルヌーイ試行 (Bernoulli trial) という。 ベルヌーイ試行を $n$ 回行ったときの成功回数を表す確率変数 $X$ をとると、$X$ はパラメータ $n, p$ の二項分布に従う。

累積確率関数

$$ P(X \le x) = \sum_{k = 0}^{\lfloor x \rfloor} \binom{n}{k} p^k (1 – p)^{n – k} $$
Advertisement

期待値

$$ \begin{aligned} E[X] &= \sum_{x = 0}^n x \binom{n}{x} p^x (1 – p)^{n – x} \\ &= \sum_{x = 0}^n x \frac{n!}{x!(n – x)!} p^x (1 – p)^{n – x} \\ &= \sum_{x = 1}^n \frac{n!}{(x – 1)!(n – x)!} p^x (1 – p)^{n – x} \quad \because x = 0 の項目は0 \\ \end{aligned} $$

ここで、$x’ = x – 1, n’ = n – 1$ とおくと、

$$ \begin{aligned} E[X] &= \sum_{x’ = 0}^{n’} \frac{(n’ + 1)!}{x’! (n’ – x’)!} p^{x’ + 1} (1 – p)^{n’ – x’} \\ &= (n’ + 1)p \sum_{x’ = 0}^{n’} \frac{n’!}{x’!(n’ – x’)!} p^{x’} (1 – p)^{n’ – x’} \\ &= np \sum_{x’ = 0}^{n’} \frac{n’!}{x’!(n’ – x’)!} p^{x’} (1 – p)^{n’ – x’} \\ &= np (p + (1 – p))^{n’} \quad \because 二項定理 \\ &= np \end{aligned} $$

分散

$$ \begin{aligned} E[X(X – 1)] &= \sum_{x = 0}^n x(x – 1) \binom{n}{x} p^x (1 – p)^{n – x} \\ &= \sum_{x = 0}^n x(x – 1) \frac{n!}{x!(n – x)!} p^x (1 – p)^{n – x} \\ &= \sum_{x = 2}^n \frac{n!}{(x – 2)!(n – x)!} p^x (1 – p)^{n – x} \quad \because x = 0, 1 の項目は0 \\ \end{aligned} $$

ここで、$x’ = x – 2, n’ = n – 2$ とおくと、

$$ \begin{aligned} E[X(X – 1)] &= \sum_{x’ = 0}^{n’} \frac{(n’ + 2)!}{x’!(n’ – x’)!} p^{x’ + 2} (1 – p)^{n’ – x’}\\ &= (n’ + 2)(n’ + 1)p^2 \sum_{x’ = 0}^{n’} \frac{n’!}{x’!(n’ – x’)!} p^{x’} (1 – p)^{n’ – x’}\\ &= n(n – 1)p^2 \sum_{x’ = 0}^{n’} \frac{n’!}{x’!(n’ – x’)!} p^{x’} (1 – p)^{n’ – x’}\\ &= n(n – 1)p^2 \quad \because パラメータ n’, p の二項分布の確率関数の総和は1 \\ \end{aligned} $$

よって、分散は

$$ \begin{aligned} Var[X] &= E[X^2] – [E(X)]^2 \\ &= E[X(X – 1)] + E[X] – [E(X)]^2 \\ &= n(n – 1)p^2 + np – (np)^2 \\ &= np(1 – p) \end{aligned} $$

積率母関数

$$ \begin{aligned} m_X(t) &= E[e^{Xt}] \\ &= \sum_{x = 0}^n e^{xt} \binom{n}{x} p^x (1 – p)^{n – x} \\ &= \sum_{x = 0}^n \binom{n}{x} (e^t p)^x (1 – p)^{n – x} \\ &= (e^t p + 1 – p)^n \quad \because 二項定理 \end{aligned} $$

ベルヌーイ分布との関係

$X_1, X_2, \cdots, X_n$ を独立で同一なパラメータ $p$ のベルヌーイ分布に従うとき、この確率変数の和 $Y = X_1 + X_2 + \cdots + X_n$ はパラメータ $n, p$ の二項分布に従う。

$$ \begin{aligned} m_Y(t) &= \prod_{i = 1}^n m_{X_i}(t) \quad \because X_1, X_2, \cdots, X_n は独立 \\ &= \prod_{i = 1}^n (p e^t + 1 – p) \quad \because パラメータ p のベルヌーイ分布の積率母関数 \\ &= (p e^t + 1 – p)^n \end{aligned} $$

であるから積率母関数の一意性より、$Y$ はパラメータ $n, p$ の二項分布に従う。

Advertisement

再生性

$X_1, X_2, \cdots, X_k$ を独立で、$X_i$ はパラメータ $n_i, p$ の二項分布に従うとき、この確率変数の和 $Y = X_1 + X_2 + \cdots + X_k$ はパラメータ $n_1 + n_2 + \cdots + n_k, p$ の二項分布に従う。

$$ \begin{aligned} m_Y(t) &= \prod_{i = 1}^k m_{X_i}(t) \quad \because X_1, X_2, \cdots, X_n は独立で同一 \\ &= \prod_{i = 1}^k (p e^t + 1 – p)^{n_i} \quad \because パラメータ n_i, p の二項分布の積率母関数 \\ &= (p e^t + 1 – p)^{n_1 + n_2 + \cdots + n_k} \end{aligned} $$

であるから積率母関数の一意性より、$Y$ はパラメータ $n_1 + n_2 + \cdots + n_k, p$ の二項分布に従う。

scipy.stats の二項分布

scipy.stats.binom で二項分布に従う確率変数を作成できます。

In [1]:
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
from scipy.stats import binom

sns.set(style="white")

X = binom(n=10, p=0.3)

サンプリング

In [2]:
x = X.rvs(size=10)
print(x)
[5 2 3 7 3 3 3 6 2 4]

確率質量関数

In [3]:
x = np.arange(0, 11)
y = X.pmf(x)

fig, ax = plt.subplots()
ax.stem(x, y, use_line_collection=True)
ax.grid()

plt.show()
Advertisement

累積分布関数

In [4]:
x = np.arange(0, 11)
y = X.cdf(x)

fig, ax = plt.subplots()
ax.step(x, y)
ax.grid()

plt.show()

統計量

In [5]:
print("mean", X.mean())
print("var", X.var())
print("std", X.std())
mean 3.0
var 2.0999999999999996
std 1.4491376746189437