こちらの続き。 ides.hatenablog.com
poopdeckのデータに一元配置のANOVA(one-way ANOVA)の実行例をする。掃除時間を従属変数に、クリーナーの種類を独立変数にしする。データをpirateplotで表すことができる。
library(yarrr) head(poopdeck)
データはこちら
day cleaner type time 1 1 a parrot 47 2 1 b parrot 55 3 1 c parrot 64 4 1 a shark 101 5 1 b shark 76 6 1 c shark 63
パイレーツプロットは以下のように書く。
pirateplot(time ~ cleaner, data = poopdeck, theme = 2, cap.beans = TRUE, main = "formula = time ~ cleaner")
cap.beans:データに見られる限界値を上限とすべきか否か?デフォルトはFALSE。
プロットを見ると、クリーナーaとbは同じで、クリーナーcは少し速いように見える。これをテストするために、aovでANOVAオブジェクトを作成する。 時間が従属変数で、クリーナーが独立変数なので、式をformula = time ~ cleaner
に設定する。
cleaner.aov <- aov(formula = time ~ cleaner, data = poopdeck) summary(cleaner.aov) ##結果表示
結果。
Df Sum Sq Mean Sq F value Pr(>F) cleaner 2 6057 3028 5.294 0.00526 ** Residuals 597 341511 572 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
表からの主な結果は、清掃時間に対するクリーナーの効果が有意であることだF(2.597) =5.29, p = 0.005. しかし、ANOVA表は、独立変数のどのレベルが異なるかはわからない。言い換えれば、どのクリーナーがどのクリーナーよりも優れているかはわからない。これに答えるためには、事後検定を行う必要がある。
要因による有意な効果が見つかった場合は、独立変数のレベルの各ペア間の差を検定するために、事後検定を行うことができる。一対比較には、さまざまな仮定を用いた多くの種類がある。異なる事後検定の背後にある論理については、こちらのWikipediaのページを参照: https://en.wikipedia.org/wiki/Post_hoc_analysis.
標準的なANOVAの最も一般的な事後検定の1つは、Tukeyの正直な有意差(HSD)検定である。
検定についての追加情報は、こちらのウィキペディアのページを参照: https://en.wikipedia.org/wiki/Tukey's_range_test HSD 検定を行うには、以下のようにTukeyHSD()
関数をANOVAオブジェクトに適用する。
TukeyHSD(cleaner.aov)
結果
Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = time ~ cleaner, data = poopdeck) $cleaner diff lwr upr p adj b-a -0.42 -6.039575 5.1995746 0.9831441 c-a -6.94 -12.559575 -1.3204254 0.0107324 c-b -6.52 -12.139575 -0.9004254 0.0180906
この表は、各グループペア間のペアワイズの差を示している。diff列は、グループ間の平均差(前の回帰オブジェクトの要約で見つけたものと同じ)、差の信頼区間、およびグループ差が異ならないという帰無仮説を検定するp値を示す。
私は、ほとんどの場合、ANOVA要約表と回帰要約表を組み合わせるのが便利である。ANOVAは回帰(すべての独立変数が因子である場合)の特別なケースに過ぎないので、回帰オブジェクトでもANOVAオブジェクトと同じ結果が得られる。しかし、結果の形式は異なり、解釈しやすくなっている。
回帰オブジェクトを作成するには、lm()
関数を使用します。この関数への入力は、aov()関数への入力と同じになります。
cleaner.lm <- lm(formula = time ~ cleaner, data = poopdeck) summary(cleaner.lm)
結果
Call: lm(formula = time ~ cleaner, data = poopdeck) Residuals: Min 1Q Median 3Q Max -63.02 -16.60 -1.05 16.92 71.92 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 66.020 1.691 39.037 < 2e-16 *** cleanerb -0.420 2.392 -0.176 0.86066 cleanerc -6.940 2.392 -2.902 0.00385 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 23.92 on 597 degrees of freedom Multiple R-squared: 0.01743, Adjusted R-squared: 0.01413 F-statistic: 5.294 on 2 and 597 DF, p-value: 0.005261
回帰表は、ANOVA表のように各変数の検定を提供しない。代わりに、独立変数の各レベルがデフォルト値からどれだけ異なるかを示す。独立変数のどの値がデフォルト変数であるかは、表からどの値が欠けているかを見るだけでわかる。このケースでは、クリーナーaの係数が見当たらないので、これがデフォルト値になる。参照カテゴリーであり、Estimateは0である。
表の切片は、デフォルト値の平均である。このケースでは、クリーナーaの平均時間は66.02だった。他のレベルの係数を見ると、クリーナーbはクリーナーaよりも平均0.42分速く、クリーナーcはクリーナーaよりも平均6.94分速いことがわかる。驚くことではないがこれらはTukey HSDテストで見られたのと同じ違いである。