2
1

More than 1 year has passed since last update.

scipy.stats: 1 標本 t 検定 ttest_1samp

Last updated at Posted at 2022-06-01

scipy.stats: 1 標本 t 検定 ttest_1samp

scipy.stats.ttest_rel の項で既に書いたが,これはこれで改めて書き起こす。

1 標本 $t$ 検定は,2 つの局面で使われる。

  1. 本当に 1 つの標本の,母平均の検定として
  2. 本当は 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('人数');

output_10_0.png

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('人数');

output_12_0.png

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 の週では,母平均に差があるといえる。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1