見出し画像

【第19回】母平均の検定-後編

母集団から無作為に抽出した標本をもとに、母集団の平均に関する仮説が正しいかどうかを判断する母平均の検定について考えていきます。
情報Iの授業でPythonを活用しながら学んでいく方法を今回も考えてみたいと思います。

前回考えておりましたz検定は、母集団の特徴量である母平均を推測する仮説検定を行っていながら、母分散が既知のものとして検定を行っていた点が不自然でした。
そこで、より現実的な問題を考えるときは母分散が未知である時の母平均に関する検定であるt検定といわれる手法が一般によく使われます。今回はこちらについてまとめてみたいと思っています。

t検定

正規分布に従う母集団から抽出したサイズの小さい標本について、標本平均$${ \overline{X} }$$の確率分布を表すグラフは、正規分布のグラフに似たような山型の曲線になります。この確率分布をt分布といいます。
標本が十分大きければ、これは正規分布に近づきます。

図1: t分布

もう少しだけ詳しく

母平均$${ m }$$と標本平均$${ \overline{X} }$$のずれを標本分散$${ S^2 }$$と標本の大きさ$${ n }$$を考慮に入れて算出した確率変数

$$
T = \frac{\overline{X} - m}{\frac{S}{\sqrt{n-1}}}
$$

の従う確率分布がt分布です。

情報Iではもちろんここまで踏み込まず、「母集団が正規分布に従っているとみなせるとき、抽出したサイズの小さい標本のデータから母平均に関する仮説検定を行うときはt分布を利用する」ということだけで十分だと考えます。
なお、このような仮説検定を1標本のt検定と言います。

今回考える問題

t分布について細かく説明していきますと、もはや高校数学の範囲ではおさまらないので、ここからはコンピュータを活用してt検定を行う方法に焦点化していきたいと思います。今回は次のような問題を考えます。

例題
ある会社は、自社の作っている500mLのペットボトルの飲料に正しい容量が入っているかを調べるために、10本を無作為に抽出して測ったところ、次のような結果となった。
500.1, 501.4, 499.8, 499.5, 502.3, 503.0, 501.4, 500.6, 502.0, 499.9
この会社の出しているペットボトル飲料の容量の母平均は500.0mLと等しくないと判断してよいか。有意水準5%で検定しなさい。

「統計学の図鑑」(涌井良幸・涌井貞美 著/技術評論社)p.98 例1を改題

帰無仮説と対立仮説

まずは無作為に抽出した10本(大きさ10の標本)の平均を求めたいと思います。

import numpy as np
pet = np.array([500.1,501.4,499.8,499.5,502.3,503.0,501.4,500.6,502.0,499.9])
np.mean(pet)

これを実行しますと501.0が出力されます。すなわち、標本平均は501.0です。この結果をもって、母平均が500.0に等しくないと判断できるかどうかを判断したいわけです。すなわち、母平均の真の値を$${ m }$$としたとき、

[帰無仮説] $${ m = 500 }$$  [対立仮説] $${ m \neq 500 }$$

として、有意水準5%で両側検定を行います。

p値

それでは、帰無仮説の仮定のもとで、現在起こっていることよりも極端なことが起こる確率であるp値を求めます。scipy.statsのttest_1sampメソッドを利用します。これは、

stats.ttest_1samp(標本の配列, popmean = 帰無仮説のもとでの母平均)

という使い方をします。出力値には実行後に整理することにしましょう。まずはコードを書いて実行してみます。

from scipy import stats
stats.ttest_1samp(pet, popmean = 500)

次が出力されます。

Ttest_1sampResult(statistic=2.643402663188409, pvalue=0.0267640719920121)

先にこの問題の結論を出しましょう。出力結果のpvalue=で示されている値がp値であり、およそ0.027であることが分かります。これが0.05を下回っていますので、帰無仮説は棄却されます。従いまして、この会社の出しているペットボトル飲料の容量の母平均は500.0mLと等しくないと判断できると結論づけられます。情報Iの授業でデータ分析を行うという観点ではここまでで十分だと考えます。

t値

さて、ここからは少し踏み込んだ内容を書いていきます。ttest_1sampメソッドの出力値のもう一方、statistic=で示されている方の値に注目します。
これはt値という検定統計量で、t検定において帰無仮説を棄却するかどうかを判断するときの指標になる値になっています。
これは冒頭で述べた確率変数$${ T }$$の値のことで、標本平均の値を$${ \overline{x} }$$、標本分散の値を$${ s^2 }$$としたときの次の値を言います。

$$
t = \frac{\overline{x} - m}{\frac{s}{\sqrt{n-1}}}
$$

母平均と標本平均のずれ(差)を、標本分散と標本の大きさを考慮に入れて算出した値であり、母平均と標本平均の値が等しいときに0になります。
前回と同様に、パーセント・ポイント関数を使って、有意水準5%で両側検定するのときの帰無仮説を棄却する基準値を求めてみたいと思います。

標本の大きさが$${ n }$$であるとき、stats.t.ppf(p, n-1)の形で用います。pの値については、正規分布のときと同じ考え方です。

stats.t.ppf(0.975, 9)

これを実行すると、2.2621571627409915が出力されます。t値がこの値を超えたときに帰無仮説を棄却するという意味です。今回考えた問題ではおよそ2.64でしたので、帰無仮説が棄却されたわけです。

不偏推定量

ここで、z値とt値を比較してみたいと思います。
母平均$${ m }$$、母分散$${ \sigma^2 }$$の正規分布に従う母集団から大きさ$${ n }$$の標本$${ (X_1, X_2, \ \cdots \ , X_n) }$$を無作為抽出したときの標本平均が$${ \overline{X} }$$、標本分散が$${ S^2 }$$だったとします。ここで、

$$
S^2 =\frac{1}{n}\{ (X_1 - \overline{X})^2 + (X_2 - \overline{X})^2 + \ \cdots \ + (X_n - \overline{X})^2 \}
$$

です。このときのz値は、

$$
Z = \frac{\overline{X} - m}{\frac{\sigma}{\sqrt{n}}}
$$

の値でした。一方、今回考えたt値は、$${ U=\sqrt{\frac{n}{n-1}}S }$$とおくと、

$$
T = \frac{\overline{X} - m}{\frac{S}{\sqrt{n-1}}}  = \frac{\overline{X} - m}{\sqrt{\frac{n}{n-1}}S \cdot \frac{1}{\sqrt{n}}} = \frac{\overline{X} - m}{\frac{U}{\sqrt{n}}}
$$

の値となります。
両方の式を比較してみると、$${ \sigma }$$と$${ u }$$が対応していることが分かります。
すなわち、未知の母分散$${ \sigma^2 }$$を、

$$
U^2 = \frac{n}{n-1} S^2 = \frac{1}{n-1} \{ (X_1 - \overline{X})^2 + (X_2 - \overline{X})^2 + \ \cdots \ + (X_n - \overline{X})^2 \}
$$

の値を使って推定しているということです。
この$${ U^2 }$$を不偏分散といいます。
それではなぜ母分散の推定量として標本分散$${ S^2 }$$ではなく、不偏分散$${ U^2 }$$を用いるのでしょうか。それは次の意味で不偏分散の方が推定量として「良い性質」を持つからです。

標本平均

標準正規分布に従う母集団から大きさ100の標本を無作為に抽出し、その標本平均、標本分散、不偏分散を調べる操作を10000回行って、ヒストグラムをかいてみます。

標本平均の場合は次のようなコードを書いて、実行してみました。

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

m  = np.array([])
for i in range(10000):
    samp = np.random.normal(0, 1, 100)
    m = np.append(m, np.mean(samp))

plt.figure(figsize=(6,4))
plt.hist(m, bins = 100, color="g", alpha=0.6)
plt.grid()
plt.show()

print("標本平均の平均:", np.mean(m))
図2: 標本平均の分布

標本平均の平均はおよそ0.0003で、母平均の0とほとんど等しい値になります。実際に「標本平均の平均は母平均に等しい」ことは成り立ち、これは文字式を利用して容易に証明することができます。
標本平均のような母集団の統計量を推定する値を推定量といい、母平均のような母集団の特徴量を母数といいます。ここで見た、推定量の平均が母数に等しいという性質を不偏性といい、不偏性を持つ推定量をその母数の不偏推定量といいます。
つまり、標本平均は母平均の不偏推定量であると言えます。

標本分散と不偏分散

標本分散、不偏分散についても同様のプログラムを実行してみます。
Numpyのvarメソッドはデフォルトでは標本分散を出力します。
np.var(配列, ddof = 1)のように、ddof = 1と指定することで不偏分散が出力できます。実行結果は、次の通りです。

図3: 標本分散・不偏分散の分布

標本分散の平均はおよそ0.9902、不偏分散の平均は0.9996でどちらも母分散の1に近いですが、標本分散はそれよりやや小さい値になります。
こちらも文字式を使って計算することにより、標本分散は母分散の不偏推定量にはなっておらず、不偏分散は母分散の不偏推定量であることが示すことができます。
上で述べていた不偏分散の方が推定量として「良い性質」を持つというのはこのことです。

まとめ

今回は「母分散が未知の場合の母平均の検定」についてまとめました。現実的には母分散が既知の状況はほとんどないため、現実的な問題解決の場面においてはt検定が使われることが多くあります。ただ、その理論的な背景をきちんと理解するのはなかなか難しく、ここは高等学校の数学Bの範囲も超えた内容になってしまいます。

情報Iの授業においてデータ分析を行うという観点では、本記事の前半4割程度(p値のあたりまで)になると思われます。それでも、仮説検定の基本的な考え方に基づき、ttest_1sampメソッドを利用してp値を求め、仮説が正しいかどうかを判断することを学ぶ意義はあると考えています。
データを批判的に考察し、現実的な問題をコンピュータを活用しながら解決していく過程を学ぶ1つの題材として、今度も実践を重ねながら研究を続けて参ります。

最後までお読みいただき、ありがとうございました。