Tweede beweging · Verschillen koppelen

Oefening 3.1 · Correlatie en scatterplot

Samenhang tussen twee variabelen · correlation & scatterplot

Data bij deze oefeningdiamantjes.csv de twaalf steentjes uit het boek · penguins.csv 342 pinguïns · bigfive.csv 2634 ingevulde vragenlijsten · wat elke kolom betekent

prikkel

Langere snavel, ondiepere snavel?

samenhang · negatieve r

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.

De snavel in profiel: lengte loopt van voor naar achter, diepte is de hoogte van boven naar onder. (Voorlopige handschets — vervangt Bens eigen tekening.)

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

Waar r vandaan komt — de twaalf steentjes eerst

covariantie · sum of products

Twee kolommen, twaalf steentjes: karaat en glans, netjes naast elkaar. En jij wilt één getal dat zegt hoe die twee samen bewegen. Het halve werk heb je in het boek al gedaan — van elk steentje ken je de afwijking van het gemiddelde, de blauwe streepjes. Alleen heeft elk steentje er hier twéé: eentje op karaat (het gemiddelde is 1.60) en eentje op glans (gemiddelde 50.00).

Dan de zet die je uit het boek kent: vermenigvuldig die twee afwijkingen per steentje met elkaar. Wijzen ze dezelfde kant op — allebei erboven, of allebei eronder — dan komt er plus uit; spreken ze elkaar tegen, dan min.

Doe er twee met de hand, dan zie je het gebeuren. De twaalf steentjes hebben in het boek namen, en twee ervan komen hier goed uit. Anna weegt 1.0 karaat en glanst 20, dus haar afwijkingen zijn −0.6 karaat en −30 glanspunten: allebei onder het gemiddelde, en min keer min is plus. Haar bijdrage is +18. Kees weegt 2.1 karaat en glanst 30 — zwaar, maar dof. Zijn afwijkingen zijn +0.5 en −20, die spreken elkaar tegen, en zijn bijdrage is −10.

afwijking op karaat afwijking op glans die twee maal elkaar
Anna −0.6 −30 +18
Kees +0.5 −20 −10

Bij onze twaalf duwen acht steentjes de som omhoog, drie liggen precies op een gemiddelde en tellen dus nul, en alleen Kees telt tegen. Tel alles op en er staat 54.00 — die som heet de sum of products. Deel door n − 1 = 11, en daar is hij: de covariantie (Sxy), 4.91. Het gemiddelde rechthoekje.

En nu de vraag die je bij élk getal hoort te stellen: 4.91 wát? Reken de eenheid maar gewoon mee — een afwijking in karaat keer een afwijking in glans is… karaat-glanzen. Is 4.91 karaat-glanzen veel samenhang? Weet je niet. Niemand denkt in karaat-glanzen. Ruw is ruk. De covariantie zit nog op de schaal van zijn twee variabelen; je kunt er de ríchting aan aflezen — plus, dus zwaarder gaat samen met glanzender — maar niet de sterkte.

De reparatie is één deling. Deel de covariantie door de twee standaardafwijkingen — 0.3908 karaat en 21.7423 glanspunten — en kijk wat er met de eenheden gebeurt: karaat streept weg tegen karaat, glans tegen glans. Wat overblijft is een kaal getal zonder eenheid, de gestandaardiseerde versie van dezelfde samenhang, en dat getal kan nooit buiten −1 en +1 komen: r = .58. Dát kun je in één keer lezen, bij diamantjes net zo goed als bij pinguïns.

OpmerkingEerst zoals in het boek — bouw de correlatie zelf
d <- read.csv("diamantjes.csv")

# de ruwe samenhangsmaat: nog op de schaal van karaat en glans
cov(d$karaat, d$glans)     # → 4.91

# deel door de twee standaardafwijkingen — de eenheid valt weg
cov(d$karaat, d$glans) / (sd(d$karaat) * sd(d$glans))     # → 0.5777

# en dat is precies wat cor() in één keer doet
cor(d$karaat, d$glans, method = "pearson")   # → 0.5777  ("pearson" is de standaard)

# en welke lijn hoort daarbij
model.karaat <- lm(glans ~ karaat, data = d)   # → -1.43 + 32.14 · karaat

plot(d$karaat, d$glans)
abline(model.karaat)
library(dplyr); library(ggplot2)
d <- read.csv("diamantjes.csv")

d |> summarise(S_xy = cov(karaat, glans),
               r    = cor(karaat, glans, method = "pearson"))
lm(glans ~ karaat, data = d)

# in ggplot: eerst de assen, dan de lagen erop
ggplot(d, aes(karaat, glans)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

cor() is dus geen zwarte doos: het is jouw covariantie, gedeeld door jouw twee standaardafwijkingen. R doet alleen het strepen sneller.

Let op het verschil tussen wat je scherm zegt en wat je zelf opschrijft. R drukt 0.5777 af, met nul en al; in de tekst hierboven staat r = .58. Dat is geen slordigheid van een van de twee. Een uitvoerregel citeert je scherm; jouw eigen zin volgt APA, en daar laat je de nul weg omdat het ontbréken ervan iets zegt: dit getal kan niet voorbij de 1 komen. Alle # →-regels in dit boekje staan daarom in schermvorm, zodat je kunt nakijken of jij hetzelfde voor je hebt. Kwadrateer die .58 en je hebt r² = .33 — een derde van de verschillen in glans loopt langs het gewicht, de rest niet.

OpmerkingEerst de twaalf diamantjes

Twee vragen voor je verder leest, en dan mag je los op iets nieuws.

a) Een karaat is gewoon een gewicht: 200 milligram. Weeg de steentjes dus eens in milligram (d$karaat * 200) en vraag de covariantie opnieuw op. (één getal, en één zin over wat er wél en niet veranderd is aan de twaalf steentjes)

b) Deel die nieuwe covariantie door de twee standaardafwijkingen die er nu bij horen. (één getal, en zeg wat je herkent)

a) 981.82 milligram-glanzen — tweehonderd keer de covariantie van daarnet. (Reken je 200 × 4.91 met de hand, dan krijg je 982.00; R vermenigvuldigt de onafgeronde 4.9091. Zelfde soort scheefte als overal waar je met een gedrukt getal verder rekent.) En er is niets aan de steentjes veranderd: geen enkel gewicht, geen enkele glans, geen enkel punt in de wolk. Alleen de maatstok waarmee je het gewicht opschrijft is anders. Een getal dat tweehonderd keer zo groot wordt zodra je een andere maat kiest, kan niet zeggen hoe sterk een verband is.

cov(d$karaat * 200, d$glans)   # → 981.82

b) .58 — hetzelfde getal als daarnet. Delen door de standaardafwijkingen haalt de maatstok eruit, en dat is precies waarom de correlatie bestaat.

cov(d$karaat * 200, d$glans) / (sd(d$karaat * 200) * sd(d$glans))   # → 0.5777

Nu jij — bij de pinguïns, die je inmiddels kent. Nieuwe vraag aan bekende beesten: hangt de lengte van een snavel samen met zijn diepte?

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.

OpmerkingIn R · trek eraan
peng <- read.csv("penguins.csv")

plot(peng$snavellengte, peng$snaveldiepte)      # 342 stippen, een wolk
cor(peng$snavellengte, peng$snaveldiepte, method = "pearson")   # → -0.235

Daar 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.

snap het

Drie soorten in één wolk

confounding · derde speler · omgeklapt teken · r²

De verleiding is nu te schrijven: “bij pinguïns gaat een langere snavel samen met een ondiepere.” Het getal is netjes uitgerekend, de zin lijkt te volgen. En toch is-ie mis. Kleur de wolk eens per soort:

OpmerkingIn R · kleur de wolk
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, method = "pearson")  # → +0.643

Twee handelingen in vier regels: één soort uit de tabel snijden, en de wolk per soort kleuren. Het uitsnijden staat bij rijen — filteren en sorteren, het kleuren bij kleuren en vormen — met daar ook de vraag die hier onder tafel blijft: wanneer geef je de soorten kleuren, en wanneer elk hun eigen vakje?

Ineens 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 rekenmachine zei: over deze 342 dieren is r precies −.24. Daar valt niets op af te dingen; reken het maar na.
  • De scatterplot zei: klopt — maar niet wát je denkt. De richting is een luchtspiegeling van de soort.

Uitgerekend en waar zijn dus twee verschillende dingen. Een correlatie kan tot achter de komma kloppen 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.)

jouw beurt

Van snavel naar vin

correlatie berekenen · kleuren per soort · soortverschil

Van snavel naar vin. In penguins.csv zitten ook de kolommen vinlengte (in mm) en gewicht (in gram). Zelfde recept, andere vraag: hangen die twee samen?

OpmerkingIn R · zet klaar
peng <- read.csv("penguins.csv")
OpmerkingJouw beurt

Beantwoord de vragen op volgorde; ze bouwen op elkaar. De eerste drie zijn de route die je hierboven op de twaalf steentjes hebt zien lopen — ruw, en dan pas gestandaardiseerd. De laatste heet met opzet Z) en niet k): de wolk-vraag staat altijd achteraan.

Het zijn er elf, en dat is te veel voor één zitting. Na f) heb je een hele correlatie van begin tot eind gemaakt — dat is een goed moment om te stoppen en er morgen weer in te vliegen. Bij g) begint iets anders: daar gaat het niet meer over het getal maar over wie er in de wolk zit.

a) Reken de covariantie uit tussen de vinlengte en het gewicht. (rapporteer Sxy mét zijn eenheid — en die eenheid is twee woorden lang)

b) Doe hetzelfde nog eens, maar zet het gewicht eerst in kilo’s (peng$gewicht / 1000). (het nieuwe getal, en één zin over waarom dit een probleem is voor een maat die sterkte zou moeten uitdrukken)

c) Deel allebei je covarianties door de twee standaardafwijkingen die erbij horen. (twee getallen, en zeg wat er met de eenheid gebeurd is)

d) Teken de wolk. (één zin over welke kant hij op hangt en hoe strak)

e) Zeg in gewone taal wat het teken hier betekent. (één zin, over pinguïns en niet over getallen)

f) Kwadrateer de correlatie. (rapporteer r², en één zin over wat dat getal wél zegt en wat het niet zegt)

g) Vertrouw dat getal niet voor je de soorten hebt gezien. Kleur de wolk per soort en reken r apart binnen elke soort. (drie correlaties, elk met zijn n)

h) En toch is de r over alle 342 heen hóger dan binnen élke soort afzonderlijk. Hoe kan dat?

Doe het in twee stappen. Vraag eerst per soort het gemiddelde gewicht en de gemiddelde vinlengte op — zes getallen, twee regels code. Kijk daarna naar die zes en probeer te zeggen wat de Gentoo’s anders maakt. (twee of drie zinnen; kom je er niet uit, dan is het antwoord hieronder geen nederlaag maar de bedoeling)

i) Bij de snavels hierboven klapte het teken om; hier niet. Wat is het verschil? (twee zinnen)

j) Schrijf je bevinding op in één eerlijke zin. (N, allebei de variabelen, de r over alles én het bereik binnen de soorten)

Z) Is de wolk recht, en zitten er geen punten tussen die de boel verneuken? Een r vat één ding samen: hoe strak de punten om een rechte lijn liggen. Kijk dus terug naar je wolk uit d) — buigt hij ergens, en hangt er één punt zo ver weg dat het in zijn eentje aan het getal trekt? (twee korte uitspraken, en zeg welke van je antwoorden hierboven eraan hangen)

a) Sxy = 9824.42 millimeter-grammen. Zes cijfers voor de komma, en een eenheid die je nergens anders tegenkomt.

cov(peng$vinlengte, peng$gewicht)   # → 9824.42

b) In kilo’s is het 9.8244 millimeter-kilogrammen. Precies duizend keer kleiner, want je hebt duizend keer kleinere getallen in de ene kolom gezet — en verder niets. Geen enkele pinguïn is van gewicht veranderd, geen enkel punt is in de wolk verschoven, en toch staat er nu een ander getal. Een maat die van je weegschaal afhangt, kan niet zeggen hóé sterk een verband is.

cov(peng$vinlengte, peng$gewicht / 1000)   # → 9.8244

c) Allebei .87. De standaardafwijking van de vinlengte is 14.0617 mm, die van het gewicht 801.9545 g, en die van het gewicht in kilo’s 0.8020 kg. Deel de covariantie door het product van de twee die erbij horen en je krijgt twee keer hetzelfde kale getal.

En dat kómt doordat de eenheid weg is. In de teller stonden millimeter-grammen; in de noemer staat millimeter maal gram. Die vallen tegen elkaar weg, en wat overblijft kan niet meer weten in welke maat je gewogen hebt.

cov(peng$vinlengte, peng$gewicht) / (sd(peng$vinlengte) * sd(peng$gewicht))    # → 0.8712
cov(peng$vinlengte, peng$gewicht / 1000) / (sd(peng$vinlengte) * sd(peng$gewicht / 1000))   # → 0.8712

d) Een strak stijgende wolk, van linksonder naar rechtsboven, en veel minder rommel eromheen dan bij de snavels.

plot(peng$vinlengte, peng$gewicht)

e) Pinguïns met langere vinnen zijn zwaarder. Meer niet — er staat niet dat de vin het gewicht maakt.

f) r² = .76. Drie kwart van alle verschil in gewicht loopt langs de vinlengte mee. Wat het níét is: een verklaring. Het is boekhouding — welk deel van de verschillen de twee maten delen, niet waaróm ze dat doen.

g) Adélie r = .47 (n = 151), Chinstrap r = .64 (n = 68), Gentoo r = .70 (n = 123).

plot(peng$vinlengte, peng$gewicht, col = factor(peng$soort), pch = 16)
by(peng, peng$soort, function(s) cor(s$vinlengte, s$gewicht))

h) Houd je gekleurde plaatje uit g) erbij — dáár staat het antwoord in, en de zes getallen hieronder zeggen alleen wat je erop ziet. Vraag ze op:

tapply(peng$gewicht, peng$soort, mean)     # → 3700.7  3733.1  5076.0
tapply(peng$vinlengte, peng$soort, mean)   # → 190.0  195.8  217.2

Kijk nu naar wat de Gentoo’s zijn: veruit de zwaarste dieren (5076 gram tegen 3701 en 3733) én de langste vinnen (217.2 mm tegen 190.0 en 195.8). Zwaar én lange vin — dat is dezelfde richting als het verband binnen elke soort. Het soortverschil duwt de wolk dus mee langs die diagonaal in plaats van er dwars op te staan.

En dan tel je over alle 342 heen twéé dingen bij elkaar op: het verband binnen elke soort, én de sprong van de ene soort naar de andere. Twee kluitjes die al schuin liggen én bovendien lángs diezelfde diagonaal van elkaar af liggen, vormen samen één lange strakke wolk — strakker dan elk kluitje afzonderlijk.

Wil je zien hoe groot die sprong is, zet hem dan naast de rommel bínnen een soort — maar dat is een verdieping bovenop je antwoord, niet iets wat je uit de zes getallen had moeten halen:

sd(tapply(peng$gewicht, peng$soort, mean))          # → 785   sprong tussen de soorten
sqrt(mean(tapply(peng$gewicht, peng$soort, var)))   # → 452   rommel binnen een soort

De sprong tussen de soorten is dus ruim anderhalf keer zo groot als de rommel binnen één soort (785 gedeeld door 452 is 1.74), en dat hele stuk telt in die .87 volledig mee.

i) Bij de snavels lag het soortverschil dwars op het verband binnen de soorten: de Gentoo’s hebben lange én ondiepe snavels, terwijl binnen elke soort een langere snavel juist een diepere is. Daar duwde de soort de wolk de andere kant op, en klapte het teken om. Hier ligt het soortverschil mee, en dan versterkt het wat er binnen de soorten al gebeurt. Zelfde derde speler, twee tegengestelde uitkomsten — en dat is precies waarom je aan het teken alleen niet genoeg hebt.

j) Bijvoorbeeld:

Bij 342 pinguïns hingen de vinlengte en het gewicht sterk positief samen, r = .87; binnen elk van de drie soorten was die samenhang zwakker, r = .47 tot .70.

Let op dat die tweede helft er staat. Zonder haar leest je lezer .87 als het verband bij één soort pinguïn, en dat is het niet.

Z) Ja — allebei komen ze hier goed uit. Maar het loont om te weten wát eraan zou hangen als dat anders was.

De wolk is recht. Je ziet in het plaatje geen bocht, en je kunt het narekenen. Trek er een lijn doorheen en kijk hoeveel die dekt: dat is R², en met één voorspeller is dat exact hetzelfde getal als de r² uit f). Op vier decimalen .7590. Sta de lijn nu een knik toe — een extra term met de vinlengte in het kwadraat — en er staat .7753.

Ruim anderhalve procent erbij dus, en toch is dat géén bewijs van een bocht. Een extra term kan de R² namelijk alleen maar omhoog duwen en nooit omlaag — ook een term die niets te melden heeft. (Dat is geen bevinding maar rekenkunde, en je komt het bij de meervoudige regressie nog eens tegen, waar een kolom willekeurige getallen precies datzelfde doet.) Wat je hier ziet is dus de gewone winst van een parameter erbij, niet een kromming die om aandacht vraagt.

summary(lm(gewicht ~ vinlengte, data = peng))$r.squared                     # → 0.759
summary(lm(gewicht ~ vinlengte + I(vinlengte^2), data = peng))$r.squared    # → 0.7753

En geen punt trekt in zijn eentje aan het getal. Laat de zwaarste pinguïn weg en de correlatie beweegt pas in de vierde decimaal:

zwaarste <- which.max(peng$gewicht)
cor(peng$vinlengte[-zwaarste], peng$gewicht[-zwaarste])   # → 0.8716  (was 0.8712)

Doe je dat om de beurt voor alle 342, dan is de grootste verschuiving die één enkel dier veroorzaakt nog altijd maar .004. Dat is de derde decimaal, en die haalt geen enkele conclusie onderuit.

r_zonder <- sapply(1:nrow(peng), function(i) cor(peng$vinlengte[-i], peng$gewicht[-i]))
max(abs(r_zonder - cor(peng$vinlengte, peng$gewicht)))   # → 0.0042

Wat eraan hángt, als het wél mis was gegaan:

  • Blijft staan: de drie correlaties binnen de soorten bij g), de zes soortgemiddelden bij h), en de redenering bij i). Die beschrijven wat er in de tabel staat, en daar verandert geen kromme wolk iets aan.
  • Doe je over: de covariantie bij a) en b) niet — die is gewoon een som — maar wél alles wat de sterkte uitdrukt: de r bij c), de r² bij f) die er het kwadraat van is, de uitspraak in pinguïn-taal bij e) die erop leunt, en de zin bij j). Een r meet rechtlijnigheid; ligt het verband krom, dan is het getal geen leugen maar wel een slechte samenvatting.

nu bij mensen

Van vin naar vragenlijst

schaalscore · dezelfde route, ander onderwerp

Pinguïns hebben één groot voordeel: je kunt ze wegen. Bij mensen meet je zelden iets wat op een weegschaal past, en dan bouw je je variabele zélf uit een vragenlijst.

In bigfive.csv staan 2634 mensen die vijfentwintig uitspraken over zichzelf hebben beoordeeld op een schaal van 1 tot 6. Je gebruikt er hier tien: vijf gaan over neuroticisme — hoe snel raak je van slag — en vijf over openheid, de smaak voor nieuwe dingen en nieuwe ideeën. Eén rij is één mens.

Tien losse antwoorden zijn nog geen variabele. Je maakt er twee getallen van door per persoon het gemiddelde van zijn vijf antwoorden te nemen; dan staat er voor iedereen één neuroticisme-score en één openheid-score, allebei nog steeds op die schaal van 1 tot 6.

En dan loop je precies hetzelfde rondje als hierboven. Dat is de bedoeling: de vinlengte is nu de openheid, en het gewicht is het neuroticisme, maar de route is regel voor regel dezelfde.

OpmerkingIn R · bouw de twee schalen
b <- read.csv("bigfive.csv")

# per persoon het gemiddelde van zijn vijf antwoorden
b$neuroticisme <- rowMeans(b[, c("N1", "N2", "N3", "N4", "N5")])
b$openheid     <- rowMeans(b[, c("O1", "O2", "O3", "O4", "O5")])

Kijk of je twee kolommen erbij hebt en of ze binnen de schaal blijven: range(b$openheid) hoort iets tussen 1 en 6 te geven. Staat er een 0 of een 7, dan heb je een verkeerde kolom te pakken.

OpmerkingNu bij mensen

Vier stappen, en dan de zin waar dit hoofdstuk op uitloopt.

a) Vraag van allebei de schalen het gemiddelde en de standaardafwijking op. (vier getallen, met de schaal erbij waarop ze staan)

b) Reken de covariantie uit tussen openheid en neuroticisme. Doe het daarna nog eens met de rijsóm in plaats van het rijgemiddelde (rowSums). (twee getallen, en zeg hoeveel keer ze schelen en waarom)

c) Deel allebei door de bijbehorende standaardafwijkingen. (twee getallen, en één zin over wat je hier herkent van de pinguïns)

d) Teken de wolk, en kwadrateer de correlatie. (rapporteer r², en één zin over hoe zo’n wolk eruitziet vergeleken met die van vin en gewicht)

e) Schrijf op wat je gevonden hebt, in twee zinnen en in deze vaste vorm:

Binnen deze n mensen geldt: … (r = …). Of dat ook buiten deze n opgaat, weet je nog niet.

(vul de n, de bevinding in gewone taal en de r in — en laat die tweede zin staan zoals hij er staat)

a) Neuroticisme: M = 3.16, SD = 1.19 schaalpunten. Openheid: M = 3.87, SD = 0.55 schaalpunten. Allebei op de schaal van 1 tot 6 waarop de vragen beantwoord zijn — dus de gemiddelde deelnemer zit bij neuroticisme net onder het midden en bij openheid er duidelijk boven.

mean(b$neuroticisme)   # → 3.16
sd(b$neuroticisme)     # → 1.1946
mean(b$openheid)       # → 3.87
sd(b$openheid)         # → 0.5455

b) Met de rijgemiddelden is de covariantie 0.1050, met de rijsommen 2.6253. Dat scheelt precies een factor 25, en niet toevallig: een som is vijf keer een gemiddelde, en in een covariantie zitten twee variabelen, dus vijf maal vijf. Weer hetzelfde als bij de kilo’s van de pinguïns — je hebt de maat veranderd en niet de mensen.

cov(b$neuroticisme, b$openheid)                              # → 0.105
N_som <- rowSums(b[, c("N1", "N2", "N3", "N4", "N5")])
O_som <- rowSums(b[, c("O1", "O2", "O3", "O4", "O5")])
cov(N_som, O_som)                                            # → 2.6253

c) Allebei .16. Dat is wat je bij de pinguïns ook zag: zodra je door de twee standaardafwijkingen deelt, vallen de eenheden weg en maakt het niet meer uit of je in gemiddelden of in sommen rekende.

cov(b$neuroticisme, b$openheid) / (sd(b$neuroticisme) * sd(b$openheid))   # → 0.1612

N_som <- rowSums(b[, c("N1", "N2", "N3", "N4", "N5")])
O_som <- rowSums(b[, c("O1", "O2", "O3", "O4", "O5")])
cov(N_som, O_som) / (sd(N_som) * sd(O_som))                               # → 0.1612

d) r² = .03. En de wolk zíet er ook zo uit: een dikke, ronde vlek zonder duidelijke richting, waar je met moeite een flauwe helling in ontdekt. Zet dat naast de vin-en-gewicht-wolk van hiervoor — daar lagen de punten in een strakke sliert. Hier delen de twee maten nog geen drie procent van hun verschillen.

plot(b$openheid, b$neuroticisme)
cor(b$openheid, b$neuroticisme)^2   # → 0.026

Dat de punten in blokjes lijken te vallen is geen fout: een gemiddelde van vijf hele getallen kan maar een beperkt aantal waarden aannemen, dus veel mensen landen op precies hetzelfde plekje.

e) Bijvoorbeeld:

Binnen deze 2634 mensen geldt: wie hoger scoort op openheid, scoort ook iets hoger op neuroticisme (r = .16). Of dat ook buiten deze 2634 opgaat, weet je nog niet.

Die tweede zin is geen slag om de arm en geen bescheidenheid. Alles wat je in dit hoofdstuk hebt uitgerekend — de covariantie, de correlatie, de r² — beschrijft de mensen die je vóór je hebt, en verder niemand. Wat er nodig is om die stap naar buiten wél te zetten, is precies waar de volgende oefening mee begint.

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.

Voetnoten

  1. 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.↩︎