t 検定

t 検定は、正規分布に従う 2 つの実験群の平均値を比較し、両者に有意差が存在するかどうかを検定する方法である。t 検定は、2 つの実験群の分散が等しいかどうかによって、計算が異なる。そのため、分散が予めわかっている場合はそれに合わせて t 検定を行い、そうでない場合は、F 検定を利用して、先に分散が等しいかどうかを検定する必要がある。

2 つの母集団の分散が同じときの t 検定 (R)

検定する 2 つの実験群の分散が同じであるとき、次の式に基いて共分散 ν を求める。

\[ \nu = \frac{\sum (x_{1i}-\bar{X}_{1})+\sum (x_{2i}-\bar{X}_{2})}{(n_{1}-1)+(n_{2}-1)} \]

次に、共分散 ν を利用して、t 統計量を求める。

\[ t_{0}= \frac{\bar{X}_{1}-\bar{X}_{2}}{\sqrt{\nu \left( \frac{1}{n_{1}}+\frac{1}{n_{2}} \right)}} \]

このとき、t0>t(n1-1+n2-1,α)ならば、両者の平均に危険率 α において差が認められることになる。t(f, &alpha) は自由度 f の t 分布を表す。

R では t.test 関数を利用して t 検定を行うことができる。

x <- c(20.5, 5.3, 12.4, 2.9, 12.3, 6.7, 2.1, 13.1)
y <- c(2.4, 16.1, 21.0, 10.9, 20.6, 25.7, 24.2, 18.0)

t.test(x, y, var.equal = TRUE)
## 	Two Sample t-test
## 
## data:  x and y
## t = -2.2788, df = 14, p-value = 0.03888
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -15.4324621  -0.4675379
## sample estimates:
## mean of x mean of y
##    9.4125   17.3625

x と y のデータで計算された t 値(-1.1844)が、帰無仮説の信頼区間(-4.30~1.07)に含まれる。そのため、帰無仮説を棄却することはできない。つまり、危険率 5% において、両者に有意差が認められない、ということになる。

2 つの母集団の分散が同じでないときの t 検定 (R)

検定する 2 つの実験群の分散が異なるとき、t 統計量は以下のように求める。

\[ t_{0}=\frac{\bar{X}_{1}-\bar{X}_{2}}{\sqrt{\frac{\hat{\sigma}^{2}_{1}}{n_{1}}+\frac{\hat{\sigma}^{2}_{1}}{n_{1}}}} \]

t0 統計量が自由度 φ の t 分布に従うことが知られている。ただし、φは次のように定義されている。

\[ \phi = \frac{\left(\frac{\hat{\sigma}^{2}_{1}}{n_{1}}+\frac{\hat{\sigma}^{2}_{2}}{n_{2}} \right)^{2}}{\frac{\hat{\sigma}^{2}_{1}}{n_{1}^{2}(n_{1}-1)}+\frac{\hat{\sigma}^{2}_{2}}{n_{2}^{2}(n_{2}-1)} } \]

t0>t(φ;α)ならば、危険率 α において両者の平均値に有意差がある、と判定する。

x <- c(20.5, 5.3, 12.4, 2.9, 12.3, 6.7, 2.1, 13.1)
y <- c(1.4, 16.1, 31.0, 10.9, 20.6, 15.7, 24.2, 28.0)

t.test(x, y, var.equal = FALSE)
## 	Welch Two Sample t-test
## 
## data:  x and y
## t = -2.2376, df = 12.026, p-value = 0.04495
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -17.909469  -0.240531
## sample estimates:
## mean of x mean of y
##    9.4125   18.4875

t 値 1.5829 が帰無仮説の信頼区間(-0.96~8.61)に含まれるため、帰無仮説を棄却することはできない。よって、x と y の平均値は危険率 5% において有意差が認められない。

従属な 2 標本 t 検定 (R)

以下の表のように、ある処理群に対して、薬剤投与前と投与後において、ある形質の差が認められたかどうかを検定する場合は、対応あり(従属である)という。

個体薬剤投与前の心拍数薬剤投与後の心拍数
個体 1591585
個体 2615590
個体 3602583
個体 4618594
個体 5596589

このようなデータの場合、両者の差を計算し、その差と 0 に有意差が存在するかどうかを検定する。

before <- c(591, 615, 602, 618, 596)
after  <- c(585, 590, 583, 594, 589)

t.test(before, after, paired = TRUE)
## 
##         Paired t-test
## 
## data:  before and after
## t = 3.9595, df = 4, p-value = 0.01669
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   4.840301 27.559699
## sample estimates:
## mean of the differences 
##                    16.2 

diff <- after - before
t.test(diff, rep(0, 5), var.equal = FALSE)
## 	Welch Two Sample t-test
## 
## data:  diff and rep(0, 5)
## t = -3.9595, df = 4, p-value = 0.01669
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -27.559699  -4.840301
## sample estimates:
## mean of x mean of y
##     -16.2       0.0

検定結果 t = 3.9595 が帰無仮説の信頼区間(4.84~27.56)に含まれないため、帰無仮説を棄却することができる。 よって、薬剤の投与前と投与後とでは有意差が認められることになる。

2 つの母集団の分散が同じときの t 検定 (Python)

検定対象となる 2 つの母集団が事前にあるいは F 検定の結果によりその分散が等しいとわかった場合、t 検定は ttest_ind メソッドを利用する。検定結果は配列として返され、それぞれ t 値と p 値となる。

import numpy as np
from scipy import stats

a = np.array([20.5, 5.3, 12.4, 2.9, 12.3, 6.7, 2.1, 13.1])
b = np.array([2.4, 16.1, 21.0, 10.9, 20.6, 25.7, 24.2, 18.0])

res = stats.ttest_ind(a, b)
res
## (array(-2.2788025959717206), 0.038880267219847213)

2 つの母集団の分散が同じでないときの t 検定 (Python)

検定対象となる 2 つの母集団が事前にあるいは F 検定の結果によりその分散が等しくないとわかった場合、t 検定は ttest_ind メソッドに equal_var = False をつけてを利用する。

import numpy as np
from scipy import stats

a = np.array([20.5, 5.3, 12.4, 2.9, 12.3, 6.7, 2.1, 13.1])
b = np.array([1.4, 16.1, 31.0, 10.9, 20.6, 15.7, 24.2, 28.0])

res = stats.ttest_ind(a, b, equal_var = False)
res
## (array(-2.237603488856483), 0.044946136933658239)

従属な 2 群間 t 検定 (Python)

検定対象となる 2 つの母集団が対応している場合に ttest_rel メソッドを利用して対応のある t 検定を行う。例えば、ラットに薬剤を投与し、投与前と投与後の体重を測定したデータでは、それぞれのラットに対して投与前と投与後のデータがあるので、投与前と投与後のデータが対応しているといえる。

この検定は投与前と投与後の差が 0 かどうかを検定することに等しい。

import numpy as np
from scipy import stats

before = np.array([591, 615, 602, 618, 596])
after  = np.array([585, 590, 583, 594, 589])

res = stats.ttest_rel(before, after)
res
## (array(3.959472105576538), 0.016685020373950636)

res = stats.ttest_ind(diff, np.array([0, 0, 0, 0, 0]), equal_var = False)
res
## (array(-3.959472105576538), 0.016685020373950636)