Up

平均値の差の検定(対応のあるデータ)

 

2つの条件から対応のある形でデータが収集されたとき、それぞれの条件の母集団平均値に差があるかどうかの検定を行うための次式

の値を計算し、p値を算出するプログラムを以下のように作成した(岡本安晴「データ分析のための統計学入門」2009、おうふうpp7679)。

 

================  t_test_depend.py  =====================

import math

from calc_p_from_t import p_value

 

data = [[80, 85],

        [90, 88],

        [40, 60],

        [55, 70],

        [30, 40]]

 

N = len(data)

sum = 0.0

print("N = %d"%N)

for x, y in data:

    print("x = %f   y = %f"%(x, y))

    sum += x - y

 

meanDiff = sum / N

ssum = 0.0

for x, y in data:

    ssum += (x - y - meanDiff) ** 2.0

ss = ssum / (N - 1.0)

df = N - 1

t = meanDiff / math.sqrt(ss / N)

print("t = %f  df = %d"%(t, df))

p = p_value( t, df )

print("Prob(x < %f) = %f    Prob(x > %f) = %f"%(t, p, t, 1.0 - p))

===============================================

 

2条件からの対応のあるデータの対をリストで表して、それらの対のリストとしてデータdataを設定している。他のデータの分析を行う場合は、リストdataに分析したいデータを設定すればよい。

上のプログラムにおけるデータの場合、実行結果は図1のようになる。

 

図1

 

片側検定でのp値は

となっている。両側検定のp値は

である。

 

上のプログラムの計算部分を次のようにクラス型Ccalc_t_dependにまとめた。

 

================  calc_t_depend.py  ===============

import math

from calc_p_from_t import p_value

 

class Ccalc_t_depend:

    def __init__(self, data):

        self.data = data

        self.N = len(self.data)

 

    def calc(self):

        sum = 0.0

        print("N = %d"%self.N)

        for x, y in self.data:

            print("x = %f   y = %f"%(x, y))

            sum += x - y

 

        meanDiff = sum / self.N

        ssum = 0.0

        for x, y in self.data:

            ssum += (x - y - meanDiff) ** 2.0

        ss = ssum / (self.N - 1.0)

        df = self.N - 1

        t = meanDiff / math.sqrt(ss / self.N)

        p = p_value( t, df )

        return t, df, p

========================================

 

最初のプログラムをクラス型Ccalc_t_dependを用いる形に書き直すと次のようになる。

 

=================  t_test_dependCls.py  ============

from calc_t_depend import Ccalc_t_depend as Ccalc_t

 

data = [[80, 85],

        [90, 88],

        [40, 60],

        [55, 70],

        [30, 40]]

 

calc_t = Ccalc_t(data)

t, df, p = calc_t.calc()

print("t = %f  df = %d"%(t, df))

print("Prob(x < %f) = %f    Prob(x > %f) = %f"%(t, p, t, 1.0 - p))

========================================

 

上のプログラムではクラス型Ccalc_t_depend、すなわちクラス型Ccalc_tのオブジェクトcalc_tdataを実引数として作成して、メソッドcalc_t.calc()を呼び出している。実行結果は、最初のプログラムと同じく図1のようになる。

 

プログラムは圧縮ファイルt_test_repPrg.zipとしてまとめた。ファイル名t_test_repPrg.zipをクリックしてダウンロードできる。

 

 

Up