こちらの続き。
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を使っても問題はない。