こちらの続き。
ANOVAには、タイプ1、2、3(またはタイプI、II、III)と呼ばれる3つの異なるタイプがある。これらのタイプは、分散(特に二乗和)の計算方法が異なる。データが比較的バランスのとれたもの、つまり各グループに比較的同数の観測がある場合は、3つのタイプすべてが同じ答えを出す。しかし、データが不均衡で、一部のグループに他のグループよりも多くの観測がある場合は、タイプII(2)またはタイプIII(3)を使用する必要がある。
Rのベースプログラムの標準的なaov()
関数は、Type Iの二乗和を使用する。そのため、データが均衡している場合にのみ適している。データが不均衡な場合は、タイプIIまたはタイプIIIの二乗和を用いてANOVAを行うべきである。これを行うには、carパッケージのAnova()
関数を使用する。Anova()
関数にはtype
という引数があり、計算したいANOVAのタイプを指定することができる。
次のコードチャンクでは、3つの異なるタイプを使って、poopdeckデータから3つの別々のANOVAを計算する。まずlm()
で回帰オブジェクトを作成する。Anova()
関数では、数式やデータセットではなく、回帰オブジェクトを主な引数として入力する必要がある。つまり、まず lm()
(またはglm()
) でデータから回帰オブジェクトを作成し、そのオブジェクトをAnova()
関数に入力する必要があめ。同じことを標準のaov()関数
でもすることができる。
回帰オブジェクトの作成
time.lm <- lm(formula = time ~ type + cleaner, data = poopdeck)
回帰オブジェクトtime.lm
を作成したので、このオブジェクトをaov()
に入力してType I ANOVA を、carパッケージのAnova()
に入力して Type II または Type III ANOVA を行うことで、3 種類の異なる ANOVA を計算することができる。
library(car) # Type I ANOVA - aov() time.I.aov <- aov(time.lm) # Type II ANOVA - Anova(type = 2) time.II.aov <- car::Anova(time.lm, type = 2) # Type III ANOVA - Anova(type = 3) time.III.aov <- car::Anova(time.lm, type = 3)
たまたま、poopdeckのデータフレームのデータは完全にバランスがとれている(従って各ANOVAタイプで全く同じ結果が得られます。しかし、もしバランスが取れていなかったら、aov()関数で計算したType I ANOVAを使うべきではない。
データがバランスされているかどうかを確認するには、関数を使う。
with(poopdeck, table(cleaner, type))
結果。
type cleaner parrot shark a 100 100 b 100 100 c 100 100
このようにpoopdeckのデータでは、観測値は完全にバランスがとれているので、データを分析するのにどのタイプのANOVAを使っても問題はない。