【統計検定準1級】ベルヌーイ分布
はじめに
この記事では、統計検定準1級取得に向けて学習したことをまとめていきます。
工学系の数学ではなく数理あるあるの、論述ゴリゴリな解答になっていると思いますのであらかじめご了承ください。
注意:さらに計算過程は数学文化の『省略の美』を無視してエレファントに書いています。
【リンク紹介】
・統計検定準1級のまとめ記事一覧
・これまで書いたシリーズ記事一覧
学習書籍について
この記事では「統計学実践ワークブック」を中心に、学んだことをまとめていきます。記事を読んで本格的に勉強してみたいなと思った方は、是非ご購入を検討なさってください。
参考書籍について
統計実践ワークブックは、大量の知識項目と問題が収められている反面、計算過程や知識背景が大きく省略されているため、知識体系をきちんと学ぶ参考書として東京大学から出版されている名著「統計学入門」を使っています。
※ワークブックとしては素晴らしい質だと思いますが、どうしてもその内容量とページ数の都合上、問題のない範囲で削除されているということです。人によっては1冊で問題ない方もおられると思いますが、私には無理でした。
ベルヌーイ試行
次の試行を、ベルヌーイ試行(Bernoulli trial)という。
①1回の試行結果は2種類のみ。
ここでは一方の結果を「成功」といい、もう一方の結果を「失敗」ということとする。
②毎回の試行において、成功の確率は
③毎回の試行は独立である。
④試行を
ベルヌーイ分布
ベルヌーイ試行に対して確率変数
であるとき、この確率関数
グラフの描画
コードはこちら
参考資料→Pythonで理解する統計解析の基礎
※参考にはしていますが表記は大分変更しています。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from scipy.special import comb # 組み合わせ関数
# 表示桁数を小数点以下第3位に設定
%precision 3
# [Jupyter notebook only]
# グラフ表示を非インタラクティブモード(jupyter notebook内に表示)に設定
# インタラクティブモードだと別ウィンドウで表示される
%matplotlib inline
"""""""""""""""""""""""""""""""""""""""""""""""""""
関数名:Bern(p)
機 能:ベルヌーイ分布
引 数:成功確率p
戻り値:確率変数と確率関数(X, f)
"""""""""""""""""""""""""""""""""""""""""""""""""""
def Bern(p):
X = np.array([0, 1])
def f(x):
if x in X:
return (p**x) * ((1 - p)**(1 - x))
else:
return 0
return X, f
p = 0.3 # 成功確率
Xf = Bin(n, p) # 確率変数とその確率関数の値
check_prob(Xf)
plot_prob(Xf)
基本関数
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 表示桁数を小数点以下第3位に設定
%precision 3
# [Jupyter notebook only]
# グラフ表示を非インタラクティブモード(jupyter notebook内に表示)に設定
# インタラクティブモードだと別ウィンドウで表示される
%matplotlib inline
# グラフの線の種類
linestyles = ['-', '--', ':']
"""""""""""""""""""""""""""""""""""""""""""""""""""
関数名:E(Xf, g = lambda x: x)
機 能:確率変数(確率変数の関数)の期待値を返す
引 数:確率変数と確率関数X(タプル)
確率変数Xの関数g(初期値:恒等関数)
戻り値:期待値
"""""""""""""""""""""""""""""""""""""""""""""""""""
def E(Xf, g = lambda x: x):
X = Xf[0] # 確率変数
f = Xf[1] # 確率関数
expection = np.sum([g(x_k) * f(x_k) for x_k in X])
return expection
"""""""""""""""""""""""""""""""""""""""""""""""""""
関数名:V(Xf, g = lambda x: x)
機 能:確率変数(確率変数の関数)の分散を返す
引 数:確率変数と確率関数X(タプル)
確率変数Xの関数g(初期値:恒等関数)
戻り値:分散
"""""""""""""""""""""""""""""""""""""""""""""""""""
def V(Xf, g = lambda x: x):
X = Xf[0] # 確率変数
f = Xf[1] # 確率関数
expection = E(Xf, g)
variance = np.sum([(g(x_k) - expection)**2 * f(x_k) for x_k in X])
return variance
"""""""""""""""""""""""""""""""""""""""""""""""""""
関数名:check_prob(Xf)
機 能:確率変数が確率の性質を満たしているかを確認する
引 数:確率変数と確率関数(タプル)
戻り値:なし
"""""""""""""""""""""""""""""""""""""""""""""""""""
def check_prob(Xf):
X = Xf[0] # 確率変数
f = Xf[1] # 確率関数
prob = np.array([f(x_k) for x_k in X])
assert np.all(prob >= 0), '負の確率があります'
prob_sum = np.round(np.sum(prob), 6)
assert prob_sum == 1, f'確率の和が{prob_sum}になりました'
print(f'期待値は{E(Xf):.4}')
print(f'分散は{V(Xf):.4}')
"""""""""""""""""""""""""""""""""""""""""""""""""""
関数名:plot_prob(Xf)
機 能:確率関数と期待値を図示する
引 数:確率変数と確率関数X(タプル)
戻り値:なし
"""""""""""""""""""""""""""""""""""""""""""""""""""
def plot_prob(Xf):
X = Xf[0] # 確率変数
f = Xf[1] # 確率関数
prob = np.array([f(x_k) for x_k in X])
fig = plt.figure(figsize = (10, 6))
ax = fig.add_subplot(1, 1, 1)
# 棒グラフ
ax.bar(X, prob, label = 'prob', color = '#006C4F')
# 縦線
ax.vlines(E(Xf), 0, 1, label = 'expection', color = '#ee7800')
# グラフ設定
ax.set_xticks(np.append(X, E(Xf))) # x目盛値
# ax.set_ytickx() # y目盛値
# ax.set_xlim() # x軸の範囲
ax.set_ylim(0, prob.max() * 1.2) # y軸の範囲
# ax.xlabel() # x軸ラベル
# ax.ylabel() # y軸ラベル
ax.legend() # 凡例
# 描画
plt.show()
ベルヌーイ分布の期待値
ベルヌーイ分布の分散
ベルヌーイ分布の確率母関数
参考資料
- 日本統計学会(編集).日本統計学会認定 統計検定準1級対応 統計学実践ワークブック.学術図書出版社.2020
- 東京大学教養学部統計学教室.統計学入門(基礎統計学Ⅰ).東京大学出版会.1991
- 小寺 平治.新統計入門.裳華房.1996
- 稲垣 宣生, 山根 芳知, 吉田 光雄.統計学入門.裳華房.1992
- 長瀬道弘・芦野隆一.微分積分概説.サイエンス社.2007
- 加藤文元.チャート式シリーズ 大学教養 微分積分.数研出版.2024
ご協力のほどよろしくお願いします。
Discussion