見出し画像

【統計ソフトR】2群比較―対応のあるt検定―

今回は、対応のある2群の平均値差を求めるt検定を行ないます。
対応のある2群とは、例えば同一の被験者に対して2つの異なる実験条件下で従属変数の測定をしている場合のように、データが対になっている2群のことを指します。

対応のない2群の平均値差検定については次の記事を参照してください。

0. データの読み込み

Rにデフォルトで入っている「sleep」というデータセットを使って説明していきます。
「sleep」は10人の被験者に2種類の睡眠薬を投与した時に増加した睡眠時間のデータです。同じ人が睡眠薬①を使って増加した睡眠時間と睡眠薬②を使って増加した睡眠時間のデータなので、対応のある2群です。
まずはデータを読み込んでください。

data(sleep)

中身を見てみると次のようなデータであることがわかります。

画像1

「extra」が増加した睡眠時間、「group」は睡眠薬①と睡眠薬②のどちらを投与したのか、「ID」は被験者番号です。


「group」によって群分けします。
方法①

medicine1<-sleep[1:10,1]
medicine2<-sleep[11:20,1]

これは「medicine1」に「sleep」データの1行目から10行目の1列目「extra」の数値を格納し、「medicine2」に11行目から20行目の1列目「extra」の数値を格納せよというコードです。
正しく格納されると次のようなデータが作成されたことがわかります。

格納

方法②
もしくは「subset」関数で2群に分ける方法もあります。行数が多い時はこちらの方が便利でしょう。

medicine1<-subset(sleep,group=="1")
medicine2<-subset(sleep,group=="2")


1. 正規性の確認

t検定をするには、データが正規分布しているか=正規性があるかを確認しなければなりません。正規性があれば普通に対応のあるt検定をすればいいのですが、正規性が無い場合Wilcoxonの符号付順位和検定という方法を取ることになります。(後述します。)
正規性はShapiro-Wilk検定によって確めます。

方法①で群分けした場合
shapiro.test(medicine1)
shapiro.test(medicine2)
方法②で群分けした場合
shapiro.test(medicine1$extra)
shapiro.test(medicine2$extra)

どちらもp値が0.05を大きく超えているので、どちらのデータにも正規性が確認されました。これで対応があるt検定が普通にできます。


2. 対応のある2群のt検定

「medicine1」と「medicine2」の2群間で「extra」の平均値差があるかどうかを検定します。

方法①で群分けした場合
t.test(x=medicine1,y=medicine2,paired=T)
方法②で群分けした場合
t.test(x=medicine1$extra,y=medicine2$extra,paired=T)

画像3

方法①でも②でも同じ結果が返ってきます。
「p-value=0.002833」がp値です。p<0.01なので、睡眠薬①と睡眠薬②の間で平均睡眠増加時間に差があるということがわかりました。


3. Wilcoxonの符号付順位和検定

Shapiro-Wilk検定で正規性が確認できなかった場合どうするか、この場合はWilcoxonの符号付順位和検定をすることになります。正規分布していない2群データの平均値差比較はこれで行ないます。
先ほどの「sleep」データが正規分布していなかったと仮定して、このデータでやってみます。

「exactRankTests」パッケージの「wilcox.exact」関数を使います。

install.packages("exactRankTests") #パッケージのインストール
library(exactRankTests) #パッケージの呼び出し
wilcox.exact(medicine1$extra,medicine2$extra,paired=TRUE)

画像4

p<0.01で有意ですね。2群に平均値差があるということができます。




対応のあるt検定は以上です。今回はここまで。
別の記事で基本統計量の算出、相関と検定、分散分析、回帰分析などを解説しています。

この記事が気に入ったらサポートをしてみませんか?