Hoofdstuk 11 · Het doorgegeven verschil
Mediatie: direct, indirect en totaal · mediation
De prikkel
Een zomer boven New York, honderdelf dagen lang gemeten.1 Op de dagen met veel zon ligt er meer ozon in de lucht; op de bewolkte dagen minder. Reken je die band uit, dan komt er een helling van 0.13 uit: elke extra streepje zonnestraling gaat, in déze zomer, samen met zo’n 0.13 ppb meer ozon.
Zon maakt ozon — het klinkt als een rechte lijn van het één naar het ander. Maar ozon ontstaat niet zómaar uit licht; het vormt zich fotochemisch, en dat gaat sneller als de lucht warm is. En zon maakt de lucht warm. Dus misschien loopt het zon-effect niet kaarsrecht naar de ozon, maar neemt het onderweg een omweg: zon → warmere lucht → meer ozon. De vraag van dit blok is niet óf zon en ozon samenhangen — dat weten we al — maar langs welke weg. Hoeveel van die 0.13 gaat rechtstreeks, en hoeveel gaat via de temperatuur?
Speel het
⬇ Download de data — luchtkwaliteit.csv
We knippen dat ene getal van 0.13 in twee stukken. Draai daarvoor drie modellen: de hele band tussen zon en ozon, dan de band tussen zon en temperatuur, en dan het model waarin zon én temperatuur samen de ozon voorspellen.
lucht <- read.csv("luchtkwaliteit.csv")
lucht <- lucht[complete.cases(lucht[c("ozon","zon","temp_F")]), ] # n = 111
# het totale effect (c): zon → ozon, kaal
coef(lm(ozon ~ zon, data = lucht))["zon"] # 0.127
# pad a: zon → temperatuur
coef(lm(temp_F ~ zon, data = lucht))["zon"] # 0.0307
# het model met beide: hierin zitten pad b én het directe effect c'
coef(lm(ozon ~ zon + temp_F, data = lucht))
# zon 0.057 ← direct effect (c')
# temp_F 2.278 ← pad bVier getallen, en ze passen op elkaar als puzzelstukjes. Het totale effect van zon op ozon is 0.127. Zet je de temperatuur ernaast, dan zakt de zon-helling naar 0.057 — dát stuk loopt rechtstreeks, buiten de warmte om. Wat ertussenuit viel, ging via de omweg: zon warmt de lucht op met 0.0307 graad per streepje (pad a), en elke graad warmer levert 2.278 ppb meer ozon op bij gelijke zon (pad b). Vermenigvuldig die twee — 0.0307 × 2.278 — en je krijgt 0.070: het stuk zon-effect dat door de temperatuur is doorgegeven. En kijk: 0.057 + 0.070 = 0.127. Direct plus indirect is precies het totaal.
Trek het opnieuw
Dat indirecte pad van 0.070 — is dat echt, of kan zo’n omweg-getal ook uit toeval opborrelen? We willen het toetsen, maar er is een addertje: a·b is een product van twee geschatte getallen, en zulke producten hebben een scheve verdeling. Een nette symmetrische foutmarge klopt hier niet. Dus we doen het anders: we laten de data ons zélf vertellen hoe wiebelig die 0.070 is, door hem duizend keer opnieuw te trekken.
Het heet bootstrappen. Je trekt uit je 111 dagen een nieuwe steekproef van 111 dagen — mét teruglegging, dus sommige dagen komen dubbel voorbij en andere niet. Op die nieuwe steekproef herbereken je a·b. Duizend keer, duizend nét iets andere werelden, duizend waarden voor het indirecte pad. Samen vormen ze een verdeling, en in het middelste stuk daarvan — tussen de 2.5% en de 97.5% — ligt je 95%-interval.
set.seed(42)
indirect <- replicate(1000, {
s <- lucht[sample(nrow(lucht), replace = TRUE), ] # nieuwe steekproef
a <- coef(lm(temp_F ~ zon, data = s))["zon"]
b <- coef(lm(ozon ~ zon + temp_F, data = s))["temp_F"]
a * b # herbereken a·b
})
hist(indirect) # een scheef bergje, rechts uitlopend
quantile(indirect, c(.025, .975)) # 0.023 tot 0.113Kijk waar dat bergje ligt: het 95%-interval loopt van 0.023 tot 0.113 — en het komt met geen enkele voet aan de nul. Duizend hertrekkingen, en het indirecte pad blijft staan. De omweg via de temperatuur is niet toeval; hij is echt.
Snap het
Wat je hier hebt gedaan heet mediatie, en de kern past in één zin: het totale effect valt uiteen in een direct deel en een indirect deel.
\[ \underbrace{0.127}_{\text{totaal } (c)} \;=\; \underbrace{0.057}_{\text{direct } (c')} \;+\; \underbrace{0.070}_{\text{indirect } (a\cdot b)} \]
Ruim de helft — 55% — van het zon-effect op ozon loopt niet rechtstreeks, maar via de temperatuur. Zon warmt de lucht, warme lucht maakt ozon. De temperatuur is de mediator: de tussenstap die een stuk van het effect doorgeeft. Dat is de vraag die mediatie stelt — hoeveel van het effect van A op C loopt via B? — en het antwoord is hier: meer dan de helft.
Maar nu het addertje, en het is een grote. Die pijlen heb jíj erin gelegd. De data tonen je drie variabelen die samenhangen — meer niet. Dat zon vóór temperatuur komt, en temperatuur vóór ozon, dat weet je niet uit de getallen; dat weet je uit de natuurkunde. De fotochemie zegt: zon warmt op, warmte maakt ozon. Die kennis leg je bovenop de cijfers, en pas dán mag je het een mediatiemodel noemen. Draai de pijlen om en de wiskunde loopt net zo hard door — de getallen protesteren niet. Een mediatiemodel is een hypothese over hoe het werkt, geen bewijs dát het zo werkt.
Waarom dat scherp houden? Neem een tegenvoorbeeld. Stel je zou “pinguïnsoort → vinlengte → gewicht” als mediatie opschrijven: soort werkt op gewicht via de vin. De rekensom levert keurige getallen op — maar de pijl klopt niet, want vinlengte veroorzaakt geen gewicht; het zijn twee dingen die de soort samen groot maakt. Daar is de “mediator” in werkelijkheid een gemeenschappelijke oorzaak, en het model liegt met een uitgestreken gezicht. Bij zon → temperatuur → ozon durven we de pijlen wél te tekenen, niet omdat de cijfers mooier zijn, maar omdat de fysica de richting kent. De statistiek levert de grootte; de richting moet ergens anders vandaan komen.
◠ Zelfde vorm in het boek
Hier: één totaal effect dat uiteenvalt in een rechtstreeks deel en een deel dat via een tussenstap wordt doorgegeven.
In het boek: W11 — Het doorgegeven verschil
Daar draait het om dezelfde ontleding — direct, indirect, totaal — en om de waarschuwing eronder: de pijlen tussen de variabelen leg jij erin, de data tonen alleen dat ze samen bewegen.
TODO (broertje-proof): stem-pas nog te doen — verhaal-stem-opening (de zomer boven New York) kan stiller/trager; docenten-stem is een eerste pas. Nummering (Hoofdstuk 11 / W11) checken zodra dat hoofdstuk staat. De JASP- en SPSS-tweeling delen deze tekst; alleen “Speel het” en “Trek het opnieuw” verschillen (JASP doet de bootstrap via de Mediation-module, SPSS via PROCESS model 4). Bootstrap-CI verifieerd op n=111 (seed 42, 1000 hertrekkingen): [0.023, 0.113], boven nul.
Voetnoten
airquality— dagelijkse metingen, New York, mei–september 1973 (New York State Department of Conservation & National Weather Service); via het R-basispakketdatasets. Complete gevallen n = 111. Alle getallen in dit blok zijn op die échte data nagerekend.↩︎