推計統計と区間推定
推計統計と区間推定
こんにちは、わいわわです!
統計推定の学習を進めておりますが
今回はその中でも区間推定を学習していきます!
区間推定
区間推定...値が含まれる区間をもって推定する
区間推定では母集団の性質を表す平均や分散、比率などの値が含まれる範囲を求めます。
この範囲のことを信頼区間と呼び、
信頼区間がどの程度の確率で言い当てているかを信頼度で表します。
信頼区間を広げれば広げるほど当たる可能性は高くなるものの、
範囲が広がりすぎるとデータ自体が曖昧なものになってしまいます。
逆に狭くするとより具体的な母集団を示すことになるとはいえ、
この場合は当たる可能性が低くなってしまいます。
そこで、区間推定を行う場合は**「信頼度95%」**がよくつかわれます。
この95%は「信頼度はなるべく高く、かつ信頼区間の範囲は小さく」を
最大限に出したバランスの取れた信頼度だということがよくつかわれる理由です。
この信頼度95%というのは、
「100回の試行を行ったとき、95回の結果は信頼区間内に納まるが、
5回くらいの結果は信頼区間に納まることが期待できない」ということです。
実際に区間推定をしてみる
「ある作業所において製造した手作りジュース50本の容量ml」
のデータを用意し、50本の容量をサンプルとして母平均の区間推定をしてみます。
capacity
187
171
167
174
163
175
196
192
179...
このような形で50個のデータがあります。
SciPyのscipy.stats.norm.interval()関数で
正規分布における信頼区間の下限値と上限値を求めることができます。
import math
import pandas as pd
from scipy.stats import norm
# CSVファイルのデータをデータフレームに読み込む
df = pd.read_csv('measurement.csv')
# 母分散の推定値として標本の不偏分散を求める
p_var = df.var()
# 標本の平均を求める
s_mean = df.mean()
# 標本の数(サンプルサイズ)を求める
n = len(df)
# 95%信頼区間の下限値と上限値を求める
bottom, up = norm.interval(
0.95,
loc=s_mean,
scale=math.sqrt(p_var/(n)))
# 信頼区間の下限値と上限値を出力
print(bottom)
print(up)
!出力結果!
[178.14322101]
[184.57677899]
scipy.stats.norm.interval()関数はパラメーターとして
confidence...信頼度
loc...標本平均
scale...標本平均の分布を指定する
があります。このパラメーターをこのコードでも指定しています。
この出力結果から、このデータに関する95%の信頼度における母平均の区間推定は
178.14 ≦ 母平均 ≦ 184.58
になります。
小標本を使っての区間推定
先ほどはサンプルサイズが50個でしたが、今度は30個より小さい場合の
母平均の区間推定についてみていきます。
今度は製造されたフレッシュジュースの容量を10本分測定したデータを用意しました。
capacity
167
171
169
170
169
166
171
168
172
169
大標本ではないので、標準正規分布ではなく
t分布で考えなくてはなりません。
- t分布
平均x¯の標本分布において,母集団の標準偏差σの代わりに
標本標準偏差s′を用いた場合の標準化後の平均x¯が従う確率分布
説明をいくつかのサイトで見ましたがいまいちピンとこず、、
簡単に置き換えると自由度が低い場合に標準正規分布の代わりになるもの
ということです。
自由度...「自由に動ける変数の数」のこと。
例えば、サンプルサイズが10個の時の自由度は10。
サンプルサイズ10で母平均を区間推定する
scipy.stats.t.interval()関数で
t分布における信頼区間の下限値と上限値を求めます。
import math
import pandas as pd
from scipy.stats import t
# CSVファイルのデータをデータフレームに読み込む
df = pd.read_csv('measurement_10.csv')
# 母分散の推定値として標本の不偏分散を求める
p_var = df.var()
# 標本の平均を求める
s_mean = df.mean()
# 自由度
deg_freedom = len(df) - 1
# 標本の数(サンプルサイズ)を求める
n = len(df)
# 95%信頼区間の下限値と上限値を求める
bottom, up = t.interval(
0.95,
deg_freedom,
loc=s_mean,
scale=math.sqrt(p_var/(n)))
# 信頼区間の下限値と上限値を出力
print(bottom)
print(up)
!出力結果!
[167.85956716]
[170.54043284]
この結果より95%の信頼度における母平均の区間推定は
167.86 ≦ 母平均 ≦ 170.54
このように推定できます。
所感
今回は統計の推定の中でも「区間推定」について学習しました。
推計統計はデータ分析するうえで欠かせないですし、
数学の知識も多く必要となるので、復習をして定着させます!
Discussion