始めに
2つのサンプルのデータが異なることを客観的に示したいことはよくあることです。
しかし、これらの検定方法には実は複数の手法があります。
また、それぞれに前提条件の確認が必要です。
本稿では、適した検定の選択方法と、これらのRでの実行例を示します。
手順1. 正規性の確認
まず、2つのサンプルについて正規性が認められるかを確認する必要があります。
これによって最終的に使う検定方法を変える必要があるためです。
また、この正規性を確認する検定ですが、サンプルサイズ(各データ数)によって、
Shapiro-Wilk検定、もしくは、Kolmogorov-Smirnov検定を使い分ける必要があります。
1-1. 各サンプルサイズが2000以下の場合
Shaprio-Wilk検定を行います。shapiro.test()を使います。
帰無仮説は正規分布に従うと置いているので、下記例のP値だと0.05以上であり
帰無仮説を棄却できないため、正規分布に従っているということになります。
> set.seed(1234)
> testData <- c(rnorm(1000, mean=100, sd=10))
> shapiro.test(testData)
Shapiro-Wilk normality test
data: testData
W = 0.99737, p-value = 0.1053
1-2. 各サンプルサイズが2000を超える場合
Kolmogorov-Smirnov検定を行います。ks.test()を使います。
2つ目の引数に"pnorm"と指定します。こちらも帰無仮説は正規分布に従うと置いています。下記例のP値だと0.05以上で棄却できないため、正規分布に従っているということになります。
> set.seed(1234)
> testData2 <- c(rnorm(4000, mean=100, sd=10))
> ks.test(testData2, "pnorm", mean=mean(testData2), sd=sd(testData2))
One-sample Kolmogorov-Smirnov test
data: testData2
D = 0.0091132, p-value = 0.8939
alternative hypothesis: two-sided
手順2. 2つのサンプルの差の検定の実施
2-1. 正規性が認められた場合
Welchのt検定を行います。t.test()を使います。
帰無仮説は各データの平均値が等しいことと置いています。下記例ではp値が0.05未満で棄却されており、等しくないことが示されています。
> testData3a <- c(rnorm(4000, mean=100, sd=10))
> testData3b <- c(rnorm(4000, mean=110, sd=10))
> t.test(testData3a, testData3b)
Welch Two Sample t-test
data: testData3a and testData3b
t = -45.563, df = 7997.2, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-10.532282 -9.663403
sample estimates:
mean of x mean of y
100.0181 110.1160
細かいことですが、Welchのt検定はStudentと違い、等分散性を仮定しません。
F検定で等分散性を確認後にStudentのt検定を行うことを、学ばれた方も多いと思います。しかし、これは望ましくないと主張している先生方がいらっしゃいますので、現在では避けたほうが良いかもしれません。
2-2. 正規性が認められなかった場合
Brunner-Munzel検定を行います。lawstatライブラリのbrunner.munzel.test()を使います。この手法は正規性が認められない場合の、最も有力な検定手法であることが知られています。
なお、両群から一つずつ値を取り出したとき,どちらが大きい確率も等しいという帰無仮説を置いています。下記の場合だと、帰無仮説が棄却されているので、等しくないことが示されています。
> testData4a <- c(rgamma(4000, shape=5, scale=100))
> testData4b <- c(rgamma(4000, shape=7, scale=100))
> brunner.munzel.test(testData4a, testData4b)
Brunner-Munzel Test
data: testData4a and testData4b
Brunner-Munzel Test Statistic = 39.097, df = 7980.3, p-value < 2.2e-16
95 percent confidence interval:
0.7089661 0.7310267
sample estimates:
P(X<Y)+.5*P(X=Y)
0.7199964
注意点として、各々で10以上のデータが必要とライブラリ開発者が言っていますので、お気をつけください。
また、Welchのt検定を保険的意味合いで一緒にやるのも悪くないようです。経験的にではありますが、ある程度正規性を持っていなくても検定として機能することが知られているようですので。
注意事項
統計学的検定法で有意であったからといって、現実的に意味のある差であるかどうかは別問題です。そのため、ヒストグラムなどによる可視化を行い、分布差の状況を確認することをおすすめします。
参考文献
次の資料を参考にさせて頂きました。
- Power comparisons of Shapiro-Wilk, Kolmogorov-Smirnov, Lilliefors and Anderson-Darling tests
- 井口先生のホームページ: 等分散検定から t検定,ウェルチ検定,U検定への問題点
- The Wilcoxon–Mann–Whitney test under scrutiny
- 奥村先生のホームページ: Brunner-Munzel検定
- The Nonparametric Behrens‐Fisher Problem: Asymptotic Theory and a Small‐Sample Approximation
- マン・ホイットニーの U 検定と不等分散時における代表値の検定法