ほぼPython

Not技術ブログBut勉強ブログ 内容には誤りがあることが多いです

Pythonで母分散が未知の時の母平均の区間推定をする

今日は、機械学習の本を読んでいて、統計学の知識がイマイチだなあと感じたので、統計学の復習をしました。(2年ぶり)
せっかくなので、いくつかの統計量についてpythonで求めて、最後に本に書いてあったデータを使って母平均の区間推定も行いました。

基本統計量

事前にnumpyをnpとしてimportしておきます。
データは本に載っていたこれを使いました。

sample1 = [5.8,5.9,5.5,6.1,6.2,6.0,5.9,5.7,6.0,6.3] #コリドラス10匹のデータ

ちなみに、コリドラスというのは熱帯魚らしいです。

f:id:short_4010:20180305211618j:plain:w200

#基本統計量メモ
sample1_sta={} #sample1に関するいろんな統計値をいれる辞書
sample1_sta['サイズ'] = len(sample1)
sample1_sta['最大値'] = np.max(sample1)
sample1_sta['最小値'] = np.min(sample1)
sample1_sta['中央値'] = np.median(sample1)
sample1_sta['平均'] = np.mean(sample1) #標本の平均値(母平均の推定値)
sample1_sta['分散'] = np.var(sample1) #分散
sample1_sta['標準偏差'] = np.std(sample1) #標本の標準偏差
sample1_sta['不偏分散'] = np.var(sample1,ddof=1) #不偏分散(母分散の推定値)
print(sample1_sta) #いろいろ表示して確認

区間推定

母平均の区間推定を信頼区間99%で行います。

#母平均の区間推定(信頼区間99%)
t_99 = 3.25 #データ数が10(自由度9)の時の99%信頼区間のtの値
a = sample1_sta['平均']
b = np.sqrt(sample1_sta['不偏分散']/sample1_sta['サイズ'])
u_min = a - t_99 * b
u_max = a + t_99 * b
print("99%信頼区間は{0:.2f}<u<{1:.2f}".format(u_min,u_max))

99%信頼区間について

区間推定を行った結果、母平均μは 5.70<μ<6.18 となりました。

僕は、長い間この99%信頼区間の意味がイマイチよくわかってませんでしたが、今日理解できました。

まず、勘違いしてはいけないのは、この99%信頼区間は「この範囲に99%の確率で母平均が含まれる」という意味ではないということです。これが意味しているのは「母集団から標本を抽出して区間推定を繰り返したとき、100回に99回は、信頼区間に母平均が含まれる」という意味です。

・・・という事実自体はずっとわかっていたのですが、直観的に何を意味しているのかがイマイチでした。特に大きな疑問は「え?それって、99%の確率で母平均が含まれる」ってのと同じじゃないの?ってことでした。

しかし、同じではないんですね。これをもっと僕なりに解釈すると、「今回求めた信頼区間に母平均が含まれているのか含まれていないのかはわからないけど、こういう操作で求めた信頼区間の100個のうち、99個の信頼区間には母平均が含まれているから、これを信頼しよう」ってことになります。

これで僕はスッキリしました。しかし、実は少し気になるところがあって、それは「母平均が含まれているのか含まれていないのかはわからないけど」というところです。ちょっとここの表現が微妙だなと思います。まあでも間違ってはいないはずです。

しかし、やはり何となく納得がいかなかったのでもうひとつ自分なりに理解しやすい解釈文を考えました。

それは、「求めた信頼区間のうち、99%には、その区間の間に、母平均が含まれる」です。

ちなみに、間違った解釈は「この範囲に99%の確率で母平均が含まれる」です。日本語って難しいですね。

とても微妙な違いですが、確率を語っているのはあくまでも信頼区間についてであり、母平均についてではないというところがポイントです。