search
LoginSignup
3

posted at

updated at

生物系のためのR入門 (10) 【2群間の平均値の差は何検定?】

0. はじめに

「イネの新品種'A'は旧来の品種'B'より生育がよさそうだ」
「マウスにある物質を与えると、与えないときより血圧が下がるようだ」

といった現象を統計的に評価しようと思い、どんな検定をかければいいかネットや書籍をしらべてみると、おそらくt 検定という言葉が目に付くでしょう。
しかし、さらに調べていくとt 検定にもStudentのt検定Welchのt検定があるらしい、パラメトリックノンパラメトリックという区分もあるようだ、と何が何だか混乱してしまう人は多いのではないでしょうか。
今回の記事では、どういうときに、どういう統計検定があるのかまとめようと思います。

0-1. この記事の到達目標

  • 2群間の平均値の差を検定する5つの検定法を知る。
  • 5つの手法の使い分けを判断するための正規性の検定・等分散性の検定を実行できる。

0-2. 初めて登場する関数

  • shapiro.test(ベクトル)
    • 正規性の検定:シャピローウィルク検定を実行します。
  • var.test()
    • 2群間での等分散性の検定:F 検定を実行します。

1. 2群とは何か、平均値の差とは何か

まず、統計でよく登場するについておさらいしておきましょう。
群とは比較したいグループの数です。冒頭の例「イネの新品種'A'は旧来の品種'B'より生育がよさそうだ」で言えば、「A品種」と「B品種」という2つのグループを比較したいので2群となります。もしも「A」「B」「C」の3品種を比較したいなら3群となります。2群には2群の、3群以上には3群以上の統計検定がありますので、群をしっかり意識しましょう。

次に平均値の差についてです。これと対比されるのは比率の差です。
比率は値の範囲が0%から100%と有限です。ある細胞の死滅率や視聴率は決して計算上決して100%を超えることはありません。
一方、平均値は特に限りはありません。イネの背丈やマウスの血圧は計算上はいくらでも大きくなることは可能です(実際にそんな値をとれるかどうかは別として)。こういった値は平均値の差として統計で扱います。

2. 5つの手法のフローチャート

「2群間の平均値の差の検定」といっても少なくとも5つの検定が存在します。
あなたの実験データにはどの検定を用いるべきか、教科書的なフローチャートに従って1.正規性があるか、2.対応があるか、3.等分散かのポイントに着目しましょう。

※ ここでは1例として「正規性の検定」「等分散性の検定」を実行するフローを記しています。ただし、これらは多重性の問題が生じるために、実行すべきではない、という主張も存在します。分野によって異なる可能性がありますので、上司や指導教官とよく相談なさることを推奨します。

2群間の平均値の差.png

3. 正規性があるか

正規性があるか、というのは群のデータの分布が、正規分布に従っているか否かと言い換えることができます。これは正規性の検定を実行することでわかります。この検定にはシャピローウィルク検定がよく用いられます。
扱うデータが正規分布であればStudent's t testなどのパラメトリック検定といわれます。一方、正規分布に従うとは言えない場合はウィルコクソンの順位和検定などのノンパラメトリック検定を行います。

しかし注意が必要なのはサンプルサイズ(群内に含まれる要素の数)が小さい場合は、母集団は正規分布していたとしても標本(群)には正規性がないと正規性の検定が判断しやすい性質があるということです。私が参考にしている図書の著者、池田郁男先生は、ノンパラメトリック検定はデータが正規分布している場合でも使ってもよい、とおっしゃっているので、フローチャート通りにノンパラメトリック検定を実行してよいと思います。ただし、私の専門の農学分野ではパラメトリック検定を見る機会が非常に多いので、ボス等に相談して判断することも重要と考えます。

Rで実践(シャピローウィルク検定)

Rにデフォルトで入っている練習データsleepを使ってみましょう。
このsleepは2種類の睡眠薬の効果を調べたもので、1列目には服用の前後で睡眠時間がどれだけ増減したか、2列目には服用した睡眠薬の種類が格納されています。2列目の睡眠薬の種類が、要因に該当し睡眠薬1と睡眠薬2の2群のデータになっていますね。

> head(sleep)
  extra group ID
1   0.7     1  1
2  -1.6     1  2
3  -0.2     1  3
4  -1.2     1  4
5  -0.1     1  5
6   3.4     1  6
> class(sleep[,2])
[1] "factor"

正規性の検定には、シャピローウィルク検定(Shapiro-Wilk test)が良く用いられます。
この検定はRにデフォルトで入っているshapiro.test()関数で実行できます。
引数には、数値のベクトルを指定します。subset()を用いて、睡眠薬1と2それぞれの睡眠時間の増減をベクトルとして取り出します。
その後shapiro.test()に指定します。

> soporific_drug1<-subset(sleep,sleep[,2]=="1")[,1]
> shapiro.test(soporific_drug1)

    Shapiro-Wilk normality test

data:  soporific_drug1
W = 0.92581, p-value = 0.4079

結果を見てみましょう。シャピローウィルク検定の帰無仮説はデータが正規分布するです。それに対してp-valueは0.4079であり有意水準5%で結論を保留することになりました。つまり、積極的に正規分布するとは言えないものの、正規分布しているとしてフローチャートを進めてよいでしょう。

睡眠薬2についても検定の結果、正規分布しているとして進めてよいでしょう。

> soporific_drug2<-subset(sleep,sleep[,2]=="2")[,1]
> shapiro.test(soporific_drug2)

    Shapiro-Wilk normality test

data:  soporific_drug2
W = 0.9193, p-value = 0.3511

4. 対応があるか

対応があるか、対応がないかは実験デザインと大きく関連しています。

群間に対応があるとは、同じヒト・個体に対して異なる処理を行う実験デザインであることをいいます。一方、対応がないとは、異なるヒト・個体に対して異なる処理を行い、群同士は完全に独立していることをいいます。

ある新薬を被験者に施して、効果をみることを考えましょう。
対応がある実験デザインの場合、対照群にはプラセボを施し、効果が完全になくなるくらいの期間を空けた後、同じ被験者に再度、新薬を施します。

対応がない実験デザインの場合、被験者集団を二つに分けてそれぞれにプラセボあるいは新薬を施します。二つの集団は、完全に異なる人物からなるので独立しているといえます。

対応あり、なし.png
※正確には対応ありの実験デザインの場合、先にプラセボを施すということにバイアスがかかってしまうかもしれないので、新薬を施してからプラセボを施すという群も必要になります。

Rで実践

先ほどでも用いていた練習データsleepは別々の人に対して試験しているということで、対応なしで進めます。

5. 等分散か

等分散か否かというのは、データのばらつきが等しいかどうかということです。
これは等分散性の検定を実行することでわかります。
等分散性の検定にもいろいろな種類がありますが、今回のような2群間の等分散性の検定にはF 検定を用います。

5-1. Rで実践(F検定)

F 検定にはデフォルトで入っているvar.test()関数を用い、第1引数と第2引数に比較したいデータの数値ベクトルを指定します。先ほどのsleepsoporific_drug1soporific_drug2が等分散かどうか検定しましょう。

> soporific_drug1<-subset(sleep,sleep[,2]=="1")[,1]
> soporific_drug2<-subset(sleep,sleep[,2]=="2")[,1]
> var.test(soporific_drug1,soporific_drug2)

    F test to compare two variances

data:  soporific_drug1 and soporific_drug2
F = 0.79834, num df = 9, denom df = 9, p-value = 0.7427
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.198297 3.214123
sample estimates:
ratio of variances 
         0.7983426 

検定結果を見てみましょう。
F 検定の帰無仮説は2群間の分散が等しいです。それに対してp-valueは0.7427であり有意水準5%で結論を保留することになりました。つまり、等分散であるとしてフローチャートを進めてよいでしょう。
以上のことから、sleepでの2群間の平均値の差を検定するためにはStudentのt 検定を実行することが適切であると考えます。

いかがだったでしょうか。5つの検定の使い分けとその判断基準についてお判りいただけたでしょうか?
あくまでも2群間の平均値の差を検定したい際は、冒頭のフローチャート通りにすれば大丈夫でしょう。3群以上になるとまた変わってくるので注意が必要です。

6.次回

今回、5つの検定方法の使い分けについて紹介しましたので、次回はそれぞれの検定方法の実行について紹介したいと思います!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3