Pythonを利用して、1標本の母比率の検定を行ってみます。
母比率の検定
母集団からランダムにnのサンプルを抽出し、条件Aに該当するサンプルの数xの分布は二項分布B(n, p)と考えることができます。pは母集団における条件Aに該当する比率です。
条件Aは例えば、「車を所有している」、「選挙で投票した」など、該当、非該当のどちらかとなる条件です。
二項分布は正規分布で近似できるため、正規分布による検定を考えることができます。帰無仮説(p = p0)の下で、以下のzは近似的に標準正規分布に従います。
$$ z=\frac{\hat{p} – p_{0}}{\sqrt{p_{0}(1 – p_{0})/n}}$$
ただし
$$ \hat{p}=\frac{x}{n} $$
です。
例題
全国の20代~60代の人の中からランダムに1000人抽出し、「海外に行ったことはありますか」という質問をしたところ535人が「行ったことがある」と答えました。
「全国の20代~60代の半数以上が海外に行ったことがある」といえるかどうか考えます。
帰無仮説p = 0.5の下で、有意水準5%で片側検定を行います。
Python実装
動作確認したpython、モジュールのバージョンは以下のとおりです。
python 3.6.0
scipy 1.2.0
以下のとおり実装することで、正規分布による検定が可能です。
from scipy import stats
import math
x = 535 #該当数
n = 1000 #標本サイズ
p = x/n #標本比率
p0 = 0.5 #母比率
z_value = (p - p0) / math.sqrt(p0 * (1 - p0) / n)
alpha = 0.05 #有意水準
border = stats.norm.ppf(1 - alpha)
p_value = 1 - stats.norm.cdf(z_value)
print("検定統計量z値", ":", z_value)
print("境界値", ":", border)
print("p値", ":", p_value)
実行結果は以下のとおりです。
検定統計量z値 : 2.2135943621178678
境界値 : 1.6448536269514722
p値 : 0.013428347753762115
片側5%の検定においては、z値>境界値のため、帰無仮説が棄却され、「全国の20代~60代の半数以上が海外に行ったことがある」といえます。p値は1.34%という結果でした。
まとめ
正規分布による検定をPythonで行う場合は、検定統計量を計算する必要があるようですが、本記事の方法でできました。