Rで行う分散分析手法の違い [データサイエンス、統計モデル]
統計の講師をしていて、なるほど!と思う質問を受けることがあります。
せっかくなので、その中からピックアップして紹介できればと思います。
【質問】
Rで分散分析を行う時に
# (1) anova関数
anova(lm(Sepal.Width ~ Species, data=iris))
# (2) aov関数
aov(Sepal.Width ~ Species, data=iris)
# (3) oneway.test関数
oneway.test(Sepal.Width ~ Species, data=iris, var.equal=TRUE)
の3種類のやり方があります。
その細かい違いは?という質問です。
【回答】
まず、第一の視点として、データが等分散を仮定しているか、していないか?です。
# (1) lm関数(回帰分析でも用いられる)
等分散を仮定して計算している。
# (2) aov関数
等分散を仮定して計算している。
# (3) oneway.test関数
等分散を仮定しないウェルチの分散分析をしている。
等分散を仮定しないウェルチの分散分析の場合
oneway.test(Sepal.Width ~ Species, data=iris, var.equal=F)
等分散を仮定した場合(1)と(2)と同じ結果となる
oneway.test(Sepal.Width ~ Species, data=iris, var.equal=T)
続いて、(1)anova関数と(2) aov関数の違いについてです。
aovは、内部的にはlm関数を呼んでおり、Type IのANOVAとなります。
Type IIのanovaを使いたい場合は、anovaを使います。
各カテゴリのサンプルサイズが同じである場合は、結果は同じになりますが、セル間のサンプルサイズが異なってくる場合は、Type IIやIIIのanovaを使った方が良いと言われています。
分散分析のtypeについて、もう少し詳しく書くと、
type1は、変数を追加していき、ある変数を追加していくことで、平方和がどれくらい増えるかを検定します。
変数増加法のイメージです。
そのため、変数を追加していく順序が異なると、計算結果が異なる場合があります。
type2は、全ての変数を使ったモデルをベースとして、ある変数を減らすと、有意に増えるかどうかを検定しています。
全ての変数を使った場合と、その変数を除外した場合との比較なので、順序には依存しません。
せっかくなので、その中からピックアップして紹介できればと思います。
【質問】
Rで分散分析を行う時に
# (1) anova関数
anova(lm(Sepal.Width ~ Species, data=iris))
# (2) aov関数
aov(Sepal.Width ~ Species, data=iris)
# (3) oneway.test関数
oneway.test(Sepal.Width ~ Species, data=iris, var.equal=TRUE)
の3種類のやり方があります。
その細かい違いは?という質問です。
【回答】
まず、第一の視点として、データが等分散を仮定しているか、していないか?です。
# (1) lm関数(回帰分析でも用いられる)
等分散を仮定して計算している。
# (2) aov関数
等分散を仮定して計算している。
# (3) oneway.test関数
等分散を仮定しないウェルチの分散分析をしている。
等分散を仮定しないウェルチの分散分析の場合
oneway.test(Sepal.Width ~ Species, data=iris, var.equal=F)
等分散を仮定した場合(1)と(2)と同じ結果となる
oneway.test(Sepal.Width ~ Species, data=iris, var.equal=T)
続いて、(1)anova関数と(2) aov関数の違いについてです。
aovは、内部的にはlm関数を呼んでおり、Type IのANOVAとなります。
Type IIのanovaを使いたい場合は、anovaを使います。
各カテゴリのサンプルサイズが同じである場合は、結果は同じになりますが、セル間のサンプルサイズが異なってくる場合は、Type IIやIIIのanovaを使った方が良いと言われています。
分散分析のtypeについて、もう少し詳しく書くと、
type1は、変数を追加していき、ある変数を追加していくことで、平方和がどれくらい増えるかを検定します。
変数増加法のイメージです。
そのため、変数を追加していく順序が異なると、計算結果が異なる場合があります。
type2は、全ての変数を使ったモデルをベースとして、ある変数を減らすと、有意に増えるかどうかを検定しています。
全ての変数を使った場合と、その変数を除外した場合との比較なので、順序には依存しません。