概要
母集団が母分散σ2の正規分布に従うとき、そこから抽出されたサンプルのサンプルサイズをn、不偏分散をs2とすると、以下のχ2は自由度n−1のカイ二乗分布に従う。
(1)
このことを利用して、母分散の信頼区間を推定する。
手順
母集団から取り出したn個のサンプルから不偏分散s2を計算する。
(2)
意図する確率αを定め、自由度n−1に対するχ2値を求める。両側の境界を持つ信頼区間の場合、χ2分布は左右非対称なので、左側・右側についてχ2((1−α)/2; n−1)とを算出する。
(3)
これらを用いて信頼区間を設定する。
(4)
これをについて以下のように変形して母分散の信頼区間を得る。
(5)
例題
e-statの身長・体重に関する国民健康・栄養調査2017年のデータから、40歳代の日本国民の身長の平均171.2cm及び標準偏差6.0cmを母集団のパラメーターとして用いる(データ数は374人)。
このパラメーターから、正規分布に従う10個の乱数を発生させた結果が以下の通り。
1 |
180.9 167.5 168. 164.8 176.4 157.4 181.7 166.6 173.1 169.7 |
これらのデータの不偏分散は56.73であり、これとサンプルサイズ10から以下のχ2統計量を準備する。
(6)
一方、95%確率に対するカイ二乗分布の両側の値は以下のように得られる。
(7)
これらからχ2統計量の信頼区間を設定。
(8)
移項してσ2及びσの信頼区間を得る。
(9)
ところで、不偏分散s2 = 56.73やその平方根s = 7.53は、信頼区間の中央ではなくかなり左に寄っていることがわかる。
(10)
これはカイ二乗分布の確率密度が左右非対称であることに由来している。もし同じ不偏分散が100個のデータから得られたものだとするとカイ二乗分布の確率密度関数は左右対称に近づき、推定値は信頼区間の中央に近くなることが予想される。まずn = 100に対するχ2値は以下のようになる。
(11)
また、95%確率に対するカイ二乗分布の両側の値は以下のように得られる。
(12)
σ2およびσの信頼区間は以下のようになる。
(13)
不偏分散s2 = 56.73やその平方根s = 7.53の信頼区間の中での位置を見てみると、中央に近くなっていることがわかる。
(14)
サンプルサイズに対する信頼区間の傾向
サンプルサイズを大きくしていったときの標準偏差の信頼区間の傾向は以下の通り。母集団の標準偏差に対して上側区間の方が広く、下側区間の方が狭くなっている。サンプルサイズが大きくなるとこの差は小さくなるが、それでも若干のインバランスは残っている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt np.random.seed(0) h_pop_mean = 171.2 h_pop_std = 6 h_pop_var = h_pop_std**2 sample_size_list = range(10, 200) prob_lower = 0.025 prob_upper = 0.975 fig, ax = plt.subplots() std_cil_list = [] std_cir_list = [] for n in sample_size_list: h_smp = stats.norm.rvs(loc=h_pop_mean, scale=h_pop_std, size=n) uvar = np.var(h_smp, ddof=1) chil = stats.chi2.ppf(prob_lower, df=n-1) chir = stats.chi2.ppf(prob_upper, df=n-1) std_cil_list.append(np.sqrt((n - 1) * uvar / chir)) std_cir_list.append(np.sqrt((n - 1) * uvar / chil)) ax.plot(sample_size_list, std_cil_list) ax.plot(sample_size_list, std_cir_list) ax.plot(sample_size_list, [h_pop_std]*len(sample_size_list)) ax.set_xlabel("number of samples") ax.set_ylabel("STD of height(cm)") ax.set_title("Confidence Interval of STD") plt.show() |