Rで3群以上の検定 ー分散分析(ANOVA, aov関数)、多重比較(Tukey法, tukeyHSD関数)ー

Rでプレゼンテーション

統計的検定は、グループ間の違いを明らかにするための重要なツールです。
二つのグループを比較する方法とそのRのコードについて、以前紹介させていただきました。

対応のある2群のt検定 ー箱ひげ図, ggpairedー
例えば、同じ人が睡眠薬AとBを服用すると、それぞれの効果に差があるのか?ないのか?を知りたいとします。 その際に、よく使用されるのが対応のある2群のt検定です。 ”対応のある”2群のt検定は、比べるデータは同じ人がAを服...
Rで対応のない2群検定:Student t 検定, Welch's t検定, 箱ひげ図, バイオリンプロット,ビースウォームプロット
例えば、国語のテストがあった時に、XクラスとYクラスのテストの点数の平均値に差があるのか?ないのか?を知りたいとします。 隣のクラスと差があるのか..?? 各クラスのテストの点数の平均値を比較する際に使用するのは対応のない2群の...
Rで対応のない2群検定:Mann-Whitney U検定、Wilcoxon Rank-Sum 検定、箱ひげ図、バイオリンプロット
例えば、数学のテストでXクラスとYクラスで平均点に差があるのか?ないのか?を調べたいとします。 このクラスの点数は、他のクラスと比べて差があるのか??? これは、XクラスとYクラスが異なる学生からなり、それぞれが受けた数学のテス...

今回は、3つ以上のグループを比較する方法について紹介します。

例えば、A先生が、1組2組3組で数学の講義を行ったとします。
理解度が異なるのか?などを成績から分析してみます。
  
1組と2組、2組と3組、3組と1組、といったように、それぞれを2群で比較すると、検定を複数回繰り返すことによる多重検定の問題が発生してしまいます。
そこで、3つ以上のグループ間を検定回数を少なく、評価する分析法が使用されます。

この記事では、Rを使って分散分析(ANOVA)と多重比較(Tukey法)について紹介します。

1. 分散分析(ANOVA)

分散分析は、3つ以上のグループ間の平均値の差を評価する統計的手法です。
この手法は、以下のような場面で利用されます。
・複数の治療法や処理法の効果を比較する
・異なるグループ間の平均値の差を評価する
・複数の条件の効果を調査する


2. 一元配置分散分析(one-way ANOVA)の実行と結果の解釈 ーaov関数ー

今回は、A先生が1組2組3組で数学の授業をして、各クラスでの成績(テストの点数)の違いを見るので、着目すべき要因は1つであり、この場合、一元配置分散分析(one-way ANOVA)を行います。
次の方法で、ダミーデータを作って、分散分析してみます。
 ①1組2組3組のそれぞれのクラスの数学の点数のダミーデータを作成(Class、Scoreの2列データ)
 ②①の3つのデータを行(縦)結合
 ③aov関数で分散分析
n_students <- 40 #クラスの人数
set.seed(123) #乱数生成のため初期化
class_1 <- data.frame(
  Class = rep("1組", n_students),
  Score = round(rnorm(n_students, mean = 70, sd = 7), 0) # 平均70、標準偏差7の正規分布に基づくダミーデータ
) 
class_2 <- data.frame(
Class = rep("2組", n_students),
Score = round(rnorm(n_students, mean = 75, sd = 8), 0) # 平均75、標準偏差8の正規分布に基づくダミーデータ
)
class_3 <- data.frame(
Class = rep("3組", n_students),
Score = round(rnorm(n_students, mean = 72, sd = 9), 0) # 平均72、標準偏差9の正規分布に基づくダミーデータ
)
all_classes <- bind_rows(class_1, class_2, class_3)
#    Class Score
1     1組    71
2     1組    63
3     1組    67
4     1組    68
・・・
41    2組    69
42    2組    73
43    2組    65
44    2組    92
45    2組    85
46    2組    66
47    2組    72
・・・
boxplot(Score ~ Class, data = all_classes,  #箱ひげ図でデータを可視化
+ main = "テストの点数",
+ xlab = "クラス", ylab = "点数",
+ col = "lightblue", border = "blue") 
anova_result <- aov(Score ~ Class, data = all_classes) #一元配置分散分析
print(summary(anova_result))
#             Df Sum Sq Mean Sq F value  Pr(>F)   
#Class         2    633   316.4   5.583 0.00483 **
#Residuals   117   6631    56.7                   
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

箱ひげ図で可視化

Class(各クラス)の効果に関するF値は5.583であり、p値は0.00483です。
p値が有意水準(通常は0.05)よりも小さいため、少なくとも1つのクラス間には点数の平均に統計的に有意な差があることが示唆されます。

どのグループ間で有意な差があったのかは、一元配置分散分析だけではわかりません。

3. 多重比較(Tukey法)の実行と結果の解釈 ーtukeyHSD関数ー

どのグループ間で有意な差があったのかを調べるために、多重比較を行います。
今回はTukey法を紹介します。
Tukeyの多重比較では、p値が調整された形(p adj)で算出されます。
この調整されたp値は、比較を複数行う場合に生じる多重検定の問題を考慮されていて、通常はこれらの調整されたp値を基にして、各比較の有意性が評価されます。

tukey_result <- TukeyHSD(aov(Score ~ Class, data = all_classes)) #Tukey法
print(tukey_result)
#  Tukey multiple comparisons of means
#    95% family-wise confidence level

#Fit: aov(formula = Score ~ Class, data = all_classes)
#
#$Class
#          diff       lwr      upr     p adj
#2組-1組  5.625  1.628916 9.621084 0.0031879
#3組-1組  2.825 -1.171084 6.821084 0.2178566
#3組-2組 -2.800 -6.796084 1.196084 0.2236783

2組と1組の間には平均点で統計的に有意な差があり(p = 0.0031879)、2組の平均点が1組よりも5.625ポイント高いことが示されています。
一方、3組と1組、3組と2組の間には有意な差が見られませんでした(p > 0.05)。
これは、3組の平均点が1組および2組の平均点と統計的に有意な差がないことを示しています。

分散分析(ANOVA)と多重比較(Tukey)は、複数のグループ間の差異を評価するために広く使用される手法です。
Rを使用することで、これらの手法を簡単に実行し、結果を解釈することができます。



参考図書

コメント

タイトルとURLをコピーしました