Vierde beweging · Verschil onthechten
Oefening 9.3 · Effectgrootte: Cohens d
Een verschil gedeeld door de spreiding · effect size
In deze oefening
Data bij deze oefening — penguins.csv 342 pinguïns · plantgroei.csv plantgroei onder drie condities · diamantjes.csv de twaalf steentjes uit het boek · wat elke kolom betekent
prikkel
Is 1375 gram veel?
verschil zonder maatstok · spreiding binnen groepen
Twee pinguïnsoorten op de weegschaal. De Gentoo’s wegen gemiddeld 5076 gram, de Adélies 3701 gram.1 Het verschil: 1375 gram — ruim een kilo pinguïn.
Is dat veel?
Denk er even over na vóór je verder leest. Want eerlijk: aan “1375 gram” alleen kun je het niet zien. Veel of weinig hangt ervan af hoeveel de pinguïns binnen elke soort al onderling verschillen. Een kilo is enorm als alle Gentoo’s bijna even zwaar zijn — en niks als de één 4 kilo weegt en de ander 6. Het getal 1375 staat daar maar wat te wezen, zonder maatstok.
Trek even mee. We gaan dat verschil een maat geven die wél iets zegt.
speel het
Reken Cohens d uit in R
gepoolde SD · verschil gedeeld door de spreiding
d <- read.csv("diamantjes.csv")
# de twee groepen apart
g <- d$glans[d$merk == "golfje"]
s <- d$glans[d$merk == "sterretje"]
# de gezamenlijke spreiding: de lineaal waarmee we meten
sd_p <- sqrt(((length(g)-1)*var(g) + (length(s)-1)*var(s)) / (length(g)+length(s)-2))
# sd_p → 20
sd_p
# het verschil, gemeten in die lineaal
# (mean() - mean()) / sd_p → 1.00
(mean(s) - mean(g)) / sd_pDe gepoolde SD is precies 20, dus het merkverschil is d = 1.00 — één hele standaardafwijking, een groot effect volgens elk tabelletje. En tóch was het net niet significant. Effectgrootte en significantie beantwoorden verschillende vragen.
Nu jij — bij de pinguïns: is 1375 gram verschil veel? Zelfde beesten als net, andere vraag.
Haal de pinguïns binnen, hou de twee soorten over, en kijk eerst naar de kale getallen: de twee gemiddelden, en — dit is de sleutel — hoeveel spreiding er binnen de groepen zit.
peng <- read.csv("penguins.csv")
ga <- peng[peng$soort %in% c("Gentoo", "Adelie"), ]
# Adelie en Gentoo: aggregate() → 3701 5076
aggregate(gewicht ~ soort, ga, mean)
# Adelie en Gentoo: aggregate() → 459 504
aggregate(gewicht ~ soort, ga, sd)Twee aggregate-regels voor twee getallen — dat kan ook in één keer, met het aantal erbij (en dat aantal wil je hier zien, want d leunt erop). Zie samenvatten, en per groep.
Daar staat het verschil (1375 g), en daar staat de spreiding binnen elke soort: zo’n 480 gram op en neer. Dát laatste getal is je lineaaltje — de gewone onderlinge variatie tussen twee willekeurige pinguïns van dezelfde soort. De vraag “is 1375 veel?” wordt nu een deelsom: hoeveel van die lineaaltjes passen er in het verschil?
g <- ga$gewicht[ga$soort == "Gentoo"]
a <- ga$gewicht[ga$soort == "Adelie"]
# gepoolde SD: de twee spreidingen samengevoegd tot één lineaaltje
sp <- sqrt(((length(g) - 1) * var(g) + (length(a) - 1) * var(a)) /
(length(g) + length(a) - 2))
# sp → 479.5
sp
# Cohens d → 2.87
(mean(g) - mean(a)) / spDaar is-ie: Cohens d = 2.87. Het verschil is bijna drie lineaaltjes groot. En let op wat er met dat getal gebeurde — er zitten geen grammen meer in. We hebben grammen door grammen gedeeld; de eenheid is weggevallen. Wat overblijft is een kaal getal, en juist daardoor kan het reizen.
voel de maat
Twee bergjes die elkaar amper raken
overlap tussen groepen · grootte-vraag versus toeval-vraag
Wat betekent “2.87 lineaaltjes uit elkaar” nou eigenlijk? Teken de twee soorten als twee bergjes op dezelfde weegschaal — Adélie rond 3701, Gentoo rond 5076, elk met z’n eigen spreiding van ~480 — en kijk hoeveel ze over elkaar heen vallen.
x <- seq(2500, 6500, length = 400)
# Adelie
plot(x, dnorm(x, 3701, 459), type = "l", lwd = 2,
xlab = "gewicht (g)", ylab = "")
# Gentoo
lines(x, dnorm(x, 5076, 504), lwd = 2, col = "red")Bijna geen overlap. Twee bergjes die elkaar amper raken — dát is wat d = 2.87 er in het echt uitziet: je kunt een willekeurige pinguïn oppakken en vrijwel altijd goed raden welke soort het is, puur op gewicht. Hoe groter d, hoe verder de bergjes uit elkaar schuiven; hoe kleiner, hoe meer ze in elkaar overvloeien.
Merk op: hier hoefden we niks te schudden. De schud-zet vraagt “is dit verschil echt of toeval?” — dat is de vraag van de t-toets (zie het t-toets-blok). Effectgrootte vraagt iets anders: “hóé groot is het?” Twee verschillende vragen, en dit blok gaat over de tweede.
snap het
Wat d = 2.87 wél en niet zegt
vuistregels van Cohen · meta-analyse · groep versus individu
d = 2.87 is gigantisch — in de meeste onderzoeken kom je zoiets nooit tegen. Je hebt vast de vuistregels van Cohen weleens langs zien komen: 0.2 is “klein”, 0.5 “middel”, 0.8 “groot”. Handig als eerste houvast, maar het zijn noodgrepen — Cohen bedoelde ze zelf als laatste redmiddel voor als je écht niks beters hebt. Beter is terugvertalen naar de meetlat waar je net stond: 2.87 lineaaltjes, twee bergjes die elkaar nauwelijks raken. Dát zegt meer dan het etiket “groot”.
Waaróm die kale maat de moeite waard is: omdat er geen grammen meer in zitten, kun je ’m naast een d uit een heel ander onderzoek leggen. Een d van gewichtsverschil tussen pinguïnsoorten en een d van, zeg, het effect van een therapie op een angstscore — verschillende werelden, verschillende eenheden, maar dezelfde taal. Effectgrootte is de gemeenschappelijke munt. Daarom draagt bijna elke moderne studie ’m, en daarom kan een meta-analyse tientallen onderzoeken optellen die anders onvergelijkbaar waren.
Twee dingen om vast te houden, want hier gaan mensen de mist in:
- “Significant” is niet “groot”. Het t-toets-blok vraagt of een verschil echt is (geen toeval). Dit blok vraagt hoe groot het is. Bij grote steekproeven kan een piepklein, oninteressant verschil kraakhelder significant zijn — echt, maar nietig. En omgekeerd. Echt en groot zijn twee losse knoppen.
- d gaat over de groepsgemiddelden, niet over individuen. Zelfs bij deze enorme d = 2.87 zegt het iets over de bergjes als geheel, niet over elke pinguïn. In de kleine overlap die er wél is, kan een zware Adélie best boven een lichte Gentoo uitkomen. De soorten verschillen gemiddeld enorm; dat sluit een individuele uitzondering niet uit.
Zou je het in één eerlijke zin opschrijven, dan niet “de soorten verschillen 1375 gram”, maar: de Gentoo’s zijn gemiddeld bijna drie standaardafwijkingen zwaarder dan de Adélies (d = 2.87) — de twee soorten overlappen in gewicht nauwelijks.
jouw beurt
Een d voor het halve grammetje
gepoolde SD · overlap tussen twee bergjes · twee losse knoppen
Jouw beurt — bekende data, maar uit een ander hoofdstuk: de plantjes uit plantgroei.csv, waar controle tegen voer twee nét de streep haalde met p = .048 (de oefening over de p-waarde). Dat verschil in gewicht kreeg daar een oordeel; een maat kreeg het nooit.
Zet eerst klaar, en beantwoord daarna de vragen. De laatste heet met opzet Z) en niet l): de aannames staan altijd achteraan, en die vreemde letter zegt “en ook, elke keer, deze”. En onder Tentamenvragen, aan het eind van deze oefening, staan dezelfde onderwerpen nog een keer in de vorm waarin een tentamen ze stelt.
pg <- read.csv("plantgroei.csv")
ct <- pg$gewicht[pg$groep == "controle"]
v2 <- pg$gewicht[pg$groep == "behandeling2"]a) Hoeveel plantjes zitten er in elke groep? (twee getallen)
b) Hoeveel wegen ze gemiddeld, en hoeveel spreiding zit er binnen elke groep? (rapporteer M en SD per groep)
c) Hoeveel gram scheelt het, ruw? (één getal, in grammen)
d) Reken de gepoolde SD met de hand uit — de twee spreidingen samengevoegd tot één lineaaltje: sp <- sqrt(((length(ct)-1)*var(ct) + (length(v2)-1)*var(v2)) / (length(ct)+length(v2)-2)). (rapporteer de gepoolde SD)
e) Deel het verschil door dat lineaaltje. (rapporteer d, en zeg in gewone woorden wat het getal betekent)
f) Pak nu de rekenmachine en deel de twee gedrukte getallen op elkaar: 0.49 / 0.52. Je komt niet op hetzelfde uit als bij e). Hoeveel scheelt het, en waar komt dat verschil vandaan? (twee getallen en één regel)
g) Leg je d naast die van de pinguïns uit dit blok. Hoeveel keer zo groot is die? (twee d’s en één verhouding)
h) Leg elke behandelde plant naast elke controleplant en tel in hoeveel van die honderd paren de behandelde wint: mean(outer(v2, ct, ">")). Doe hetzelfde in je hoofd voor een muntje. (twee kansen, en de pinguïn-kans van .98 ernaast)
i) De p was .048 en de d is groot. Beantwoorden die twee dezelfde vraag? (twee vragen in je eigen woorden, één per getal)
j) Schrijf één eerlijke zin op over wat dit voer doet. “Het werkt nauwelijks”, “het werkt flink”, of geen van beide? (één zin, met allebei de getallen erin; meer antwoorden zijn goed — de verwoording is aan jou, dat allebei de getallen erin staan niet)
k) Deze d komt uit tien plantjes per groep. Waarom is dat getal zelf ook wiebelig, en waar in dit oefenboek gaat dat over? (één zin en een verwijzing)
Z) Mag je alles hierboven geloven? Cohens d deelt door één gezamenlijk lineaaltje. Welke aanname zit daar onder, en houdt hij hier stand? Kijk naar de twee SD’s uit b). (één aanname en het getal waarop je hem beoordeelt)
a) Tien in elke groep, dus twintig plantjes in totaal.
b) Controle M = 5.03, SD = 0.58. Voer twee M = 5.53, SD = 0.44.
c) 0.49 gram. En daar sta je dan: 0.49 gram, zonder maatstok.
d) Gepoolde SD = 0.52. Dat is de gewone onderlinge variatie tussen twee willekeurige plantjes uit dezelfde groep — je lineaaltje.
e) d = 0.95. Het verschil is bijna één heel lineaaltje groot: de twee groepsgemiddelden liggen bijna één standaardafwijking uit elkaar. De vorm is dezelfde breuk als een z-score: je kijkt gewoon hoe vaak het lineaaltje tussen die twee gemiddelden past. Bij een z-score vergelijk je één persoon met het gemiddelde, hier vergelijk je het ene gemiddelde met het andere.
f) 0.49 / 0.52 = 0.94, en bij e) stond 0.95. Dat is geen fout van jou: R deelt 0.494 door 0.5176 en rondt pas aan het eind af, jij deelt twee getallen die al afgerond waren. Eén duizendste in de invoer wordt een honderdste in de uitkomst. Rond af aan het eind, nooit onderweg.
g) Plantjes d = 0.95, pinguïns d = 2.87 — die is er 3.0 keer zo groot.
h) Van de honderd paren wint de behandelde plant er 75, dus de kans is .75. Bij de pinguïns is diezelfde kans .98, en een muntje zou op .50 uitkomen. Zo voel je wat een d van 0.95 tegenover een d van 2.87 in het echt betekent: twee bergjes die elkaar flink raken tegenover twee die elkaar amper raken.
i) Nee, twee verschillende vragen. De p beantwoordt “zijn we er vrij zeker van dát het voer iets doet?” — en hier maar nét, want .048 zit tegen de streep aan. De d beantwoordt “hoe véél doet het?” — en dat is fors. Bij de pinguïns wezen die twee knoppen dezelfde kant op; hier wijzen ze elk een andere.
j) Meer antwoorden zijn goed; er is geen voorgeschreven verwoording. Bijvoorbeeld: “Het voer maakte de plantjes gemiddeld bijna een halve gram zwaarder, een groot effect (d = 0.95), al is het bewijs dat er überhaupt een effect is maar nét overtuigend (p = .048).” Niet “het werkt nauwelijks” — dat verwart nét-significant met klein. En niet “het werkt flink” zonder meer — dat laat weg hoe wankel het bewijs is. Allebei de getallen, allebei hun eigen zin.
k) Omdat d uit twee gemiddelden en twee spreidingen komt, en die zijn bij tien plantjes per groep zelf al onzeker. Trek nog eens tien plantjes en er komt een andere d uit. Hoe hard dat wiebelt en wat je eraan kunt doen, gaat de oefening over power.
Z) De aanname onder de gepoolde SD is dat de twee groepen ongeveer even veel spreiden. Je voegt hun spreidingen namelijk samen tot één lineaaltje, en dat mag alleen als het bij allebei ongeveer past. Hier: 0.58 tegen 0.44, de grootste is 1.32 keer de kleinste. Dat is geen probleem.
De weg terug, voor als dat wél was misgegaan:
- Blijft staan: het ruwe verschil van 0.49 gram bij c), en de twee gemiddelden en spreidingen bij b). Dat zijn beschrijvingen van deze twintig plantjes.
- Doe je over: de gepoolde SD bij d) en dus de d bij e). Je zou dan geen gezamenlijk lineaaltje meer gebruiken, maar de spreiding van één groep — meestal de controlegroep — en dat er duidelijk bij zeggen.
En let op wat er níét in dit rijtje staat: dat de gewichten normaal verdeeld moeten zijn. Cohens d is een verhouding en toetst niets; hij vraagt alleen om een lineaaltje dat bij allebei past.
Nog iets om op te merken: dit is dezelfde eis die de t-toets in Oefening 9.2 juist líét vallen. Daar draaide je Welch, en die gunt elke groep zijn eigen spreiding. Cohens d kan dat niet — hij moet één lineaaltje kiezen, anders valt er niets te delen. De toets is dus schappelijker geworden dan de maat ernaast, en dat is precies waarom je hier nog wél even naar die twee SD’s kijkt.
tentamen
Tentamenvragen
de deelsom · gepoolde SD · echt tegenover groot · wat d niet zegt
Deze vijf hebben de vorm waarin een tentamen dit onderwerp stelt: vier opties, en precies één is de beste — de andere drie kunnen best waar klínken en toch niet het beste antwoord zijn. Rekenen hoeft nergens: bij vraag 1 hoef je de goede breuk alleen te herkennen, niet uit te rekenen.
1. Tien controleplantjes tegen tien behandelde. Het verschil in gemiddeld gewicht is 0.49 gram. De controlegroep spreidt 0.58 gram, de behandelde 0.44 gram, en samengevoegd tot één lineaaltje is dat een gepoolde SD van 0.52 gram. Welke som geeft Cohens d?
- 0.49 / (0.58 + 0.44)
- 0.49 / 0.52
- 0.49 / 0.44
- 0.49 / 10
2. Bij die plantjes komt d = 0.95 uit. Welke omschrijving van dat getal is de beste?
- Het voer maakt een plantje 0.95 gram zwaarder.
- Van de behandelde plantjes weegt 95% meer dan een controleplantje.
- De twee groepsgemiddelden liggen bijna één gezamenlijke standaardafwijking uit elkaar — het lineaaltje past er dus bijna precies één keer tussen, en dat is wat de deelsom uitrekent.
- Het verschil is significant, want 0.95 ligt boven de grens van 0.8 die Cohen “groot” noemt, en bij een effect van die omvang hoef je niet meer te toetsen of het er is.
3. Voor dezelfde twee groepen plantjes stond eerder p = .048 op het scherm, en nu staat er d = 0.95. Welke uitspraak is de beste?
- De p zegt hoe zeker je ervan bent dát het voer het gewicht verandert — hier nét — en de d hoe véél het verandert; hier fors.
- Omdat de p maar nét onder .05 ligt, moet het effect van het voer op het gewicht wel klein zijn; anders had de toets er ruimer overheen gezeten.
- De twee getallen spreken elkaar tegen — nét overtuigend tegenover fors — dus er is ergens in de berekening iets misgegaan.
- Bij tien plantjes per groep mag je geen effectgrootte rapporteren, want op zo’n klein aantal is d te wiebelig om op te schrijven.
4. De gepoolde SD voegt de spreiding van de twee groepen samen tot één lineaaltje. Wanneer mag dat?
- Altijd, want Cohens d toetst niets — hij is alleen een verhouding, en aan een verhouding stel je geen eisen.
- Alleen als het gewicht in allebei de groepen normaal verdeeld is, want anders zegt een standaardafwijking niet zoveel.
- Alleen als de twee groepen even groot zijn, want bij tien tegen twintig zou de grootste groep het lineaaltje bepalen.
- Alleen als de twee groepen ongeveer even veel spreiden; hier is 0.58 / 0.44 = 1.32, en het huis houdt onder de 2 aan.
5. Cohens d van de plantjes is 0.95 en die van de pinguïns 2.87. Het eerste getal komt van een weegschaal met plantjes van vijf gram, het tweede van een weegschaal met vogels van vijf kilo. Waarom mag je die twee getallen tóch naast elkaar leggen?
- Omdat je bij allebei grammen door grammen deelt, zodat de eenheid wegvalt en er een kaal getal overblijft.
- Omdat de twee onderzoeken allebei precies twee groepen vergelijken, en twee groepen maken de opzet hetzelfde.
- Dat mag niet: een plantje van vijf gram en een vogel van vijf kilo staan niet op dezelfde schaal, dus hun verschillen ook niet.
- Omdat 0.95 en 2.87 allebei boven Cohens grens van 0.8 voor een groot effect liggen, en daarmee in dezelfde klasse vallen.
1 b · 2 c · 3 a · 4 d · 5 a
Hieronder staat per vraag waaróm, en waarom de drie andere opties aantrekkelijk zijn. Heb je er een goed, dan kun je die overslaan.
1. b. Het verschil gedeeld door het gezamenlijke lineaaltje geeft 0.95.
Tik je die som na met de twee gedrukte getallen, dan komt er 0.49 / 0.52 = 0.94 uit. Dat is geen andere som maar dezelfde val als bij f) hierboven: R deelt 0.494 door 0.5176 en rondt pas aan het eind af. Rond af aan het eind, nooit onderweg — en verwacht bij de drie getallen hieronder dus een honderdste speling als je met de gedrukte waarden werkt.
a deelt door de som van de twee spreidingen en geeft 0.48 — bijna de helft, want twee spreidingen optellen is iets heel anders dan ze samenvoegen. c deelt door de spreiding van één groep en geeft 1.12. Dat is geen onzinnige som: wijken de twee groepen sterk in spreiding af, dan is een enkele groep juist de uitweg (zie vraag 4) — maar dan neem je de controlegroep, 0.58, en niet de 0.44 van deze optie, en je zegt erbij dat je het gedaan hebt. Hier past het gezamenlijke lineaaltje gewoon. d deelt door het aantal plantjes en geeft 0.05. Dat is de verwarring met een standaardfout: dáár speelt het aantal mee, in een effectgrootte niet — d blijft hetzelfde of je nu tien of duizend plantjes weegt.
2. c. Precies de deelsom terugvertaald: bijna één lineaaltje tussen de twee gemiddelden. a plakt de grammen er weer aan vast die je net had weggedeeld; het ruwe verschil is 0.49 gram en dát is de zin die wél over grammen gaat. b maakt er een percentage plantjes van, en dat is een andere maat. Die maat bestaat trouwens echt en staat bij h) hierboven: leg je elke behandelde plant naast elke controleplant, dan wint de behandelde er 75 van de honderd — niet 95. d haalt twee knoppen door elkaar. Cohens grens van 0.8 gaat over groot, niet over significant, en een groot effect ontslaat je nergens van toetsen: de oefening over power laat zien dat een opzet met tien per groep een middelgroot effect meestal mist, hoe groot dat effect ook echt is. Over die tweede knop gaat vraag 3.
3. a. Twee vragen, twee getallen: is er iets? en hoeveel? b is de verwarring waar dit blok tegen bestaat — nét significant zegt iets over hoe overtuigend het bewijs is, niets over de grootte van het effect. c ziet een tegenspraak die er niet is: een klein onderzoek kan een groot effect vinden en er tóch maar nét bewijs voor hebben. d verzint een verbod; tien per groep maakt de d wel wiebelig, en dat is een reden om er voorzichtig over te praten, geen reden om hem weg te laten.
4. d. Je voegt twee spreidingen samen tot één getal, en dat mag alleen als dat ene getal bij allebei ongeveer past. Deel de grootste door de kleinste — 0.58 / 0.44 = 1.32 — en leg dat naast de grens die dit huis aanhoudt: onder de 2 is het geen probleem. Bij Z) hierboven staat dezelfde som. a klopt in wat het beweert — Cohens d toetst inderdaad niets — en trekt daaruit de verkeerde conclusie. Dat hij niets toetst, betekent dat hij geen verdelingsaanname nodig heeft; het betekent niet dat hij geen lineaaltje nodig heeft dat past. b is precies de aanname die hier niet geldt, en dat staat met zoveel woorden bij Z) hierboven: normaliteit hoort bij toetsen, niet bij een verhouding. c verwart even groot met even breed. De twee groepen hebben hier allebei tien plantjes, en dat doet er voor deze vraag niets toe.
5. a. Grammen gedeeld door grammen laat een kaal getal achter, en juist daardoor kan het reizen — dat is waarom een meta-analyse tientallen onderzoeken kan optellen die anders onvergelijkbaar waren. b noemt iets waars dat niets verklaart: twee groepen heb je bij elke t-toets, en toch zijn uren slaap en grammen gewicht niet optelbaar. c kijkt naar de weegschalen en niet naar de deelsom; de weegschalen verschillen inderdaad, en dat is precies het probleem dat d oplost. d gebruikt de vuistregels van Cohen als bewijs, terwijl het een etiket achteraf is — en het blok noemt die vuistregels niet voor niets een noodgreep.
Wil je de drie afleider-getallen uit vraag 1 zelf zien ontstaan — geen ervan is overgetikt:
pg <- read.csv("plantgroei.csv")
ct <- pg$gewicht[pg$groep == "controle"]
v2 <- pg$gewicht[pg$groep == "behandeling2"]
sp <- sqrt(((length(ct)-1)*var(ct) + (length(v2)-1)*var(v2)) /
(length(ct)+length(v2)-2))
# vraag 1b — en zo komt de val eruit: eerst afronden, dan pas delen → 0.94
round(mean(v2) - mean(ct), 2) / round(sp, 2)
# vraag 1a — delen door de SOM van de twee spreidingen → 0.48
(mean(v2) - mean(ct)) / (sd(ct) + sd(v2))
# vraag 1c — delen door de spreiding van één groep → 1.12
(mean(v2) - mean(ct)) / sd(v2)
# vraag 1d — delen door het aantal plantjes → 0.05
(mean(v2) - mean(ct)) / length(v2)◠ Zelfde vorm in het boek
Hier: een verschil in grammen dat pas iets zegt als je het door de spreiding deelt.
In het boek: W4 — Hangen ze samen? (waar de effectgrootte als familie geplant wordt)
Daar is de effectgrootte geen los trucje maar een familie — d, r, en de rest zijn allemaal manieren om “hoe groot?” een eenheidloze maat te geven.
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.↩︎