2群の検定 with R
今まで「Scala Days」というタイトルでScalaについて主に書いてたんだけど最近python使わなくちゃいけなくなったし統計に関することもメモりたいからタイトル名を「Statistical Programming」へと変更。というわけでとりあえず統計の復習を少しばかり。
2つのグループに関するデータがあり、グループ間に有為な差が見受けられるか否かを調べたい。そういったケースのプロセスについて。まずその2つのグループが独立した異なるグループ(独立2群)かそれとも単一のグループだが異なる時期に実験を行ったもの(関連2群)なのか判断する必要がある。
独立2群の例;A組の生徒は3ヶ月間補習を受ける。B組の生徒は補習を受けない。3ヶ月後に両方の生徒は試験を受けその試験結果に有為な差がないかどうか調べる
関連2群の例;A組の生徒はまず試験を受ける。その後3ヶ月間特別な補習を受ける。補習が終了したらA組の生徒は再び試験を受け、最初の試験結果と補習後の試験結果に有意な差が見受けられるかを調べる
関連2群の場合、
(補習後の試験結果)ー(補習前の試験結果)
をした後に1標本t検定を行う。
> data=read.csv("試験.csv",header=TRUE)
> data
om am cs
1 94 97 96
2 81 94 99
3 85 89 86
4 81 81 77
5 79 85 80
6 96 99 99
7 67 67 79
8 96 100 99
9 70 77 81
10 82 84 90
11 82 92 97
12 80 98 95
13 89 94 98
14 75 88 93
15 91 94 95
16 57 86 82
17 95 92 99
18 90 100 99
19 86 99 98
20 89 85 89
21 73 92 96
22 85 73 68
23 97 97 97
24 85 98 87
25 80 84 88
26 99 99 97
27 87 93 89
28 91 90 94
29 88 98 98
30 100 100 99
31 87 76 96
32 96 96 94
33 84 96 94
34 78 100 97
35 98 98 97
36 48 55 59
37 58 83 84
38 91 100 94
39 89 90 95
40 67 76 83
41 69 86 98
> origin=data$om
> result=data$cs
> differ=result-origin
> t.test(differ)
One Sample t-test
data: differ
t = 5.4028, df = 40, p-value = 3.256e-06
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
4.885244 10.724512
sample estimates:
mean of x
7.804878
p-valueは0.05より明らかに小さいから補習の前後に有為な差があると考えられる。
翻って独立した2群である場合、まずコルモゴロフ・スミルノフ検定
を使って正規分布かどうかを調べてみる。帰無仮説は「標本分布が正規分布に従う」なのでp-valueが十分に大きかったら正規性が保証される。
>ks.test(origin,"pnorm",mean=mean(origin),sd=sd(origin))
One-sample Kolmogorov-Smirnov test
data: origin
D = 0.124, p-value = 0.5545
alternative hypothesis: two-sided
警告メッセージ:
In ks.test(origin, "pnorm", mean = mean(origin), sd = sd(origin)) :
コルモゴロフ・スミノフ検定において、タイは現れるべきではありません
ちなみに上記の例のようにデータに同値の値が存在している場合p-valueが正しく算出されないことがあるため別のパッケージをダウンロードしたほうがいい。
もしここで正規性に疑いがあると判断出来る場合、t検定ではなくWilcoxonの順位和検定(Mann-WhitneyのU検定)によって2群の相違を調べる。この手法はt検定とは異なりノンパラメトリック。帰無仮説は「両群が同じ母集団から抽出された」。
> wilcox.test(origin,result)
Wilcoxon rank sum test with continuity correction
data: origin and result
W = 479, p-value = 0.0008022
alternative hypothesis: true location shift is not equal to 0
警告メッセージ:
In wilcox.test.default(origin, result) :
タイがあるため、正確な p 値を計算することができません
p-valueは十分小さく仮説は棄却できる。よって2群の間に有為な差が見受けられる。
次に、2群の分散が極端に異なる場合を避けるためにF検定を行う(分散分析で登場するF検定とは計算方法が異なる)。帰無仮説は「二群の母分散は等しい」であり、p-valueが十分大きかったら等分散性が保証される。
> var.test(origin,result)
F test to compare two variances
data: origin and result
F = 1.7627, num df = 40, denom df = 40, p-value = 0.07678
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.9399903 3.3053492
sample estimates:
ratio of variances
1.762667
0.07678と十分大きいため仮説は採択される。
※t検定において等分散性はさほど影響を及ぼさないことがわかっているらしいっす
最後に正規性が保証されている場合、Welchのt検定を行う。
> t.test(origin,result)
Welch Two Sample t-test
data: origin and result
t = -3.3155, df = 74.335, p-value = 0.001417
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-12.495062 -3.114694
sample estimates:
mean of x mean of y
83.29268 91.09756
alternative hypothesisとは帰無仮説が棄却された時に得られる対立仮説のこと。p-valueが十分小さい時にこの対立仮説を採用する。
ノンパラメトリックな検定は使い勝手がいいけれどその分適切に用いられたパラメトリックな検定より正確性は落ちるらしいからできることならパラメトリックな検定を使用出来る時は使用しよ