SSブログ

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は、全ての変数を使ったモデルをベースとして、ある変数を減らすと、有意に増えるかどうかを検定しています。
全ての変数を使った場合と、その変数を除外した場合との比較なので、順序には依存しません。

nice!(7)  コメント(0) 
共通テーマ:学問