Pythonで実装する推測統計②(点推定、区間推定)|スクラッチ実装で理解する基礎統計 #5

f:id:lib-arts:20190419173312p:plain

上記のシリーズで機械学習アルゴリズムの実装を行っているのですが、他の内容もできればということで同様のイメージで基礎統計を実装していければと思います。
#4では推測統計に入るにあたっての前段階として統計量を取り扱いました。

#5では推測統計のメイントピックである点推定と区間推定について取り扱います。
以下目次になります。
 
1. 統計量復習&推定とは
2. 点推定の概要
3. 区間推定の概要とPythonでの実装
4. まとめ

 

1. 統計量復習&推定とは
点推定、区間推定に入る前に、まずは推定する対象である統計量について復習を行います。
詳細は#4で取り扱いましたが、推測統計では手元に得られたデータが母集団から確率的に実現されたものであると考え、母集団の性質について議論します。ここで、母集団の性質の議論は統計量を推定することが多くを占めます。
統計量(statistic)は標本X_{1},X_{2},X_{3},...,X_{n}の関数T(X_{1},X_{2},....,X_{n})のことを言います。統計量の例としては、標本平均、標本分散、不偏標本分散、標本標準偏差などです。
統計量も確率変数であるから分布を持ち、統計量の分布を標本分布(sampling distribution)と言います。
#4でも言及しましたが、統計量の例としては平均と分散がよく用いられるのでメインに考えておくと良いです。
また推定とは、標本に基づいて母集団のパラメータの値θの近似値を求めることです。

推定には大きく分けて点推定と区間推定の二つがあり、点推定とは未知パラメータを1つの数値で推定すること、区間推定とは未知パラメータを一定の確率で含む区間(信頼区間)を構成することを意味しています。


2. 点推定の概要
1節で統計量の復習を行ったので、2節では点推定に入っていければと思います。
まず、推定に用いる統計量T=T(X_{1},X_{2},....,X_{n})のことを推定量(estimator)と言います。ここで標本X_{1},X_{2},X_{3},...,X_{n}の実現値をx_{1},x_{2},x_{3},...,x_{n}とした時、T(x_{1},x_{2},....,x_{n})のことを推定値(estimate)と言います。
また、標本平均\overline{X}や不偏標本分散s^2は期待値が母集団の平均や分散に一致するという不偏性(unbiasedness)という性質を持っており、数式で表すとE(\overline{X})=μE(s^2)=σ^2という風に表すことができます。ここでθを母集団のパラメータとした際に、E(T)=θが満たされる場合はTをθの不偏推定量(unbiased estimator)と言います。
ここで統計量が不偏性を持つ場合は平均や分散のように推定できるのですが、より複雑な確率モデルではパラメータの推定がわかりにくい場合があります。この際に最尤法などの考え方を用います。最尤法については難易度が少々上がるのでここでは割愛します。
Pythonでの実装に関しては標本平均μと不偏標本分散s^2を計算するだけで#4とかぶるので省略します。詳しくは#4をご確認いただけたらと思います。

 

3. 区間推定の概要とPythonでの実装
あまり詳細まで取り扱うと難しくなってしまうので詳細は入門書に譲り、3節では正規分布の平均と分散の区間推定を行えればと思います。以下、平均と分散の区間推定をそれぞれ行います。
・母平均の区間推定
X_{1},X_{2},X_{3},...,X_{n}が正規母集団N(μ,σ^2)からの大きさnの無作為標本であるとした際に、
P(\overline{X}-1.96\sqrt{\frac{σ^2}{n}}) \leq μ \leq \overline{X}+1.96\sqrt{\frac{σ^2}{n}})=0.95
が成り立つので、区間[\overline{X}\pm1.96\sqrt{\frac{σ^2}{n}}]は確率0.95で未知の母平均μを含むと考えることができます。
上記を元に実際に実装していきます。まず、正規分布確率密度関数と累積分布関数を実装してみます。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

x = np.arange(-5,5,0.1)
y_pdf = norm.pdf(x)
y_cdf = norm.cdf(x)
plt.plot(x,y_pdf, color="green")
plt.plot(x,y_cdf, color="red")
plt.show() 

上記を実行すると下記のようになります。

f:id:lib-arts:20190425202959p:plain
この際にcdfにおいて、x=1.96のcdfの値からx=-1.96の値を引き算を行ってみます。

print(norm.cdf(1.96))
print(norm.cdf(-1.96))
print(norm.cdf(1.96)-norm.cdf(-1.96))

上記を実行することで、正規分布の95%信頼区間に1.96が用いられていることが把握できます。

f:id:lib-arts:20190425203027p:plain

・母分散の区間推定
分散については\chi^2分布を用います。この際サンプルの数をkとした時、kを自由度とします。この時95%信頼区間は下記のようになります。
P(\frac{(k-1)s^2}{\chi_{0.025}^2(k-1)} \leq σ^2 \leq \frac{(k-1)s^2}{\chi_{0.975}^2(k-1)})
上記を実際に実装で確認していきます。まずは\chi^2分布を可視化してみます。

from scipy.stats import chi2

x = np.arange(0,20,0.5)
y_pdf = chi2.pdf(x, 5)
y_cdf = chi2.cdf(x, 5)
plt.plot(x,y_pdf, color="green")
plt.plot(x,y_cdf, color="red")
plt.show()

上記を実行すると自由度5の\chi^2分布のグラフを書くことができます。

f:id:lib-arts:20190425205307p:plain
またここで、y_cdfの値を出力すると以下のようになります。

f:id:lib-arts:20190425205330p:plain
上記を解釈することで、自由度5の際は左側(0.025)は0.5~0.1、右側(0.975)は12.5~13にあり、ここの値を使用すれば良いということがわかります。

4. まとめ
区間推定はイメージ先行の解説となってしまいましたが、概要をつかんでから詳細を見た方が良いので、一旦3節の記述を元にイメージをつかんでいただけたらと思います。