平均の差の検定
PythonサンプルスクリプトをJupyter Notebook用にまとめ圧縮ファイルt_test_dif.zipとした。ダウンロード・解凍して自由に利用されたい。
条件間でサンプルが独立な場合と、繰り返し条件あるいは関連のあるデータ対として得られた場合とについて、平均値の差の検定のためのプログラム例を用意してみた。
2つの畑、AとB,、からそれぞれランダムに10個のメロンを採り、重さを測ったところ、表A.1の結果を得たとする。
表A.1 畑AとBのメロンの重さ(g) |
|
畑 |
重さ |
A |
1482 1729 1703 1442 1293 1131 1126 1357 1582 1427 |
B |
1962 2028 1762 1810 1822 1393 1711 1644 2144 |
表A.1のデータに対して、畑AとBでメロンの重さの平均値に有意差があるかどうかの検定(独立なサンプルのt−検定)を行うためのPythonスクリプトを以下のように用意した。
import scipy.stats as ss
data1 = [
1482, 1729, 1703, 1442, 1293,
1131, 1126, 1357, 1582, 1427
]
data2 = [
1962, 2028, 1762, 1810, 1822,
1393,
1711, 1644, 2144
]
t, p = ss.ttest_ind(data1, data2)
print('t = ', t)
print('p-value = ', p)
df = len(data1) + len(data2) - 2
print('df = ', df)
畑AとBのデータをリストdata1とdata2に設定して、t値とp値を求める関数を
t, p = ss.ttest_ind(data1, data2)
と呼び出している。p値は、両側検定の場合の値である。
上のスクリプトを実行すると、以下の出力を得る。
t = -3.8452447138622796
p-value = 0.001296996715686378
df = 17
df = 17は自由度である。
ダイエット前後の体重として表B.1のデータを得たとする。
表B.1 ダイエット前後の体重[前、後](Kg) |
[73, 70] [68, 61] [71, 68] [68, 62] [61, 60] [73, 70] [80, 81] [71, 72] [75, 65] [59, 52] [89, 85] [68, 71] [96, 91] [88, 83] [79, 78] [68, 69] [71, 65] [66, 64] [72, 69] [78, 72] |
ダイエット前後で差があったかどうかの検定(繰り返し条件/対応のある条件のt−検定)のため、次のスクリプトを用意した。
mport scipy.stats as ss
data = [
[73,
70], [68, 61], [71, 68], [68, 62], [61, 60],
[73,
70], [80, 81], [71, 72], [75, 65], [59, 52],
[89,
85], [68, 71], [96, 91], [88, 83], [79, 78],
[68,
69], [71, 65], [66, 64], [72, 69], [78, 72]
]
a = []
b = []
for v1, v2 in data:
a.append(v1)
b.append(v2)
t, p = ss.ttest_rel(a,b)
print('t = ', t)
print('p-value = ', p)
df = len(a) - 1
print('df = ', df)
リストaとbにダイエット前後のデータを対応のある順番に設定して、t値とp値を求めるための関数を
t, p = ss.ttest_rel(a,b)
と呼び出した。p値は両側検定の場合の値である。
df = len(a) - 1
におけるdfは自由度である。
上のスクリプトを実行すると、以下の出力を得る。
t = 4.458259827740265
p-value = 0.0002695554792716037
df = 19