Tweede beweging · Verschillen koppelen
Oefening 3.2 · Enkelvoudige regressie
Eén continue voorspeller, één rechte lijn, en wat de richting kost · simple linear regression
In deze oefening
Data bij deze oefening — diamantjes.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 Oefening 3.1, 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 Oefening 3.1 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 Oefening 3.1 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.
d <- read.csv("diamantjes.csv")
# de lijn van glans op karaat
model.karaat <- lm(glans ~ karaat, data = d)
# coef() → -1.43 32.14
coef(model.karaat)
# hoeveel van het verschil in glans loopt langs karaat?
# summary() → 0.3338
summary(model.karaat)$r.squared
# en hoe ver zit de lijn er gemiddeld naast?
# summary() → 18.61
summary(model.karaat)$sigmalibrary(dplyr); library(broom)
d <- read.csv("diamantjes.csv")
model.karaat <- lm(glans ~ karaat, data = d)
# één regel per coëfficiënt: schatting, standaardfout, t, p
tidy(model.karaat)
# één regel over het hele model: r.squared, sigma, df
glance(model.karaat)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 Oefening 3.1 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() → 62.86
predict(model.karaat, data.frame(karaat = 2))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.
# glans voorspelt nu het karaat
model.omgekeerd <- lm(karaat ~ glans, data = d)
# coef() → 1.0808 0.01038
coef(model.omgekeerd)
# ondersteboven, om hem met de eerste te kunnen vergelijken
# en niet 32.14
# 1 / coef() → 96.30
1 / coef(model.omgekeerd)[2]
# maar dit is wél gelijk:
# exact hetzelfde
# summary() → 0.3338
summary(model.omgekeerd)$r.squared
# ook hetzelfde
# cor() → 0.5777
cor(d$karaat, d$glans, method = "pearson")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.
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
32.14 * 0.01038b) 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() → 50.00 32.14
coef(lm(glans ~ I(karaat - mean(karaat)), data = d))
# mean() → 50
mean(d$glans)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() → 50.00 32.14
coef(model.karaat.c)
# exact hetzelfde getal
# mean() → 50
mean(d$glans)
# er is niets veranderd aan het model
# summary() → 0.3338
summary(model.karaat.c)$r.squaredKijk 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 Oefening 3.1 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.
peng <- read.csv("penguins.csv")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.
Tussen haakjes staat telkens wat er in een compleet antwoord hoort. Staat er dat een deel aan jou is, dan is de verwoording vrij — bij de rest ligt het antwoord vast. En onder Tentamenvragen, aan het eind van deze oefening, komen dezelfde onderwerpen nog een keer langs in de vorm waarin een tentamen ze stelt.
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 — het getal en de eenheid liggen vast, de verwoording is aan jou; meer antwoorden zijn goed)
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)
Centreren is het gemiddelde eraf halen: van elke vinlengte trek je de gemiddelde vinlengte af, precies zoals je bij de twaalf diamantjes met de karaten deed. Meer over centreren staat in de gereedschapskist. Het boek komt er later uitgebreid op terug.
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 — die vier moeten erin staan, de woorden eromheen zijn aan jou; meer antwoorden zijn goed)
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)
# de wolk
plot(peng$vinlengte, peng$gewicht)
# en de lijn erdoorheen
abline(model.vl)
# coef() → -5780.83 49.69
coef(model.vl)
# summary() → 0.759
summary(model.vl)$r.squaredb) 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() → 172 231
range(peng$vinlengte)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() → 4201.75 49.69
coef(lm(gewicht ~ I(vinlengte - mean(vinlengte)), data = peng))
# mean() → 4201.75
mean(peng$gewicht)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() → 136.73 0.01528
coef(model.terug)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() → 65.46
1 / coef(model.terug)[2](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
49.69 * 0.01528h) 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() → 0.759
summary(model.terug)$r.squared
# cor() → 0.8712
cor(peng$vinlengte, peng$gewicht, method = "pearson")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 Oefening 3.1 — 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)
# tapply() → 57 -106 41
round(tapply(resid(model.vl), derde, mean))
# 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() → 0.3853
anova(model.vl.x.soort, model.vl.x.soort.bocht)[2, "Pr(>F)"]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 Oefening 3.1, 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.
jouw beurt
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: de twee schaalscores uit Oefening 3.1.
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.
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.
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() → 1.80 0.35
coef(model.mens)
# summary() → 0.026
summary(model.mens)$r.squaredb) 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() → 1.0 5.8
range(b$openheid)
# coef() → 3.16 0.35
coef(lm(neuroticisme ~ I(openheid - mean(openheid)), data = b))
# mean() → 3.16
mean(b$neuroticisme)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() → 0.0736
coef(model.terug.mens)[2]
# coef() * coef() → 0.026
coef(model.mens)[2] * coef(model.terug.mens)[2]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.
tentamen
Tentamenvragen
intercept · centreren · richting van de vraag
Deze zes hebben de vorm waarin een tentamen dit onderwerp stelt: vier opties, en precies één is de beste — de andere drie kunnen best waar zijn en toch niet het beste antwoord zijn. Rekenen hoeft alleen bij vraag 1 en 6.
1. De lijn van het gewicht op de vinlengte leest: gewicht = −5780.83 + 49.69 × vinlengte. Wat voorspelt deze lijn voor een pinguïn met een vin van 200 millimeter?
- −5731 gram
- 4157 gram
- 4202 gram
- 9938 gram
2. Neem dat intercept van −5780.83 letterlijk. Wat is de beste omschrijving van wat daar staat?
- De lijn is verkeerd getrokken, want een pinguïn kan niet minder dan niets wegen.
- Het gemiddelde gewicht van deze 342 pinguïns, verschoven naar de verticale as.
- Een fout in het bestand: er staat ergens een negatief gewicht.
- Het gewicht dat de lijn voorspelt voor een vin van nul millimeter — een adres dat hier leegstaat, want de kortste vin in het bestand is 172 millimeter.
3. Je centreert de vinlengte: van elke vinlengte trek je de gemiddelde vinlengte af, en dan trek je de lijn opnieuw. Wat verandert daardoor?
- Alleen het intercept: dat wordt 4201.75, het gemiddelde gewicht. De helling en de R² blijven staan.
- Het intercept én de helling: allebei schuiven ze met het gemiddelde mee.
- Niets: de uitvoer staat er regel voor regel hetzelfde als daarvoor.
- Het intercept én de R²: de lijn past beter zodra de nul binnen de data ligt.
4. Je draait de vraag om en voorspelt de vinlengte uit het gewicht in plaats van het gewicht uit de vinlengte. Welke van deze maten verandert daardoor?
- De correlatie tussen de vinlengte en het gewicht.
- De R² van het model.
- De helling.
- Geen van de drie — het zijn dezelfde 342 dieren, dus dezelfde uitkomsten.
5. De helling heen is 49.69 gram per millimeter, de helling terug 0.01528 millimeter per gram. Eén gedeeld door 0.01528 geeft 65.45, en dat is niet 49.69. Welke verklaring is de beste?
- Een van de twee lijnen is verkeerd getrokken; alleen de lijn met de hoogste R² klopt.
- De twee lijnen beantwoorden een andere vraag, en daarom is de een niet het omgekeerde van de ander.
- Het komt door afronding: reken je met alle decimalen, dan komen ze wel op hetzelfde getal uit.
- De eenheden verschillen — gram per millimeter tegen millimeter per gram — en daarom zijn de twee getallen niet te vergelijken.
6. Vermenigvuldig de twee hellingen met elkaar: 49.69 × 0.01528. Welk bekend getal van deze bladzij komt daaruit?
- De correlatie tussen de vinlengte en het gewicht, r = .87.
- Het intercept, gedeeld door de gemiddelde vinlengte.
- De standaardafwijking van het gewicht, gedeeld door die van de vinlengte.
- De R² van dit model, .76.
1 b · 2 d · 3 a · 4 c · 5 b · 6 d
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. Vul in: −5780.83 + 49.69 × 200 = 4157 gram. (Laat je het model het zelf doen, dan staat er 4156.28 — het rekent met de onafgeronde helling. Dezelfde afrondingsles als bij 65.45 tegenover 65.46 hierboven: reken pas aan het eind af.) a telt de helling één keer op in plaats van tweehonderd keer: −5780.83 + 49.69 = −5731. c is 4201.75, het gemiddelde gewicht, en dat is de mooiste afleider van de zes — hij zit er maar vijfenveertig gram naast. Dat komt doordat de gemiddelde vin 200.92 millimeter is en niet 200: dat is hetzelfde gemiddelde dat je bij d) van elke vinlengte aftrok om te centreren, en je kunt het daar opvragen. De lijn gaat door het kruispunt van de twee gemiddelden, dus bij 200.92 millimeter zou 4201.75 gram wél het antwoord zijn. d vergeet het intercept: 49.69 × 200 = 9938.
2. d. Het intercept is de voorspelling voor wie nul scoort op de voorspeller — altijd waar, en hier waardeloos, want nul ligt honderdzeventig millimeter buiten alles wat er ooit gemeten is. a verwart onmogelijk met verkeerd: de lijn is netjes gelegd, hij is alleen doorgetrokken tot voorbij de dieren. b is het intercept ná het centreren en niet dit intercept; dat is vraag 3. c zoekt de fout in de data terwijl er geen negatief gewicht in het bestand staat — het lichtste dier weegt 2700 gram.
3. a. Centreren verschuift de nul en niets anders. Het intercept komt op het gemiddelde gewicht terecht omdat de lijn door het kruispunt van de twee gemiddelden gaat; de helling en de R² bewegen niet mee. b laat de helling meeschuiven, en dat kan niet: de helling zegt hoeveel gram er per millimeter bij komt, en dat verandert niet doordat je de millimeters anders nummert. c klopt over het model en niet over de uitvoer — het model is hetzelfde model, maar het intercept staat er als een ander getal, en dat is precies de winst. d laat het centreren de pasvorm verbeteren; dat gebeurt niet, want geen enkele voorspelling verandert.
4. c. Alleen de lijn verandert. De correlatie en de R² zijn symmetrisch: ze kennen geen richting, dus ze kunnen er ook niet door veranderen. a en b noemen juist die twee. d is de verleidelijkste, want het klópt dat de data dezelfde zijn — maar door de richting te kiezen stel je een andere vraag, en een andere vraag geeft een ander antwoord.
5. b. Het gewicht weet ik, de vinlengte wil ik weten is een andere vraag dan andersom, en beide lijnen zijn voor hun eigen vraag de beste. a zoekt een winnaar waar er geen is; de R² is trouwens beide kanten op .76, dus dat criterium wijst niet eens aan. c is na te rekenen en niet waar: met alle decimalen staat er 65.46, nog steeds ruim vijftien gram per millimeter van 49.69 af. d heeft het goede verschil en de verkeerde conclusie — gram per millimeter en millimeter per gram zijn elkaars omgekeerde, en dát is juist waarom je ze na één deling wel mag vergelijken.
6. d. 49.69 × 0.01528 = .76, de R² van dit model. Heen is de helling r · Sy/Sx en terug r · Sx/Sy — met Sy en Sx de standaardafwijkingen van het gewicht en de vinlengte. Vermenigvuldig ze en die twee spreidingen vallen tegen elkaar weg, zodat er r × r overblijft. a noemt de r zelf, en dat is de wortel uit het antwoord en niet het antwoord. c is de gevaarlijkste van de drie, want het is een échte grootheid: Sy/Sx staat in die formule hierboven, en hij komt uit op ongeveer 57 gram per millimeter. Dat is de wisselkoers tussen de twee maten — hoeveel gram er per millimeter bij zou komen als de twee volmaakt samenhingen. Hoe goed de lijn past zegt hij niet; pas maal r is het de helling, en daarom is hij hier iets groter dan de 49.69 die je gevonden hebt. b is geen grootheid maar ziet eruit als een formule omdat er een deling in staat.
De getallen in deze zes vragen staan allemaal al eerder op deze bladzij. Wat er nieuw bij komt is de voorspelling bij 200 millimeter en de foute afleiders — en die staan hierboven allemaal als som voluit, zodat je ze kunt narekenen zonder ze te geloven.
◠ 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.