分散分析(Analysis of Variance, ANOVA)とは
分散分析(ANOVA)は、複数のグループの平均値が統計的に異なるかどうかを確認するための手法です。この手法は、実験や観察における異なる群の間でのばらつき(分散)を比較することで、群ごとの平均値に有意な差があるかを判断します。ANOVAは、主に一元配置分散分析(One-Way ANOVA)、二元配置分散分析(Two-Way ANOVA)、および繰り返し測定を伴う分散分析(Repeated Measures ANOVA)に分類されます。
R言語を用いて分散分析を行う方法について、具体的なコードとともに解説します。

1. 分散分析の基本的な概念
分散分析の基本的な考え方は、以下のように要約できます:
-
群間分散(群の平均値間の差異)と群内分散(群内でのばらつき)を比較します。
-
群間分散が群内分散に比べて大きければ、群間で有意な差があると判断します。
-
F統計量は、群間分散を群内分散で割った値であり、この値が大きいほど群間に差があるとされます。
2. Rでの分散分析の実施方法
R言語では、分散分析を実行するためにaov()
関数を使用します。ここでは、具体的な例を用いて解説します。
2.1 データの準備
まず、分散分析を行うためのデータセットを準備します。以下のようなデータを例にとります。これには3つの異なる治療法(A、B、C)を施した3つのグループのデータがあります。
R# データセットの作成
treatment <- rep(c("A", "B", "C"), each = 10)
score <- c(23, 21, 25, 22, 26, 27, 24, 30, 29, 25, # A群
32, 33, 31, 35, 36, 34, 33, 31, 30, 32, 33, # B群
29, 28, 30, 32, 35, 31, 30, 34, 33, 30) # C群
data <- data.frame(treatment, score)
2.2 分散分析の実行
次に、aov()
関数を使用して、分散分析を行います。この関数は、群間に有意な差があるかどうかを調べるために使用します。
R# 分散分析の実行
anova_result <- aov(score ~ treatment, data = data)
summary(anova_result)
このコードでは、score
(得点)が、treatment
(治療法)という因子によってどのように影響されるかを分析しています。summary()
関数は、ANOVAの結果を要約し、F値とp値を表示します。
2.3 結果の解釈
ANOVAの結果が得られたら、特に注目すべきポイントは次の通りです:
-
F値:群間分散と群内分散の比率です。この値が大きいほど、群間に有意な差がある可能性が高くなります。
-
p値:通常、p値が0.05未満であれば、群間に有意な差があると判断します。
例えば、summary(anova_result)
の結果が次のようであったとします:
r Df Sum Sq Mean Sq F value Pr(>F)
treatment 2 120.4 60.2 8.5 0.0012 **
Residuals 27 189.3 7.0
この場合、p値 = 0.0012
となっているため、治療法A、B、Cの間に統計的に有意な差があると結論できます。
3. 事後検定(Post-hoc test)
分散分析を通じて、群間に有意な差があることが分かった場合、どの群とどの群が異なるのかを明確にするために、事後検定を行います。Rでは、TukeyHSD()
関数を用いてTukeyのHSD(Honest Significant Difference)検定を行うことができます。
R# TukeyHSD検定の実行
tukey_result <- TukeyHSD(anova_result)
summary(tukey_result)
この検定は、どの群間で有意差があるのかを調べるための方法です。
4. 二元配置分散分析(Two-Way ANOVA)
二元配置分散分析は、2つの因子が結果にどのように影響を与えるかを調べる手法です。例えば、treatment
(治療法)とage_group
(年齢群)という2つの因子がある場合、次のように分析します。
R# データセットの作成
age_group <- rep(c("Young", "Middle", "Old"), each = 10)
data2 <- data.frame(treatment, age_group, score)
# 二元配置分散分析の実行
anova_result2 <- aov(score ~ treatment * age_group, data = data2)
summary(anova_result2)
この場合、treatment * age_group
は交互作用を含む項です。交互作用効果が有意であるかどうかを確認することができます。
5. 結論
分散分析は、複数の群の平均値が異なるかどうかを検定するための有効な手法です。Rを使用することで、簡単に分散分析を実行でき、得られた結果を解釈して、どの群が有意に異なるかを確認できます。また、事後検定を行うことで、どの群間に差があるのかを明確にすることができます。
参考文献
-
R Documentation for
aov()
andTukeyHSD()
-
「統計学入門」東京大学出版会