ANOVA je obdobou t-testu, ale pro větší počet skupin. H0: všechny skupiny mají stejnou střední hodnotu, H1: nemají. Výpočet probíhá pomocí rozptylů, proto poněkud „matoucí název“ (analysis of variance, analýza rozptylu).
Nezávislým (vstupním) proměnným říkáme faktory, jedná se o nominální (kategoriální) proměnné (tedy pouze názvy). Pokud máme jeden faktor, hovoříme o jednofaktorové (one-way ANOVA), např. 1 faktor pohlaví: muž, žena – celkem 2 skupiny (2 hodnoty proměnné pohlaví). Můžeme však použít kombinaci dvou faktorů (two-way ANOVA), např. faktor pohlaví: muž, žena a faktor vzdělání: bez maturity, s maturitou, vysokoškolské – kombinace obou faktorů vytváří celkem 6 skupin (2x3). Obecně může být faktorů i více, pak používáme obecnou vícefaktorovou (n-way) ANOVA.
Důležité je rozhodnout, zda skupiny obsahují nezávislá měření (klasická ANOVA) nebo závislá (korelovaná) měření (tzv. repeated measures ANOVA, též rANOVA). Význam je shodný, jako v případě t-testů.
Nejčastěji sledujeme jednu závislou (výstupní měřenou) proměnnou (numerická proměnná), např. měsíční plat. A testujeme, zda ve všech skupinách nabývá stejné střední hodnoty. Pokud je výhodné analyzovat několik závislých proměnných zároveň, používáme MANOVA (multivariate), která umožňuje objevit ještě více vztahů mezi proměnnými.
Podmínky použití klasické ANOVA
Jakmile alespoň jedna podmínka není splněna, musíme použít neparametrické varianty ANOVA, jedná se však o slabší testy (menší síla testu \(1 - \beta\), nižší šance objevit H1). Například tyto.
Poznámka: tyto názvy berte raději s rezervou, v některých programech se pod nimi mohou nalézat jiné varianty. Vždy si raději přečtěte nejdříve nápovědu.
Pokud ANOVA přijímá H1, je vhodné zjistit, které konkrétní skupiny se odlišují od ostatních. Slouží k tomu tzv. post-hoc testy, kde testujeme jednotlivé dvojice. Jedná se v podstatě o obdobu t-testů pro potřeby ANOVA, ale na rozdíl od t-testů nevidí tyto metody jen „slepě“ vždy konkrétní dvojici, ale berou v potaz celá data.
U dvou a vícefaktoré ANOVA ukazuje většinou statistický nástroj i interakci mezi faktory. Zobrazují se p-hodnoty jak jednotlivých faktorů, tak jejich kombinací. V případě signifikantní hodnoty to znamená, že teprve kombinace hodnot obou faktorů umožňuje rozklíčovat překvapivě jiný směr, než který vyplývá z každého faktoru samostatně.
Příklad: tradičně se říká, že s vyšším vzděláním lze očekávat vyšší plat, zároveň se také stále poukazuje na problém, kdy ženy na podobné úrovni s muži mají často plat nižší. Můžeme však (v hypoteticky vymyšlené situaci) pozorovat případ, kdy muži s nejnižším vzděláním budou mít plat stejný nebo vyšší než ti s nejvyšším (zatímco u žen tuto anomálii pozorovat nebudeme). Zdůvodnění nechme jen na hypotézách (jsou to např. politici? jsou to šikovní kluci, co se vrhli na podnikání a nezdržovali se obecnými studiemi, které jim jsou na nic?). Důležité však je, že právě interakce bezi oběma faktory dokáže tuto situaci podchytit, protože teprve vzdělání v kombinaci s pohlavím zjistí, že ač obecný trend díky vzdělání je jasný, i obecný vliv pohlaví také, tak zrovna nejnižší vzdělání v kombinaci s mužským pohlavím vede na něco zcela odlišného.
attach(mtcars)
gears <- factor(gear)
cyl <- factor(cyl)
interaction.plot(cyl, gear, mpg, type="b", col=c(1:3),
leg.bty="o", leg.bg="beige", lwd=2, pch=c(18,24,22),
xlab="Number of Cylinders",
ylab="Mean Miles Per Gallon",
main="Interaction Plot")
one-way: http://ww2.coastal.edu/kingw/statistics/R-tutorials/oneway.html
random: http://ww2.coastal.edu/kingw/statistics/R-tutorials/factorial.html
repeated: http://ww2.coastal.edu/kingw/statistics/R-tutorials/repeated.html
http://www.analyticsforfun.com/2014/06/performing-anova-test-in-r-results-and.html
http://statistics.ats.ucla.edu/stat/r/faq/posthoc.htm
kruskal-wallis: http://www.r-tutor.com/elementary-statistics/non-parametric-methods/kruskal-wallis-test
příklad: https://stat.ethz.ch/R-manual/R-patched/library/stats/html/kruskal.test.html
One-way:
# Kruskal Wallis Test One Way Anova by Ranks
kruskal.test(y~A) # where y1 is numeric and A is a factor
# Randomized Block Design - Friedman Test
friedman.test(y~A|B)
# where y are the data values, A is a grouping factor
# and B is a blocking factor
http://cran.r-project.org/web/packages/PMCMR/vignettes/PMCMR.pdf
require(stats)
data(InsectSprays)
attach(InsectSprays)
kruskal.test(count, spray)
posthoc.kruskal.nemenyi.test(count, spray)
posthoc.kruskal.nemenyi.test(count, spray, "Chisq")
detach(InsectSprays)
rm(InsectSprays)
## Formula Interface
posthoc.kruskal.nemenyi.test(count ~ spray, data = InsectSprays, dist="Tukey")
toto vypadá srozumitelně:
http://yatani.jp/teaching/doku.php?id=hcistats:kruskalwallis
© 7. 3. 2015 Tomáš Bořil, borilt@gmail.com