Hoofdstuk 9 · ANOVA en η²

Variantieanalyse (ANOVA) · analysis of variance

De prikkel

Terug naar de rots bij Antarctica, maar nu met drie soorten pinguïns naast elkaar op de weegschaal.1 In dít stapeltje wegen de Adélies gemiddeld 3701 gram, de Chinstraps 3733 gram, en de Gentoo’s 5076 gram. Twee soorten die bijna even zwaar zijn, en één die er ruim een kilo bovenuit torent.

De vorige keer legden we telkens twee groepen naast elkaar met een t-toets. Maar hier zijn er drie. Je zou drie losse t-toetsen kunnen doen — Adélie tegen Chinstrap, Adélie tegen Gentoo, Chinstrap tegen Gentoo — maar dat voelt al omslachtig, en met vijf of tien soorten wordt het een moeras. Kan het niet in één keer? En de vraag eronder: zit er in déze drie stapeltjes echt ergens een verschil, of kan toeval zulke verschillen tussen groepen zomaar namaken?

Trek even mee. Er is één toets die naar álle groepen tegelijk kijkt.

Speel het

⬇ Download de data — penguins.csv

Eén toets, drie groepen. Hij heet variantieanalyseanalysis of variance, kortweg ANOVA. De naam klinkt als iets anders dan de t-toets, maar de vraag is dezelfde familie: verschillen de gemiddelden van de groepen meer dan je door toeval zou verwachten? Alleen kijkt ANOVA naar alle groepen in één beweging.

OpmerkingIn R · trek aan de drie soorten
peng <- read.csv("penguins.csv")

tapply(peng$gewicht, peng$soort, mean)   # Adelie 3701, Chinstrap 3733, Gentoo 5076

a <- aov(gewicht ~ soort, data = peng)
summary(a)
# soort       Df  2   Sum Sq 146864214   F value 343.6   Pr(>F) <2e-16
# Residuals   Df 339

Daar staat-ie: F(2, 339) = 343.6, p < .001. Die F is één getal voor “hoeveel groter is het verschil tussen de groepen dan de rommel binnen de groepen?”. Ligt F rond 1, dan is het verschil tussen de groepen niet groter dan de spreiding die je toch al binnen elke groep hebt — niks bijzonders. Hoe hoger F, hoe sterker de groepen uit elkaar liggen ten opzichte van hun eigen ruis. En 343.6 is geen hoge F, dat is een absurde F. Hier zit overduidelijk ergens verschil.

Maar let op wat de ANOVA je niet vertelt: alleen dát er ergens een verschil zit, niet wélke soorten van elkaar afwijken. Daarvoor bestaat een post-hoc-toets (letterlijk “achteraf”) die alle paren nagaat:

OpmerkingIn R · wélke soorten verschillen? (post-hoc, Tukey)
TukeyHSD(a)
# Chinstrap-Adelie     diff    32   p adj 0.88    <- geen verschil
# Gentoo-Adelie        diff  1375   p adj <.001   <- fors
# Gentoo-Chinstrap     diff  1343   p adj <.001   <- fors

En kijk, nu wordt het interessant. Adélie en Chinstrap verschillen niet (32 gram, p = 0.88 — dat is toeval). Het is de Gentoo die het hele feest maakt: ruim 1300 gram zwaarder dan de andere twee. De ANOVA riep “ergens is verschil!”, de post-hoc wijst aan wáár.

Schud het

Eerst de vraag die telt: is die F van 343.6 echt, of kan toeval zomaar zulke verschillen tussen drie groepen namaken? We bouwen het toeval na. De truc is dezelfde als altijd, en hij is mooi: we maken duizend werelden waarin de waarheid nul is — waarin de soort niets te maken heeft met het gewicht — en kijken hoe hoog de F dan door puur geluk nog oploopt.

Dat doe je door de soort-labels te husselen. Je houdt alle gewichten precies zoals ze zijn, maar plakt er lukraak “Adélie”, “Chinstrap” of “Gentoo” op. En dit is de kern: door te husselen koppel je de soort los van het gewicht. Je haalt met eigen handen weg dat een bepaald gewicht bij een bepaalde soort hoort. In zo’n losgekoppelde wereld kán er geen echt soortverschil meer zijn — dus elke F die je er nog in meet, is per definitie puur toeval.

OpmerkingIn R · hussel de soort-labels (1000 nul-werelden)
set.seed(42)
nul <- replicate(1000,
  summary(aov(gewicht ~ sample(soort), data = peng))[[1]][1, "F value"]
)

hist(nul)                          # de geschudde F'en, een bergje laag bij nul
abline(v = 343.6, col = "red", lwd = 2)   # en dáár staat de echte
range(nul)                         # → ongeveer 0 tot 7.6

Kijk naar dat bergje. Duizend werelden die dansen rond nul — al kunnen F’en niet negatief worden, dus ze kruipen laag: het gros dobbert rond 1, en zelfs de allergrootste toeval-uitschieter komt niet boven de 8 uit. Dat is logisch: in een losgekoppelde wereld is het verschil tussen de groepen niet groter dan de ruis binnen de groepen, dus F blijft klein. En dan die rode streep op 343.6 — kilometers, lichtjaren rechts van het hele bergje. Geen enkele van de duizend nul-werelden komt ook maar in de verte in de buurt. Dát is “geen toeval”: geen p-waarde die je moet geloven, maar een afstand die je zíet.

Snap het

De ANOVA is dus overduidelijk: ergens tussen de soorten zit echt verschil. Maar net als bij de t-toets in het vorige blok is “echt” niet hetzelfde als “groot” — en die astronomische F van 343.6 kan je op het verkeerde been zetten.

Zo’n duizelingwekkende F betekent niet dat dit het belangrijkste verschil op aarde is. Hij is zo hoog om twee saaie redenen: het verschil ís bruut (de Gentoo torent er ruim een kilo bovenuit) én we hebben veel dieren (342 stuks). Bij een groot, duidelijk verschil met een royale N is significantie triviaal — de toets bevestigt alleen wat je met het blote oog al zag. De p is dan niet het nieuws. De grootte is het nieuws.

Voor die grootte bestaat bij ANOVA de effectgrootte η² (eta-kwadraat, eta squared). Die vertelt je welk aandeel van alle verschil in gewicht verklaard wordt door de soort:

OpmerkingIn R · hoe groot is groot? (η²)
s <- summary(a)[[1]]
s[1, "Sum Sq"] / sum(s[, "Sum Sq"])       # → 0.67

# of kant-en-klaar:
# library(effectsize); eta_squared(a)

η² = 0.67. Van al het verschil in gewicht tussen deze 342 pinguïns wordt 67% verklaard door welke soort het is. Dat is enorm — weet je de soort, dan weet je het gewicht al bijna. Dáár zit het verhaal, niet in de F. En η² sluit naadloos aan op de uit het correlatieblok en op Cohens d uit het t-toets-blok: allemaal manieren om te zeggen hoe groot iets is, los van of het er is.

De les van dit blok, in drie zinnen:

  • Drie of meer groepen tegelijk → ANOVA. Eén toets in plaats van een stapel losse t-toetsen. Hij vraagt: zit er ergens een verschil tussen de groepen?
  • De ANOVA zegt “ergens”, de post-hoc zegt “waar”. Hier: niet Adélie tegen Chinstrap (die zijn even zwaar), maar de Gentoo die er bovenuit steekt.
  • Significant zegt “waarschijnlijk niet nul”, niet “groot”. Bij een F van 343 is de p geen nieuws; η² wél. Rapporteer de effectgrootte naast de toets.

Zou je het in één eerlijke zin opschrijven, dan niet “de soorten verschillen significant in gewicht (p < .001)”, maar: de drie soorten verschillen sterk in gewicht (η² = 0.67); dat verschil zit vrijwel helemaal in de Gentoo, die ruim 1300 gram zwaarder is dan de andere twee, die onderling niet verschillen. Het getal met een maat eromheen, en meteen wélke groep het doet.

Zelfde vorm in het boek

Hier: drie of meer groepen, één toets die vraagt of er érgens verschil zit, en de effectgrootte die zegt hoe groot dat verschil is.

In het boek: W9 — Groepen zijn ook getallen

TODO (broertje-proof, 24-7, geschreven op het charter): W9 (Groepen zijn ook getallen) is nog een grove boek-schets — anker en nummering checken zodra dat hoofdstuk staat (nummering-later). Verhaal-stem-opening is een eerste stem-pas; kan nog stiller. Het schud-speeltje voor ANOVA (geschudde F’en, bergje laag bij nul, echte F ver rechts) bestaat nog niet — kan later bij boek/04_speeltjes/; tot dan draagt het R-broertje de schud-ervaring. De JASP- en SPSS-tweeling delen deze tekst; alleen “Speel het / Schud het” verschilt (die kunnen het husselen niet zelf → speeltje + hop).

Voetnoten

  1. Palmer Penguins — Gorman, Williams & Fraser (2014), Palmer Station Antarctica LTER; via het R-pakket palmerpenguins (CC0). penguins.csv, 342 pinguïns. Alle getallen op die échte data nagerekend.↩︎