どうも、月見(@Suzuka14144156)です。
今回は、95%信頼区間の求め方・計算方法と棒グラフのエラーバーで表示する方法を解説します。
この記事では、以下のようなグラフを得ることができるようになります。

95%信頼区間とは?
- 95%信頼区間とは、「正規分布に従う母集団から標本得た平均が、95%の確率で母平均が含まれる」区間ということ
詳細は、以下の本で学ぶのがオススメです。
参考:基礎から学ぶ統計学
95%信頼区間はどうつかうの?
95%信頼区間は、エラーバーに使うことがよくあります。
なぜなら、95%信頼区間を求めることで、2標本間に有意差があるかどうかを判断しやすいためです。
2標本間の95%信頼区間が重ならない場合は、有意差があると言えます。

なので、以下のようなグラフになった場合は、有意差があるかわからないとなります。

95%信頼区間とエラーバーと有意差の関係については、以下の記事で解説していますので、参考にしてみてください。
Pythonで95%信頼区間を計算するための環境の構築
今回は、Jupyte Labを用います。
Juptrer Labのインストール
インストール方法は以下2種類ある。

- どちらでもOKです
ただ、Anacondaをインストールする方が時間がかかるのでお急ぎの方は、「JupyterLabを直接インストール」がオススメ。
Anacondaをインストール
以下の記事を参考にしてください。
Python Anacondaとは?|インストール〜Jupyter Notebookの立ち上げ
JupyterLabを直接インストール
コマンドプロンプトから、以下のコードを入力ください。
pip install jupyterlab
Pandasのインストール
Pandasは二次元のデータ配列を扱うために用いるライブラリです。
コマンドプロンプトから、以下のコードを入力ください。
anacondaをインストールした場合は、自動でインストールされるはずなので、以下のコマンドは不要です。
pip install pandas
Scipyのインストール
Scipyは、95%信頼区間を扱うために用いるライブラリです。
コマンドプロンプトから、以下のコードを入力ください。
pip install scipy
Matplotlibのインストール
Mtplotlibは、グラフに可視化するためのライブラリです。
コマンドプロンプトから、以下のコードを入力ください。
pip install matplotlib
日本語対応するために以下もインストールする。
pip install japanize-matplotlib
sklearnのインストール
sklearnは、アイリスデータを用いるために使用するライブラリです。
コマンドプロンプトから、以下のコードを入力ください。
anacondaをインストールした場合は、自動でインストールされるはずなので、以下のコマンドは不要です。
公式では、以下のコマンドをたたくように指示しています。
pip install -U scikit-learn
Pythonで95%信頼区間を計算する方法
アイリスデータのロード
import pandas as pd
from sklearn.datasets import load_iris
iris=load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris['target']
df

ヒストグラムで可視化
import matplotlib.pyplot as plt
import japanize_matplotlib
target_0 = df[df.target == 0]
target_1 = df[df.target == 1]
plt.hist(target_0['sepal length (cm)'],alpha=0.5,label='target=0')
plt.hist(target_1['sepal length (cm)'],alpha=0.5,label='target=1')
plt.legend()
plt.show()
sepal length (cm)をtarget=0とtarget=1毎にヒストグラムを描きます。

各統計量を確認
target_0['sepal length (cm)'].describe()

target_1['sepal length (cm)'].describe()

95%信頼区間を算出
from scipy import stats
def get_95(df):
a = 0.95 #信頼水準
d = len(df)-1 #自由度
m = df.mean() #標本平均
s = stats.sem(df) #標準誤差
target_95per_section = stats.t.interval(alpha = a, df = d, loc = m, scale =s)
target_95per = (target_95per_section[1] - target_95per_section[0])/2
return target_95per
target_0_95per = get_95(target_0['sepal length (cm)'])
target_1_95per = get_95(target_1['sepal length (cm)'])
yerr = [target_0_95per,target_1_95per]
yerr
以下がtarget_0とtarget_1の95%信頼区間。

95%信頼区間をエラーバーで可視化
x=['target_0','target_1']
bar_y = [target_0['sepal length (cm)'].describe()['mean'],target_1['sepal length (cm)'].describe()['mean']]
plt.bar(x,bar_y,yerr=yerr,capsize=5)
plt.ylabel('sepal length (cm)')
plt.text(x=-0.4,y=6,s='エラーバー:95%信頼区間')
plt.text(x=-0.4,y=5.5,s='n=50')
plt.show()

この結果から、target_0とtarget_1には、有意差がありそう。
(ちなみに)標準偏差をエラーバーで可視化
#エラーバーが、標準偏差の場合
x=['target_0','target_1']
yerr_std = [target_0['sepal length (cm)'].describe()['std'],target_1['sepal length (cm)'].describe()['std']]
bar_y = [target_0['sepal length (cm)'].describe()['mean'],target_1['sepal length (cm)'].describe()['mean']]
plt.bar(x,bar_y,yerr=yerr_std,capsize=5)
plt.ylabel('sepal length (cm)')
plt.text(x=-0.4,y=6,s='エラーバー:標準偏差')
plt.text(x=-0.4,y=5.5,s='n=50')
plt.show()

(ちなみに)標準誤差をエラーバーで可視化
import math
#エラーバーが、標準誤差の場合
x=['target_0','target_1']
yerr_std = [target_0['sepal length (cm)'].describe()['std']/math.sqrt(target_0['sepal length (cm)'].describe()['count']),
target_1['sepal length (cm)'].describe()['std']/math.sqrt(target_1['sepal length (cm)'].describe()['count'])]
bar_y = [target_0['sepal length (cm)'].describe()['mean'],target_1['sepal length (cm)'].describe()['mean']]
plt.bar(x,bar_y,yerr=yerr_std,capsize=5)
plt.ylabel('sepal length (cm)')
plt.text(x=-0.4,y=6,s='エラーバー:標準誤差')
plt.text(x=-0.4,y=5.5,s='n=50')
plt.show()

本記事の関連の参考書や講座
基本的なPythonのコード知識を学ぶには、以下の書物がオススメです。
Udemy
Udemyはオンライン講座です。
一度購入すれば、ずっと閲覧できるのでオススメです。

まとめ
この記事では、Pythonで95%信頼区間の求め方・計算方法を解説しました。
コメント