Tweede beweging · Verschillen koppelen

Oefening 3.2 · Enkelvoudige regressie

Eén continue voorspeller, één rechte lijn, en wat de richting kost · simple linear regression

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

Vijftig gram, of een honderdste millimeter?

helling · eenheden · richting van de vraag

Dezelfde 342 pinguïns als in de vorige oefening, dezelfde twee kolommen: vinlengte in millimeters, gewicht in grammen. En nu twee getallen, allebei netjes uitgerekend, allebei op dezelfde data.

Vraag je hoe het gewicht meeloopt met de vinlengte, dan komt eruit: 49.69 gram per millimeter. Een pinguïn met een millimeter meer vin weegt bijna vijftig gram meer.

Vraag je het andersom — hoe de vinlengte meeloopt met het gewicht — dan komt eruit: 0.01528 millimeter per gram.

Twee getallen over hetzelfde stel beesten. En als ze hetzelfde zeiden, dan zou het ene het andere ondersteboven moeten zijn. Doe het even met ronde getallen: vijftig gram per millimeter is precies hetzelfde bericht als een vijftigste millimeter per gram, oftewel 0.02. Heen delen door, terug delen door — dezelfde verhouding, andere kant op gelezen.

Reken het dan maar na met de echte getallen: 1 / 0.01528 komt uit op 65.45.

En 65.45 is niet 49.69. Er zit ruim vijftien gram per millimeter tussen, en dat gat is er niet in geslopen — het staat er omdat er onderweg iets besloten is. Bij de correlatie van de vorige oefening had je dat kunnen omdraaien zonder dat er iets gebeurde: de samenhang tussen snavellengte en snaveldiepte is hetzelfde getal, welke van de twee je ook vooropzet.

Hier niet. Trek even mee: we gaan uitzoeken wát er besloten wordt, wie het besluit neemt, en wat het kost.

speel het

Trek de lijn in R

regressielijn · intercept · helling · voorspelde waarde

Een lijn door een wolk — je hebt hem in de vorige oefening al zien liggen, met abline() erdoorheen. Nu ga je hem lézen. Eén vraag maakt het meteen klein: als je aan iemand die het plaatje niet ziet moet vertellen hoe dat lijntje loopt, hoeveel dingen moet je dan zeggen? Twee. Waar hij begint, en hoe schuin hij is. Meer heeft een rechte lijn niet.

Die twee hebben een naam. Het intercept (b0) is waar de lijn de verticale as snijdt. De helling (b1) is hoeveel de uitkomst verandert als de voorspeller één eenheid opschuift.

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

# de lijn van glans op karaat
model.karaat <- lm(glans ~ karaat, data = d)
coef(model.karaat)               # → -1.43   32.14

# hoeveel van het verschil in glans loopt langs karaat?
summary(model.karaat)$r.squared  # → 0.3338

# en hoe ver zit de lijn er gemiddeld naast?
summary(model.karaat)$sigma      # → 18.61
library(dplyr); library(broom)
d <- read.csv("diamantjes.csv")

model.karaat <- lm(glans ~ karaat, data = d)

tidy(model.karaat)    # één regel per coëfficiënt: schatting, standaardfout, t, p
glance(model.karaat)  # één regel over het hele model: r.squared, sigma, df

Lees de tilde ~ als “op”: glans ~ karaat is glans op karaat. Links de uitkomst, rechts de voorspeller. Die volgorde is geen opmaak — hij ís de keuze waar deze oefening over gaat.

De lijn leest dus: glans = −1.43 + 32.14 × karaat. Een steentje van één karaat zwaarder glanst ruim tweeëndertig punten meer.

En nu kun je iets wat je in de vorige oefening niet kon: een getal geven aan een steentje dat je niet bekeken hebt. Vul een karaat in en de lijn spuugt een glans uit.

predict(model.karaat, data.frame(karaat = 2))   # → 62.86

De lijn is een machientje, een fabriek: er komt iets in, de fabriek vermenigvuldigt het met de helling, telt het intercept erbij op, en spuugt het uit. En let op waar je begint — je begint bij het karaat, en de glans rolt eruit. Niet andersom.

Doe het nu expres verkeerd

Want dat is de zet van deze oefening. Draai de twee variabelen om en kijk wat er gebeurt.

model.omgekeerd <- lm(karaat ~ glans, data = d)   # glans voorspelt nu het karaat
coef(model.omgekeerd)               # → 1.0808   0.01038

# ondersteboven, om hem met de eerste te kunnen vergelijken
1 / coef(model.omgekeerd)[2]        # → 96.30      <- en niet 32.14

# maar dit is wél gelijk:
summary(model.omgekeerd)$r.squared                    # → 0.3338  <- exact hetzelfde
cor(d$karaat, d$glans, method = "pearson")            # → 0.5777  <- ook hetzelfde

Kijk goed naar die vier regels, want ze spreken elkaar schijnbaar tegen. De correlatie is beide kanten op hetzelfde getal. R² is beide kanten op hetzelfde getal. En de lijn is het niet — ruim 96 tegen 32.14, een factor drie.

Dat is precies wat er in de prikkel bij de pinguïns gebeurde, alleen daar viel het minder op: 65.45 tegen 49.69. Twaalf steentjes, driehonderdtweeënveertig beesten, hetzelfde verschijnsel. Geen toeval dus, en geen eigenaardigheid van één dataset.

OpmerkingEerst de twaalf diamantjes

Twee vragen voor je verder leest — hooguit vijf minuten, en ze zetten de rest van deze bladzij op scherp.

a) Vermenigvuldig de twee hellingen met elkaar: 32.14 keer 0.01038. (één getal, en zeg welk bekend getal van deze bladzij daar staat)

b) Trek van elk karaat het gemiddelde af en trek de lijn opnieuw (lm(glans ~ I(karaat - mean(karaat)), data = d)). Wat wordt het intercept? (één getal, en zeg waar je dat eerder zag)

a) .33 — en dat is de R² van dit model. Niet ongeveer: dat is ’m. Twee hellingen die je met elkaar vermenigvuldigt geven het deel van de verschillen dat de lijn dekt. Waaróm dat zo is, staat hieronder.

32.14 * 0.01038   # → 0.3336

b) 50.00, en dat is tot op de punt het gemiddelde van de glans over alle twaalf steentjes. Ook dat is geen gelukje, en ook dat komt hieronder.

coef(lm(glans ~ I(karaat - mean(karaat)), data = d))   # → 50.00  32.14
mean(d$glans)                                          # → 50

snap het

Wie voorspelt wie

afhankelijke variabele · onafhankelijke variabele · lege adres · centreren

Nu de namen, en pas nu — je hebt het verschijnsel al in je handen gehad.

De variabele die je invult heet de onafhankelijke variabele, ook wel de voorspeller; hij staat rechts van de tilde. De variabele die eruit rolt heet de afhankelijke variabele, ook wel de uitkomst; die staat links. Daarbij is x het begin — zie dat als oorzaak, ook al mag je dat nooit zo noemen — en y het gevolg. Let op dat die twee waarschuwingen bij elkaar horen: je mág aan oorzaak dénken om de richting te onthouden, en je mag het niet zo opschrijven. De pijl zit in je hoofd en in je vraag, niet in de data.

Want dat is wat de omdraai-proef liet zien. De correlatie kon je omdraaien zonder dat er iets veranderde: r = .58 heen, r = .58 terug. Die maat is symmetrisch — hij kent geen richting, dus hij dwingt je ook nergens toe. Een regressielijn is dat niet. Door glans ~ karaat te typen heb je gezegd: het karaat weet ik, de glans wil ik weten. Typ je het andersom, dan stel je een andere vraag, en een andere vraag geeft een ander antwoord.

En dan de vraag die vanzelf komt: welke van de twee lijnen is nou de goeie? Geen van beide, en allebei. Wil je de glans schatten van een steentje dat op de weegschaal ligt, dan is 32.14 de goeie. Wil je het gewicht schatten van een steentje waarvan je de glans hebt bekeken, dan is 0.01038 de goeie. Er is geen derde lijn die “het echte verband” is en waar deze twee benaderingen van zijn.

De twee hellingen weten samen precies hoe goed de lijn is

Dat was vraag a) hierboven, en dit is waarom het klopt. Je hebt de helling heen (32.14) en de helling terug (0.01038), en die twee maal elkaar geven .33 — de R² van dit model. Niet ongeveer: dat is ’m.

Het volgt uit de brug die het boek in dit hoofdstuk legt. Heen is de helling r · Sy/Sx, terug is r · Sx/Sy — dezelfde r, en de twee spreidingen precies omgekeerd. Vermenigvuldig ze en de spreidingen vallen tegen elkaar weg. Er blijft r × r over, en dat is R².

Het lege adres

Kijk nog eens naar het intercept van de diamantlijn: −1.43. Neem dat letterlijk. Een steentje van nul karaat glanst volgens deze lijn min anderhalf punt — een steen die niets weegt en minder dan niets glanst.

Dat is geen rekenfout en geen slechte lijn. Het is een adres waar niemand woont — en hier zelfs een adres dat niet kán bestaan. Het lichtste steentje in dit bestand is 1 karaat, het zwaarste 2.1. Nul ligt een heel karaat buiten alles wat er ooit is gewogen; de lijn is daar netjes doorgetrokken, maar niemand heeft er ooit gekeken.

Het intercept is altijd te interpreteren als de voorspelling voor iemand die nul scoort op de voorspeller. Dat is altijd waar. Alleen de vraag is: wat betekent die nul? Hier betekent nul: een steentje dat er niet is. Dus is het intercept waar én waardeloos, tegelijk.

Er is één handeling die dat repareert, en meer dan een aftreksom is het niet. Centreren: trek van elk karaat het gemiddelde af, zodat nul niet meer “geen steen” betekent maar “een doorsnee-steen”. Dat was vraag b) hierboven.

# de I() zegt alleen "reken dit eerst uit"; wat erin staat is de aftreksom
model.karaat.c <- lm(glans ~ I(karaat - mean(karaat)), data = d)
coef(model.karaat.c)               # → 50.00   32.14

mean(d$glans)                      # → 50      <- exact hetzelfde getal
summary(model.karaat.c)$r.squared  # → 0.3338  <- er is niets veranderd aan het model

Kijk wat daar gebeurt. Het intercept is nu 50.00, en dat is tot op de punt de gemiddelde glans van alle twaalf steentjes.

Dat is geen gelukje. Een regressielijn gaat altijd door één vast punt: het kruispunt van de twee gemiddelden — gemiddeld karaat, gemiddelde glans. Verschuif je de nul naar het gemiddelde karaat, dan schuift dat kruispunt precies op de verticale as, en dus lees je daar de gemiddelde glans af. Gemiddelde erin, gemiddelde eruit.

Het adres is bewoond geraakt: waar eerst een onmogelijke steen stond, staat nu het doorsnee-steentje. De helling is niet bewogen, R² is niet bewogen, geen enkele voorspelling is bewogen — je hebt alleen de nul verschoven naar een plek waar iemand woont.

Dat is alles wat centreren doet, en in dit boek kom je het nog twee keer tegen: bij de meervoudige regressie als handeling, en bij de interactie als vaste gewoonte. Hier is het genoeg om het één keer te hebben zien gebeuren.

Eén woord, en zo meteen twee betekenissen

Nog even dit, want je loopt er zo tegenaan. Je hebt hier geleerd dat de voorspeller de onafhankelijke variabele heet. In de volgende oefening gaat het over rijen die onafhankelijk van elkaar zijn — en dat is iets heel anders. Daar gaat het niet over een variabele maar over je rijen: geeft elke regel in je tabel informatie die niet al ergens anders staat, of meet je dezelfde persoon of dezelfde plek twee keer?

Hetzelfde woord, twee betekenissen. Zet het hier vast, dan hoef je straks niet te twijfelen.

En dan het stuk dat deze lijn nog schuldig is. Je hebt hem getrokken, gelezen en omgedraaid — maar je hebt nog nergens gekeken hoe ver hij er per steentje naast zit. Dat is de volgende oefening.

jouw beurt

De pinguïns, en wat de richting je kost

omdraai-proef · eenheden benoemen

Terug naar de 342 pinguïns. Bekende beesten, nieuwe vraag: in de vorige oefening bekeek je de sámenhang tussen de vinlengte en het gewicht, nu ga je het ene voorspellen uit het andere — en dan het omgekeerde, om te zien wat die keuze kost. Dit zijn de twee getallen uit de prikkel; je maakt ze nu zelf.

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

Beantwoord de vragen op volgorde; ze bouwen op elkaar. De laatste heet met opzet Z) en niet j): de wolk-vraag staat altijd achteraan.

Het zijn er tien, en dat is te veel voor één zitting. Na d) heb je de lijn getrokken, gelezen en verhuisd — een goed moment om te stoppen. Bij e) begint de omdraai-proef, en dat is een eigen verhaal.

a) Teken eerst de wolk — vinlengte liggend, gewicht staand — en trek daar de lijn gewicht ~ vinlengte doorheen. Lees hem daarna af. (rapporteer b0 en b1, en zet achter de helling zijn eenheid; de wolk heb je bij Z) weer nodig)

b) Zeg hardop wat die helling betekent. (één zin, over pinguïns en met de eenheid erin)

c) Het lege adres. Neem b0 letterlijk: wat belooft deze lijn voor een pinguïn met een vin van nul millimeter? (één getal, en één zin waarom dat adres hier leegstaat — noem de kortste vin die er echt in het bestand staat)

d) Centreer de vinlengte en kijk wat het intercept wordt. Vraag daarna het gemiddelde van gewicht op. (twee getallen, en één zin over wat je herkent — en zeg erbij wat er niet veranderd is)

e) Draai de vraag om: trek vinlengte ~ gewicht. (rapporteer b0 en b1, weer mét eenheid)

f) Als die twee lijnen hetzelfde zeiden, zou de een de ander ondersteboven moeten zijn. Reken 1 gedeeld door de helling terug uit en leg het naast de helling heen. (twee getallen, en zeg of ze gelijk zijn)

g) Doe nu de proef met de vermenigvuldiging: de twee hellingen maal elkaar. (één getal, en zeg welk bekend getal daar staat)

h) Vraag van allebei de modellen de R² op, en ook de gewone correlatie. (drie getallen, en zeg welke van de drie verandert als je de richting omdraait)

i) Schrijf je bevinding op in één zin. (welke twee maten je koos, welke kant op, hoeveel gram per millimeter, en hoeveel het model dekt)

Z) Is de wolk recht, en zitten er geen punten tussen die de boel verneuken? Een rechte lijn is een keuze, geen natuurwet. Kijk naar de wolk uit a) — buigt hij ergens? En hangt er één pinguïn zo ver weg dat hij in zijn eentje aan de helling trekt? (twee korte uitspraken, en zeg welke van je antwoorden hierboven eraan hangen)

a) b0 = −5780.83 en b1 = 49.69 gram per millimeter. De lijn leest: gewicht = −5780.83 + 49.69 × vinlengte, en R² = .76.

model.vl <- lm(gewicht ~ vinlengte, data = peng)

plot(peng$vinlengte, peng$gewicht)   # de wolk
abline(model.vl)                     # en de lijn erdoorheen

coef(model.vl)                # → -5780.83   49.69
summary(model.vl)$r.squared   # → 0.759

b) Elke millimeter vin erbij gaat samen met bijna vijftig gram meer gewicht. Niet dat de vin het gewicht maakt — dat de twee samen oplopen, meer staat er niet.

c) −5780.83 gram, oftewel min 5.8 kilo. Een pinguïn met een vin van nul millimeter weegt volgens deze lijn minder dan niets. Dat adres staat leeg: de kortste vin in dit bestand is 172 millimeter, dus nul ligt honderdzeventig millimeter buiten alles wat er ooit gemeten is. De lijn is daar netjes doorgetrokken; niemand heeft er ooit gekeken.

range(peng$vinlengte)   # → 172  231

d) Het gecentreerde intercept is 4201.75, en het gemiddelde gewicht is óók 4201.75. Dat is geen gelukje: de lijn gaat door het kruispunt van de twee gemiddelden, en door de nul naar de gemiddelde vinlengte te schuiven leg je dat kruispunt precies op de verticale as. Gemiddelde erin, gemiddelde eruit.

En let op wat er niet veranderde: de helling staat nog op 49.69 en de R² nog op .76. Centreren verschuift alleen de nul; het model blijft hetzelfde model.

coef(lm(gewicht ~ I(vinlengte - mean(vinlengte)), data = peng))   # → 4201.75   49.69
mean(peng$gewicht)                                                # → 4201.75

e) b0 = 136.73 en b1 = 0.01528 millimeter per gram. Die lijn leest: vinlengte = 136.73 + 0.01528 × gewicht.

model.terug <- lm(vinlengte ~ gewicht, data = peng)
coef(model.terug)   # → 136.73   0.01528

f) De helling terug ondersteboven is 65.46, en de helling heen is 49.69. Niet gelijk, en niet een beetje ook: er zit ruim vijftien gram per millimeter tussen. Dat zijn precies de twee getallen uit de prikkel, en nu heb je ze zelf gemaakt.

1 / coef(model.terug)[2]   # → 65.46

(Let op wélke deling er staat. R deelt door zijn eigen 0.0152759 en komt op 65.46; deel je met de hand door de gedrukte 0.01528, dan krijg je 65.45 — en dat is het getal dat in de prikkel staat. Gedrukte getallen zijn afgerond, en wie ermee doorrekent, rekent de afronding mee.)

g) 49.69 × 0.01528 = .76 — de R² van dit model. Twee hellingen die je met elkaar vermenigvuldigt geven het deel van de verschillen dat de lijn dekt, net als bij de steentjes.

49.69 * 0.01528   # → 0.7593

h) R² = .76 heen, R² = .76 terug, en r = .87. Geen van drieën verandert als je de richting omdraait. Alleen de lijn verandert; alles wat symmetrisch is blijft staan. Dat is de hele spanning van dit blok in één regel.

summary(model.terug)$r.squared   # → 0.759
cor(peng$vinlengte, peng$gewicht, method = "pearson")   # → 0.8712

i) Bijvoorbeeld:

Bij 342 pinguïns voorspelden we het gewicht uit de vinlengte: elke millimeter vin ging samen met bijna vijftig gram meer gewicht (b = 49.69), en de lijn dekte ruim driekwart van de verschillen in gewicht (R² = .76).

Z) Half en half — en de helft die niet klopt is de leerzaamste.

Je oog zegt recht; het narekenen zegt: een beetje niet. Kijk naar je plaatje uit a) — stippen van linksonder naar rechtsboven, de lijn er middenin, geen bocht te bekennen. Deel de pinguïns nu naar vinlengte in drie even grote groepen en kijk hoe ver de lijn er per groep gemiddeld naast zit. Plus betekent: de pinguïns liggen bóven de lijn, de lijn zit dus te laag. Er komt uit: +57 gram bij de korte vinnen, −106 in het midden, +41 bij de lange. Omhoog, omlaag, omhoog — dat is een dal, en geen ruis.

Waar dat dal vandaan komt: uit het mengsel. Geef elke soort zijn eigen lijn en de bocht is weg. Het zijn drie rechte wolkjes die op verschillende plekken langs de as liggen, en samengeperst tot één wolk maken die een flauwe boog. Dezelfde les als in de vorige oefening — nu met een lijn erdoorheen.

En let op waaróm we naar die afstanden kijken en niet naar de R². Je zou het namelijk ook zó kunnen proberen: laat de lijn geen rechte lijn meer zijn maar een lijn met een bocht erin, en kijk of hij de wolk dan beter dekt. Dat doet hij — de R² gaat van .76 naar .78. Alleen bewijst dat niets, want een extra bocht duwt de R² altijd omhoog en nooit omlaag, ook een bocht die nergens op slaat. De afstanden bewijzen wel iets. Die hebben een naam — residuen — en daar gaat de volgende oefening over. Daar leer je ze tékenen in plaats van middelen, en dan zie je zo’n dal in één oogopslag.

Wat er wél goed zit: geen pinguïn trekt in zijn eentje aan de helling. Laat er om de beurt één weg en de grootste verschuiving is 0.33 gram per millimeter — op een helling van 49.69, dus nog geen procent.

# het dal dat je oog niet ziet: hoe ver zit de lijn er per derde naast?
derde <- cut(peng$vinlengte, quantile(peng$vinlengte, c(0, 1/3, 2/3, 1)),
             include.lowest = TRUE)
round(tapply(resid(model.vl), derde, mean))   # → 57  -106  41

# en weg is hij, zodra elke soort zijn eigen lijn krijgt.
# Deze drie regels hoef je nu nog niet zelf te kunnen schrijven — ze leggen twee
# modellen naast elkaar. Lees alleen de uitkomst: de bocht voegt niets meer toe.
model.vl.x.soort <- lm(gewicht ~ vinlengte * soort, data = peng)
model.vl.x.soort.bocht <- lm(gewicht ~ vinlengte * soort + I(vinlengte^2), data = peng)
anova(model.vl.x.soort, model.vl.x.soort.bocht)[2, "Pr(>F)"]   # → 0.3853

Wat eraan hángt: hier weinig — de bocht is flauw, en je helling, intercept en R² blijven bruikbare samenvattingen van deze 342 dieren. Was hij sterker geweest, dan was niet één van je antwoorden fout maar waren ze allemaal een slechte samenvatting: de helling, het intercept, de R², de omdraai-proef. Dat is het verschil met de vorige oefening, waar de soortgemiddelden gewoon bleven staan: die waren beschrijvingen van de tabel, en een lijn is een model.

En er staat nog iets open dat je hier niet kúnt zien. Hoe ver deze lijn er per pinguïn naast zit, lees je niet af aan b0, b1 of R² — daar heb je de residuen voor nodig, en dat is de volgende oefening.

nu bij mensen

Voorspel een mens uit een vragenlijst

schaalscore · dezelfde route, ander onderwerp

Bij pinguïns kies je de richting en dan is het klaar. Bij mensen wordt diezelfde keuze meteen ongemakkelijk, en dat is precies waarom hij hier nog een keer langs moet.

In bigfive.csv staan 2634 mensen die vijfentwintig uitspraken over zichzelf beoordeelden op een schaal van 1 tot 6. Je gebruikt er hier tien — vijf over neuroticisme, hoe snel je van slag raakt, en vijf over openheid, de smaak voor nieuwe dingen. Neem per persoon het gemiddelde van zijn vijf antwoorden en je hebt twee variabelen, allebei nog op de schaal van 1 tot 6.

En dan mag je kiezen wat je voorspelt uit wat. Voorspel je neuroticisme uit openheid, of andersom? Aan de mensen zie je het niet; de pijl zit in je vraag.

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

b$neuroticisme <- rowMeans(b[, c("N1", "N2", "N3", "N4", "N5")])
b$openheid     <- rowMeans(b[, c("O1", "O2", "O3", "O4", "O5")])

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) Trek de lijn neuroticisme ~ openheid en lees hem af. (rapporteer b0, b1 mét eenheid, en R²)

b) Neem b0 letterlijk, en centreer daarna de openheid. (twee getallen, en één zin over of dat lege adres hier érger of minder erg is dan bij de pinguïns — kijk naar het bereik van de openheid)

c) Draai om en vermenigvuldig de twee hellingen. (twee getallen, zeg welk bekend getal dat product is — en één zin over hoe zwaar jouw keuze van zonet hier weegt)

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

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

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

a) b0 = 1.80 en b1 = 0.35 schaalpunt neuroticisme per schaalpunt openheid. R² = .03.

model.mens <- lm(neuroticisme ~ openheid, data = b)
coef(model.mens)                # → 1.80   0.35
summary(model.mens)$r.squared   # → 0.026

b) Het intercept 1.80 is de voorspelling voor iemand die nul scoort op openheid, en na het centreren staat er 3.16 — het gemiddelde neuroticisme, precies zoals bij de steentjes.

En dat lege adres is hier minder erg dan bij de pinguïns, maar nog steeds leeg. De laagste openheid in dit bestand is 1.0 en de hoogste 5.8, dus nul ligt er maar één schaalpunt onder in plaats van honderdzeventig millimeter. Alleen: nul kán op deze schaal helemaal niet. Wie alle vijf de vragen zo laag mogelijk beantwoordt, komt op 1 uit. Het adres bestaat dus niet, en dat is een ander soort leegstand dan bij een pinguïn zonder vin — daar was de nul denkbaar en gewoon niet gemeten.

range(b$openheid)                                                  # → 1.0  5.8
coef(lm(neuroticisme ~ I(openheid - mean(openheid)), data = b))    # → 3.16   0.35
mean(b$neuroticisme)                                               # → 3.16

c) De helling terug is 0.0736 schaalpunt openheid per schaalpunt neuroticisme, en hun product is .03 — de R², net als bij de steentjes en net als bij de pinguïns.

model.terug.mens <- lm(openheid ~ neuroticisme, data = b)
coef(model.terug.mens)[2]                          # → 0.0736
coef(model.mens)[2] * coef(model.terug.mens)[2]    # → 0.026

En dan de zin over jouw keuze. Zeiden de twee lijnen hetzelfde, dan was de een de ander ondersteboven — dat was de proef bij de pinguïns, en daar scheelde het al: 65.46 tegen 49.69. Hier hoef je niet eens te rekenen. De helling terug is 0.0736, nog geen tiende, dus ondersteboven komt hij ruim boven de tien uit — en de helling heen zegt 0.35. De twee lijnen staan bijna haaks op elkaar. Je keuze van zonet — neuroticisme uit openheid, en niet andersom — weegt hier dus zwaarder dan waar dan ook in dit hoofdstuk, juist bij het zwakste verband. Bij mensen is dat de regel en niet de uitzondering; verbanden zijn er zelden strak.

d) Bijvoorbeeld:

Binnen deze 2634 mensen geldt: wie een schaalpunt hoger scoort op openheid, scoort gemiddeld ruim een derde schaalpunt hoger op neuroticisme (b = 0.35). Of dat ook buiten deze 2634 opgaat, weet je nog niet.

Let op dat er gemiddeld staat, en let op wat er níét staat: dat openheid je neurotisch maakt. Je hebt een lijn getrokken door een wolk van mensen die je één keer gezien hebt. Wat er nodig is om er wél iets over te zeggen dat buiten deze 2634 geldt, is waar de volgende beweging over gaat.

Zelfde vorm in het boek

Hier: de lijn getrokken en gelezen, en de proef die laat zien dat er een richting gekozen is.

In het boek: W4 — Hangen ze samen?

Daar krijgt de lijn zijn twee getallen en zijn brug naar r; hier merk je wat er gebeurt als je de vraag omdraait — en wat het intercept betekent op een plek waar niemand woont.