Hoofdstuk 6 · Het betrouwbaarheidsinterval
Hoe zeker is je schatting · confidence interval
De prikkel
Dertig potten in een kas, dertig dezelfde plantjes.1 Tien kregen gewoon water, tien kregen plantenvoer één, tien plantenvoer twee. En toen — dit is het onsentimentele deel — werden alle dertig geknipt, gedroogd en gewogen. Droog, want nat gewicht is vooral water, en water zegt niks over groeien.
De controle-potten laten we vandaag even links staan; het gaat ons om de twee soorten voer. Voer één: gemiddeld 4.66 gram droge plant. Voer twee: 5.53 gram. Verschil: 0.87 gram, in het voordeel van voer twee.
En nu níét de vraag die je verwacht. Niet “is er verschil, ja of nee” — dat is de bijvraag. De echte vraag is: hoe zeker is die 0.87? Er stonden maar tien potten per groep. Had de kweker tien ándere potten gepakt, was het dan 0.9 geweest? 0.5? Nul komma niks? Een getal uit een steekproef is een schatting, en een schatting zonder onzekerheids-bandje eromheen is een mening met cijfers. Dat bandje gaan we maken.
Speel het
⬇ Download de data — plantgroei.csv
Haal de potten binnen, pak de twee voer-groepen eruit, en laat R het verschil uitrekenen — mét het bandje, want dat doet t.test er gratis bij.
pg <- read.csv("plantgroei.csv")
voer <- pg[pg$groep %in% c("behandeling1", "behandeling2"), ]
tapply(voer$gewicht, voer$groep, mean) # → 4.66 en 5.53
t.test(gewicht ~ groep, data = voer) # → t = -3.01, p = .009
# 95 percent confidence interval:
# -1.48 -0.25Twee regels uit die uitvoer verdienen je aandacht. Eerst het min-teken: R rekent voer één mín voer twee, en omdat voer twee zwaarder uitpakt is het verschil −0.87. Niks engs, gewoon de rekenvolgorde.
En dan de regel waar dit blok om draait: 95 percent confidence interval: −1.48 tot −0.25. Dat is het betrouwbaarheidsinterval / confidence interval: niet één schatting maar een héle reeks — alle waarden voor het echte verschil die goed bij deze dertig potten passen. Eerste kijkvraag, altijd: zit de 0 erin? Kijk zelf: van −1.48 tot −0.25, en nul valt erbuiten. “Geen verschil” past dus níét bij deze data. Maar waar komt zo’n bandje eigenlijk vandaan? Dat kun je vóélen, zonder één formule.
Schud het
In andere blokken schudden we: band doorknippen, kijken of het verschil wegvalt. Vandaag maken we een andere beweging — we trekken opnieuw. Het probleem is namelijk: je hebt maar één steekproef, en je zou willen weten wat er gebeurd was met een ándere. Nieuwe potten kweken duurt weken. Maar er is een brutale sluiproute: doe alsof je eigen data de kas is. Trek uit je tien potten opnieuw tien potten, mét teruglegging — sommige potten kom je dubbel tegen, andere sla je net over. Elke trekking is een wereld die nét even anders liep, met een nét even ander verschil. Doe dat duizend keer. Dit heet de bootstrap / bootstrap.
b1 <- voer$gewicht[voer$groep == "behandeling1"]
b2 <- voer$gewicht[voer$groep == "behandeling2"]
# één keer opnieuw trekken: tien potten mét teruglegging, per groep
mean(sample(b1, replace = TRUE)) - mean(sample(b2, replace = TRUE))
# doe het 1000 keer en kijk waar de verschillen landen
set.seed(42)
werelden <- replicate(1000,
mean(sample(b1, replace = TRUE)) - mean(sample(b2, replace = TRUE)))
hist(werelden) # een bergje rond -0.87
abline(v = 0, col = "red", lwd = 2) # en dáár staat de nul
quantile(werelden, c(.025, .975)) # → -1.39 en -0.29Kijk naar dat plaatje. Duizend werelden die dansen rond je schatting — niet rond nul, zoals bij het schudden, maar rond −0.87, want elke wereld is uit jóúw data getrokken en draagt het verschil in zich mee. De middelste 95% van die dans loopt van −1.39 tot −0.29. Herken je ’m? Dat is — op wat afronding na — hetzelfde bandje dat t.test je gaf. Het betrouwbaarheidsinterval ís de dans: de formule is alleen de snelweg ernaartoe.
En de nul? Die staat als rode streep búíten het feest: 999 van de 1000 werelden landen onder nul, één verdwaalde er net overheen. Zit nul buiten de dans, dan is het verschil er echt. Zo lees je voortaan élk interval: eerst kijken waar het ligt, dan pas of nul nog mee mag doen.
Snap het
Wat zegt dat interval nou eigenlijk? Dit: het echte verschil tussen de twee voeren — dat van álle mogelijke potten, niet alleen deze dertig — kan van alles zijn tussen een kwart gram en bijna anderhalve gram. Dat is eerlijk: het verschil is echt (nul doet niet mee), maar over hoe gróót het is, zijn deze data nog behoorlijk ruimhartig. En zie je meteen waarom het interval rijker is dan de toets: t = −3.01, p = .009 zegt alleen “niet nul”. Het interval zegt “niet nul, én ergens tussen klein en fors”. Daarom kijken we schattend eerst naar het interval; de toets is de bijvraag die er al in zit.
Nu de zin die íédereen opschrijft en die tóch fout is: “er is 95% kans dat het echte verschil tussen −1.48 en −0.25 ligt.” Klinkt redelijk. Klopt niet. Het echte verschil is geen kansspel — het ligt al ergens vast, wij weten alleen niet waar. En dít interval staat ook al vast: het vangt het echte verschil, of het mist het. Daar valt niks meer aan te verloten. De 95% gaat over de methode: doe het hele ritueel — steekproef, interval — honderd keer, en ongeveer 95 van die honderd intervallen vangen de echte waarde. Denk aan een visser met een net dat 95 van de 100 worpen raak is. Over déze ene worp kan hij maar één ding zeggen: het net komt uit een goede familie. Jouw bootstrap liet precies dat zien — élke nieuwe trekking een iets ander interval, en het vertrouwen zit in de hele dans, niet in één wereld.
Nog één blik, op de breedte. Breed interval = onzekere schatting; smal interval = precieze. Dit interval is aan de brede kant — logisch, tien potten per groep is een handjevol. Wil je het smaller? Meer potten. De vraag “hoe groot is het effect, en hoe precies weten we dat?” is bijna altijd interessanter dan “significant, ja of nee” — en het interval beantwoordt ze allebei in één regel.
◠ Zelfde vorm in het boek
Hier: één verschil van 0.87 gram, en een bandje eromheen dat vertelt hoe stevig dat getal staat.
In het boek: W6 — Bestaat het verschil echt?
Daar komt het interval vóór de toets — eerst hoe groot en hoe precies, en dan pas de bijvraag of nul nog mee mag doen.
TODO (broertje-blok, geschreven 24-7 naar het charter): W6-anker en formulering checken zodra dat boek-hoofdstuk staat. Simulatie is hier bootstrap (trekken mét teruglegging), niet shuffle — dans-signatuur aangepast: werelden dansen rond de schátting, nul moet buiten de dans vallen. Kop “Schud het” aangehouden (blok-vorm vast); “trek opnieuw” leeft in de tekst — evt. later hernoemen als Ben dat wil. Bootstrap-getallen (−1.39/−0.29, 999 van 1000 onder nul) zijn nagerekend met set.seed(42). De JASP-tweeling deelt deze tekst; alleen “Speel het / Schud het” verschilt (bootstrap is geen JASP-knop → speeltje + hop).
Voetnoten
PlantGrowth — Dobson (1983), An Introduction to Statistical Modelling; het klassieke groei-experiment dat met R wordt meegeleverd (
datasets::PlantGrowth). Alle getallen in dit blok zijn op die échte data nagerekend.↩︎