Up

平均の差の検定

PythonサンプルスクリプトをJupyter Notebook用にまとめ圧縮ファイルt_test_dif.zipとした。ダウンロード・解凍して自由に利用されたい。

 

条件間でサンプルが独立な場合と、繰り返し条件あるいは関連のあるデータ対として得られた場合とについて、平均値の差の検定のためのプログラム例を用意してみた。

 

独立なサンプル

 

2つの畑、AB,、からそれぞれランダムに10個のメロンを採り、重さを測ったところ、表A.1の結果を得たとする。

A.1 畑ABのメロンの重さ(g)

重さ

A

    1482     1729     1703     1442     1293

    1131     1126     1357     1582     1427

B

    1962     2028     1762     1810     1822

    1393     1711     1644     2144

 

A.1のデータに対して、畑ABでメロンの重さの平均値に有意差があるかどうかの検定(独立なサンプルの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)

 

ABのデータをリストdata1data2に設定して、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)

 

リストabにダイエット前後のデータを対応のある順番に設定して、t値とp値を求めるための関数を

t, p = ss.ttest_rel(a,b)

と呼び出した。値は両側検定の場合の値である。

df = len(a) - 1

におけるdfは自由度である。

上のスクリプトを実行すると、以下の出力を得る。

t =  4.458259827740265

p-value =  0.0002695554792716037

df =  19

 

 

Up