scipy.stats: 1 標本 t 検定 ttest_1samp
scipy.stats.ttest_rel
の項で既に書いたが,これはこれで改めて書き起こす。
1 標本 $t$ 検定は,2 つの局面で使われる。
- 本当に 1 つの標本の,母平均の検定として
- 本当は 2 つの対応のある標本の母平均の差の検定として
後者の場合は scipy.stats.ttest_rel
を使えばよいが,対応するデータの差をとって scipy.stats.ttest_1samp
を使うこともできる。その際,差の母平均が 0 であるかの検定になる。
from scipy.stats import ttest_1samp
ttest_1samp(a, popmean, axis=0, nan_policy='propagate', alternative='two-sided')
1. 母平均の検定
検定したい母平均を popmean
で指定する。
例題: ある工業製品の重さは規格により 10g とされている。20 個の製品の重さを測定したところ,以下のようになっていた。母平均は 10g といえるか?
9.99941 10.00150 10.00078 9.99899 9.99992
10.00215 9.99807 10.00007 10.00177 9.99963
9.99982 10.00041 10.00199 9.99986 10.00006
10.00007 10.00271 10.00269 10.00150 10.00089
帰無仮説 $H_0$: 母平均は 10g である。
対立仮説 $H_1$: 母平均は 10g ではない。
x = [
9.99941, 10.00150, 10.00078, 9.99899, 9.99992,
10.00215, 9.99807, 10.00007, 10.00177, 9.99963,
9.99982, 10.00041, 10.00199, 9.99986, 10.00006,
10.00007, 10.00271, 10.00269, 10.00150, 10.00089
]
from scipy.stats import ttest_1samp
ttest_1samp(x, popmean=10)
Ttest_1sampResult(statistic=2.1828817986464135, pvalue=0.04179698621109555)
結論: $p$ 値が 0.0418 なので,有意水準 5% で帰無仮説は棄却される。すなわち,母平均は 10g ではないという結論になる。
なお,標本平均,標本標準偏差は以下の通りである。
np.mean(x), np.std(x, ddof=1)
(10.0006145, 0.0012589447335390237)
2. 母平均=0 の検定
対応のある 2 標本の母平均の差の検定は,対応するデータの差をとって母平均=0 の 1 標本検定を行うのと同じである。
例題: 東京都の新型コロナの新規感染者数は以下のようであった。
2022/05/15(日)からの一週間 3348, 2377, 3633, 4355, 4712, 3573, 3467
2022/05/22(日)からの一週間 3317, 2025, 3271, 3929, 3391, 2530, 2549
このデータは曜日で対応付けられた対応のある 2 標本データと見てよい。15日からの週と,22日からの週の母平均に差があるだろうか?
import numpy as np
w15 = np.array([3348, 2377, 3633, 4355, 4712, 3573, 3467])
w22 = np.array([3317, 2025, 3271, 3929, 3391, 2530, 2549])
dif = w15 - w22
print(np.mean(w15), np.mean(w22), np.mean(dif))
3637.8571428571427 3001.714285714286 636.1428571428571
import matplotlib.pyplot as plt
plt.plot(range(7), w15)
plt.plot(range(7), w22)
plt.legend(['05/15〜', '05/22〜'])
plt.xticks(range(7), ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'])
plt.ylabel('人数');
from scipy.stats import ttest_rel, ttest_1samp
ttest_rel(w15, w22)
Ttest_relResult(statistic=3.643603278912914, pvalue=0.010788365449744446)
import matplotlib.pyplot as plt
plt.plot(range(7), dif)
plt.legend(['差'])
plt.xticks(range(7), ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'])
plt.ylabel('人数');
ttest_1samp(dif, popmean=0)
Ttest_1sampResult(statistic=3.643603278912914, pvalue=0.010788365449744446)
ttest_rel
の結果は ttest_1samp
と同じになる。
結論: $p$ 値が 0.0108 なので,5% 有意水準のもとで帰無仮説は棄却される。すなわち,5/15 の週と 5/22 の週では,母平均に差があるといえる。