Hoofdstuk 4 · Correlatie en scatterplot
Samenhang tussen twee variabelen · correlation & scatterplot
De prikkel
Ergens op een kale rots bij Antarctica staat iemand met een schuifmaat en 342 pinguïns die daar niet om gevraagd hebben.1 Van elke pinguïn schrijft hij twee dingen op: hoe lang de snavel is, en hoe diep. Met diep bedoelen we de hóógte van de snavel — van boven naar onder, van opzij bekeken, niet de breedte en niet de lengte. Meer niet: twee getallen per beest, netjes onder elkaar.
En nu wij. Want in die twee kolommetjes zit iets raars verstopt. Reken je de samenhang tussen snavellengte en snaveldiepte uit over alle 342 pinguïns, dan komt er een getal uit dat negatief is: r = −.24. In gewone taal: hoe langer de snavel, hoe minder diep — alsof een dier met een lange neus per se een dunne neus heeft.
Voelt dat kloppen? Mij niet. Trek even mee — we gaan het zelf uitzoeken, en onderweg blijkt dat getal iets heel anders te zeggen dan het lijkt.
Speel het
⬇ Download de data — penguins.csv
Haal de pinguïns binnen en gooi ze in een plaatje. Elke pinguïn één stip: snavellengte op de ene as, snaveldiepte op de andere.
peng <- read.csv("penguins.csv")
plot(peng$snavellengte, peng$snaveldiepte) # 342 stippen, een wolk
cor(peng$snavellengte, peng$snaveldiepte) # → -0.235Daar is-ie: een wolk die van linksboven naar rechtsonder hangt, en het getal −0.235 is één cijfer voor “hoe strak kantelt die wolk omláág?”. De schaal loopt van −1 (een perfecte dalende lijn) via 0 (geen rechtlijnig verband) naar +1 (een perfecte stijgende lijn). −.24 is een flauwe daling met veel rommel eromheen — zwak, maar het staat er. Langere snavel, ondiepere snavel. Zegt het getal.
Schud het
Eerst de vraag die telt: is die −.24 écht, of kan een wolk toevallig zo scheef gaan hangen? We gaan vals spelen. We knippen elke snaveldiepte los van z’n eigen pinguïn en plakken ’m op een willekeurige andere. De lengtes blijven lengtes, de dieptes blijven dieptes — maar wie bij wie hoort, is nu lukraak.
Dát is de hele truc, en het is belangrijk genoeg om even stil bij te staan: door te husselen koppel je de twee metingen los van elkaar. Je haalt met eigen handen weg dat een bepaalde lengte en een bepaalde diepte bij dezelfde pinguïn horen. In zo’n losgekoppelde wereld kán er geen echt verband meer zijn — en dus is elke samenhang die je er tóch nog in meet, per definitie puur toeval. Zat er echte samenhang in de originele data, dan hoort die nu weg te vallen.
# één keer schudden: de dieptes door elkaar husselen
cor(peng$snavellengte, sample(peng$snaveldiepte)) # → iets rond 0
# doe het 1000 keer en kijk waar r dan landt
set.seed(42)
nep <- replicate(1000, cor(peng$snavellengte, sample(peng$snaveldiepte)))
hist(nep) # een bergje rond nul
abline(v = -0.235, col = "red", lwd = 2) # en dáár staat de echteKijk naar dat plaatje. Duizend werelden die dansen rond nul — want in elke geschudde wereld is de échte samenhang doorgeknipt, maar toeval laat de r nooit precies op nul landen. Ze kruipen allemaal dicht om nul, zelden verder dan .17 van huis. En dan die rode streep op −.24, buiten het hele bergje. In duizend keer schudden kwam geen enkele geschudde wereld even ver als de echte pinguïns. Dát is wat “geen toeval” betekent — geen p-waarde die je moet geloven, maar een afstand die je zíet. De echte pinguïns weten iets wat de geschudde niet weten.
Dus: de samenhang is echt. Zaak gesloten? Nee. Hier begint het pas.
Snap het
De verleiding is nu te schrijven: “bij pinguïns gaat een langere snavel samen met een ondiepere.” Het getal is echt, de zin lijkt te volgen. En toch is-ie mis. Kleur de wolk eens per soort:
plot(peng$snavellengte, peng$snaveldiepte, col = factor(peng$soort), pch = 16)
# en reken r nu apart uit binnen één soort
gentoo <- peng[peng$soort == "Gentoo", ]
cor(gentoo$snavellengte, gentoo$snaveldiepte) # → +0.643Ineens zie je het. Er zijn drie soorten in die wolk, elk als een eigen kluitje. En binnen elk kluitje loopt de samenhang de andere kant op: langere snavel, juist diepere snavel. Reken maar na — Adélie +.39, Chinstrap +.65, Gentoo +.64. Alle drie positief. Het teken is omgeklapt.
Wat gebeurde er? De Gentoo’s (rechtsonder) hebben lange, ondiepe snavels; de andere twee soorten (linksboven) korte, diepe. Gooi je ze op één hoop, dan trekt dat soortverschil de hele wolk schuin naar beneden — en dáár komt die −.24 vandaan. Niet uit een verband tussen snavellengte en -diepte, maar uit het verschil tússen de soorten. De soort is een derde speler die zich als het verband vermomt. Het boek noemt dat straks confounding; jij zag het hier gebeuren, in de kleuren van een scatterplot.
En dat is de dubbele les van dit blok, mooier dan één van de twee alleen:
- De schud-toets zei: die −.24 is echt, geen toeval.
- De scatterplot zei: echt ja — maar niet wát je denkt. De richting is een luchtspiegeling van de soort.
Echt en waar zijn dus twee verschillende dingen. Een correlatie kan kraakhelder niet-toeval zijn en je tóch de verkeerde kant op wijzen. Daarom lees je r nooit zonder de wolk ernaast — en zeker niet zonder je af te vragen wie er nog meer in die wolk zit. Zou je het in één eerlijke zin moeten opschrijven, dan niet “langere snavels zijn ondieper”, maar: over drie soorten heen hangt de wolk omlaag, maar binnen elke soort omhoog — het min-teken is een soorteffect.
(En dat kleine getal r² dat je weleens ziet — hier .06 — is het “aandeel gedeelde variantie”: van alle verschil in snaveldiepte deelt maar een paar procent iets met snavellengte. Ook dat is geen “verklaring”, alleen boekhouding.)
◠ Zelfde vorm in het boek
Hier: één getal voor de samenhang, en de wolk die verklapt wat het getal verzwijgt.
In het boek: W4 — Hangen ze samen?
Daar begint het bij de wolk, niet bij het getal — en de rechte lijn komt pas als je hebt gezien wie er allemaal in de wolk zitten.
TODO (broertje-proof, herschreven 24-7 naar het charter): W4 (Hangen ze samen?) is nog een grove boek-schets — anker en formulering checken zodra dat hoofdstuk staat. Verhaal-stem-opening is een eerste stem-pas; kan nog losser/stiller. De JASP-tweeling deelt deze tekst; alleen “Speel het / Schud het” verschilt (JASP kan de shuffle niet zelf — zie het JASP-blok voor de gekozen oplossing).
Voetnoten
Palmer Penguins — Gorman, Williams & Fraser (2014), Palmer Station Antarctica LTER; via het R-pakket
palmerpenguins(CC0). Alle getallen in dit blok zijn op die échte data nagerekend.↩︎