の該当章が役に立つ.ネスト分散分析についても解説されている.たとえば Jerold H. Zar『Biostatistical Analysis (Fourth Edition)』(1999年刊行,Prentice Hall,ISBN:0-13-081542-X)の nested ANOVA 例題(Example 15.1: pp. 304-305)では,異なる3薬(Drug)の中でのソース(Source)に関するネストをデザインし,血中コレステロール値(Cholesterol)の値を計測するという観察をおこなう.データ(SampleNestedANOVA.txt)は下記の通り:
Drug Source Cholesterol 1 a 102 1 a 104 1 b 103 1 b 104 2 a 108 2 a 110 2 b 109 2 b 108 3 a 104 3 a 106 3 b 105 3 b 107
データの読み込みから,因子指定までは下記の通り:
> mm <- read.table("SampleNestedANOVA.txt", header=T) > attach(mm) > Drug <- factor(Drug) > Source <- factor(Source)
Drug 下に Source がネストされているので,線形モデルは「Cholesterol 〜 Drug/Source」となり, aov による分散分析は下記の通り:
> summary(aov(Cholesterol 〜 Drug/Source))
出力結果の分散分析表は下記の通り
Df Sum Sq Mean Sq F value Pr(>F) Drug 2 61.167 30.583 20.3889 0.002110 ** Drug:Source 3 1.500 0.500 0.3333 0.802202 Residuals 6 9.000 1.500
上表でのF値はいずれも Residuals を分母として計算されているので,Zar が説明しているような“階層的”な F 検定をするときには(Drug:Source を Residuals で検定し,次いで,Drug を Drug:Source で検定するという手順),再計算が必要になるだろう.
〈R〉の英智である R-help の過去ログを掘り起こしてみたら,やっぱり同様の質問が数年前にありました:「nested anova not giving expected results」(15 Apr. 2002).これに対して,間髪入れずに Peter Dalgaard 師曰く:「R は,SAS や GENSTAT と同じで,特別な指定がされていないかぎり,誤差項はただひとつしかないとみなす.つまり, Residuals がそれである」と.では,Zar や Rohlf & Sokal がやっているような nested ANOVA を〈R〉でするにはどうするか? Dalgaard 師のアドヴァイスに従えば「 aov(Cholesterol 〜 Drug + Error(Drug:Source))」で問題は解決するとのこと.Split-plot design のように,誤差項を明示的に指定すればいいわけですね:
> summary(aov(Cholesterol 〜 Drug + Error(Drug:Source)))
分散分析表を表示すると:
Error: Drug:Source Df Sum Sq Mean Sq F value Pr(>F) Drug 2 61.167 30.583 61.167 0.003703 ** Residuals 3 1.500 0.500
> detach(mm)