統計

二項分布のグラフを描画し期待値・分散を計算してみた

(通常の)コインを何回か投げて表が出る確率を考える。例えば、(通常の)コインを5回投げて表が2回出る確率は、以下のように計算することができる。

\[
\begin{eqnarray}
P(X=2) &=& {}_5 \mathrm{ C }_2 \left( \frac{1}{2} \right)^2 \left(1 – \frac{1}{2} \right)^{(5-2)} \\
&=& \frac{{}_5 \mathrm{ P }_2}{2!} \left( \frac{1}{2} \right)^2 \left(\frac{1}{2} \right)^3 = \frac{(5 \times 4)}{(2 \times 1)} \left(\frac{1}{2} \right)^5 \\
&=& 10 \times \frac{1}{32} = \frac{10}{32} = 0.3125 \\
\end{eqnarray}
\]

これを一般化し、互いに独立な\(n\)回のベルヌーイ試行(=コインの裏表のように、何かを行ったときに起こる結果が2つしかない試行)を行うときにちょうど\(k\)回成功する確率は、以下の式で表せる。

二項分布の公式
出所:統計WEB_二項分布

実際に、(通常の)コインを5回投げて表が出る確率を表形式でまとめると、以下のようになる。

表が出る回数確率
\(0\)\(\displaystyle {}_5 \mathrm{ C }_0 \left(\frac{1}{2} \right)^0 \left(1 – \frac{1}{2} \right)^{(5-0)} = \frac{1}{32} = 0.03125 \)
\(1\)\(\displaystyle {}_5 \mathrm{ C }_1 \left(\frac{1}{2} \right)^1 \left(1 – \frac{1}{2} \right)^{(5-1)} = \frac{5}{32} = 0.15625 \)
\(2\)\(\displaystyle {}_5 \mathrm{ C }_2 \left(\frac{1}{2} \right)^2 \left(1 – \frac{1}{2} \right)^{(5-2)} = \frac{10}{32} = 0.3125 \)
\(3\)\(\displaystyle {}_5 \mathrm{ C }_3 \left(\frac{1}{2} \right)^3 \left(1 – \frac{1}{2} \right)^{(5-3)} = \frac{10}{32} = 0.3125 \)
\(4\)\(\displaystyle {}_5 \mathrm{ C }_4 \left(\frac{1}{2} \right)^4 \left(1 – \frac{1}{2} \right)^{(5-4)} = \frac{5}{32} = 0.15625 \)
\(5\)\(\displaystyle {}_5 \mathrm{ C }_5 \left(\frac{1}{2} \right)^5 \left(1 – \frac{1}{2} \right)^{(5-5)} = \frac{1}{32} = 0.03125 \)

また、コインを5回投げて表が出る確率を計算しグラフにまとめた場合の、ソースコードと実行結果は、以下のようになる。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

# n!(=1*2*・・・*n、nの階乗)を計算
def factorial(n):
    ret = 1
    for num in range(1, n + 1):
        ret = ret * num
    return ret

# {}_n \mathrm{ P }_k(n個からk個を並べる組み合わせ)を計算
def permutation(n, k):
    ret = 1
    for num in range(n + 1- k, n + 1):
        ret = ret * num
    return ret

# {}_n \mathrm{ C }_k(n個からk個を取り出す組み合わせ)を計算
def combination(n, k):
    return permutation(n, k) / factorial(k)

# 二項分布(コインをn回投げて表がk回出る確率)の計算
def binomial(n, k):
    return combination(n, k) / 2 ** n

# コインを5回投げて表がk回出る確率をそれぞれ計算
p_list = list()
for num in range(0, 6):
    p_list.append(binomial(5, num))

print("*** コインを5回投げて表がk回出る確率をそれぞれ計算した結果 ***")
print("表が出る回数 0の確率 = " + str(p_list[0]))
print("表が出る回数 1の確率 = " + str(p_list[1]))
print("表が出る回数 2の確率 = " + str(p_list[2]))
print("表が出る回数 3の確率 = " + str(p_list[3]))
print("表が出る回数 4の確率 = " + str(p_list[4]))
print("表が出る回数 5の確率 = " + str(p_list[5]))

# コインを5回投げて表がk回出る確率を棒グラフで描画
k_list_array = np.array([0, 1, 2, 3, 4, 5])
p_list_array = np.array(p_list)
plt.bar(k_list_array, p_list_array)
plt.title("binomial graph")
plt.xlabel("k", size=14)
plt.ylabel("p", size=14)
plt.show()
コインを5回投げて表がk回出る確率の値とグラフ

このように、起こりうることがらに割り当てている値(上記の例では、表が出る回数0~5)のことを確率変数といい、確率変数がとる値とその値をとる確率の対応の様子を確率分布という。また、\(n\)回のベルヌーイ試行を行うときにちょうど\(k\)回成功する場合の確率分布を、二項分布という。

同様に、コインを30回投げて表が出る確率を計算しグラフにまとめた場合の、ソースコードと実行結果は、以下のようになる。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

# n!(=1*2*・・・*n、nの階乗)を計算
def factorial(n):
    ret = 1
    for num in range(1, n + 1):
        ret = ret * num
    return ret

# {}_n \mathrm{ P }_k(n個からk個を並べる組み合わせ)を計算
def permutation(n, k):
    ret = 1
    for num in range(n + 1- k, n + 1):
        ret = ret * num
    return ret

# {}_n \mathrm{ C }_k(n個からk個を取り出す組み合わせ)を計算
def combination(n, k):
    return permutation(n, k) / factorial(k)

# 二項分布(コインをn回投げて表がk回出る確率)の計算
def binomial(n, k):
    return combination(n, k) / 2 ** n

# コインを30回投げて表がk回出る確率をそれぞれ計算
p_list = list()
for num in range(0, 31):
    p_list.append(binomial(30, num))

# コインを30回投げて表がk回出る確率を棒グラフで描画
k_list_array = np.array(range(0, 31))
p_list_array = np.array(p_list)
plt.bar(k_list_array, p_list_array)
plt.title("binomial graph")
plt.xlabel("k", size=14)
plt.ylabel("p", size=14)
plt.show()
コインを30回投げて表がk回出る確率のグラフ

このグラフから、\(k=15\)付近が最も確率が高く、\(k=15\)から離れるに従い、確率が\(0\)に近づくことが確認できる。



「Envader」はLinuxコマンドやDatabase SQL等のスキルを、環境構築不要で習得できる学習サイトだった「Envader」は、ITエンジニアとしてよく使うLinuxコマンドやDatabase SQL等のスキルを、解説を読んだ上で、問題を解き...

二項分布の公式
出所:統計WEB_二項分布

また、上記の二項分布が、互いに独立な\(n\)回のベルヌーイ試行を行った場合の結果であることを利用すると、期待値\(E(X)\)と分散\(V(X)\)を計算した結果は、以下の通り。
\[
\begin{eqnarray}
E(X) &=& E(X_1 + X_2 + \cdots + X_n) = E(X_1) + E(X_2) + \cdots + E(X_n) \\
&=& \sum_{i=1}^{n}E(X_i) = np \\
V(X) &=& V(X_1 + X_2 + \cdots + X_n) = V(X_1) + V(X_2) + \cdots + V(X_n) \\
&=& \sum_{i=1}^{n}V(X_i) = np(1-p)
\end{eqnarray}
\]

上記計算には、\(E(X+Y)=E(X)+E(Y)\)と、確率変数X,Yが互いに独立である場合に\(V(X+Y)=V(X)+V(Y)\)であることを利用している。

これらの公式は、以下のサイトを参照のこと。
https://toketarou.com/expectation/

さらに、ベルヌーイ分布の期待値\(E(X)=p\)、分散\(V(X)=p(1-p)\)となることについては、以下のサイトを参照のこと。

ベルヌーイ分布のグラフを描画し期待値・分散を計算してみた コインの裏表のように、何かを行ったときに起こる結果が\(2\)つしかない試行をベルヌーイ試行といい、この試行の結果を\(0\)と\(...

要点まとめ

  • コインの裏表のように、何かを行ったときに起こる結果が2つしかない試行を、ベルヌーイ試行という。
  • \(n\)回のベルヌーイ試行を行うときにちょうど\(k\)回成功する確率は、\( {}_n \mathrm{ C }_kp^k(1 – p)^{(n-k)} \)で表せる。
  • \(n\)回のベルヌーイ試行を行うときにちょうど\(k\)回成功する場合の確率分布を、二項分布という。
  • \(n\)回のベルヌーイ試行を行うときにちょうど\(k\)回成功する場合の二項分布において、期待値\(E(X)=np\)、分散\(V(X)=np(1-p)\)となる。