平均値の差の検定(独立なデータ)
2つの条件からそれぞれ独立にデータをM個とN個を収集したとき、それぞれの母集団の平均値の差の検定を行うために次式
の値が算出され、自由度のt分布と比較される(岡本安晴「データ分析のための統計学入門」2009、おうふう、pp.65−74)。このt検定のためのプログラムを以下のように作成した。
================= t_test_indep.py =======================
import math
from calc_p_from_t
import p_value
X = [ 5.128,
4.000,
4.587,
4.831 ]
Y = [ 4.082,
3.571,
3.891,
3.413 ]
M = len(X)
N = len(Y)
print("M =
%d"%M)
print("N =
%d"%N)
sumX = 0.0
for i in range(0, M):
sumX += X[i]
meanX = sumX / M
sumY = 0.0
for i in range(0, N):
sumY += Y[i]
meanY = sumY / N
print("mean of X
= %f"%meanX)
print("mean of Y
= %f"%meanY)
sumSS = 0.0
for i in range(0, M):
sumSS += (X[i] - meanX)**2
for i in range(0, N):
sumSS += (Y[i] - meanY)**2
s2 = sumSS / (M + N -
2.0)
print("s^2 =
%f"%s2)
s2X_Y = (s2 / M) + (s2
/ N)
t = (meanX - meanY) /
math.sqrt(s2X_Y)
df = M + N - 2
p = p_value( t, df )
print("\nt =
%f df = %d"%(t, df))
print("Prob(x
< %f) = %f
Prob(x > %f) = %f"%(t, p, t, 1.0 - p))
================================================
上のプログラムでは、データがリストXとYに設定されている。
条件1でのデータ
5.128, 4.000, 4.587, 4.831
がリストXに設定され、条件2でのデータ
4.082, 3.571, 3.891, 3.413
がリストYに設定され、検定の計算が行われている。他のデータで検定を行うときは、リストXおよびYに検定を行うデータを設定すればよい。
上のデータの設定でプログラムを実行すると、図1のような結果になる。
図1
片側検定でのp値は
両側検定でのp値は
である。
上のプログラムにおいて、計算部分をクラス型にまとめると次のようになる。
================ calc_t_indep.py ==================
import math
from calc_p_from_t
import p_value
class Ccalc_t_indep:
def __init__(self, X, Y):
self.X = X
self.Y = Y
self.M = len(self.X)
self.N = len(self.Y)
print("M = %d"%self.M)
print("N = %d"%self.N)
def calc(self):
sumX
= 0.0
for
i in range(0, self.M):
sumX += self.X[i]
meanX = sumX / self.M
sumY
= 0.0
for i
in range(0, self.N):
sumY += self.Y[i]
meanY = sumY / self.N
print("mean of X = %f"%meanX)
print("mean of Y = %f"%meanY)
sumSS = 0.0
for
i in range(0, self.M):
sumSS += (self.X[i] - meanX)**2
for
i in range(0, self.N):
sumSS += (self.Y[i] - meanY)**2
s2 =
sumSS / (self.M + self.N - 2.0)
print("s^2 = %f"%s2)
s2X_Y = (s2 / self.M) + (s2 / self.N)
t =
(meanX - meanY) / math.sqrt(s2X_Y)
df =
self.M + self.N - 2
p =
p_value( t, df )
return t, p, df
===========================================
上のプログラムのクラス型Ccalc_t_indepを用いる形で、最初のプログラムを書き直すと次のようになる。
=========================================
from calc_t_indep import
Ccalc_t_indep as Calc_t
X = [ 5.128,
4.000,
4.587,
4.831 ]
Y = [ 4.082,
3.571,
3.891,
3.413 ]
calc_t = Calc_t(X, Y)
t, p, df =
calc_t.calc()
print("\nt =
%f df = %d"%(t, df))
print("Prob(x
< %f) = %f
Prob(x > %f) = %f"%(t, p, t, 1.0 - p))
=======================================
データの設定されたリストXとYを実引数としてクラス型Calc_t、すなわちCcalc_t_indepのオブジェクトcalc_tを生成してメソッドcalc_t.calc()を呼び出している。実行結果は図1と同じである。
プログラムは圧縮ファイルt_test_indepPrg.zipとしてまとめた。ファイル名t_test_indepPrg.zipをクリックしてダウンロードすることができる。