Cursus
In de kern geeft R-kwadraat aan welk deel van de variantie in de afhankelijke variabele kan worden toegeschreven aan de onafhankelijke variabele(n). Je kunt het zien als een maat voor hoe goed ons model het verhaal in de data weet te vangen, en hoeveel er overblijft als onverklaard lawaai. Door zijn eenvoud en directe interpretatie is het wijdverbreid in de diagnostiek van lineaire regressie, vooral bij enkelvoudige en meervoudige lineaire regressie.
In dit artikel bespreken we de betekenis, berekening, interpretatie en veelvoorkomende valkuilen rond R-kwadraat, zodat we het zowel met vertrouwen als met zorg kunnen gebruiken. Daarnaast bekijken we enkele voorbeeldsnippets voor het berekenen van R-kwadraat in R en Python.
Wat is R-kwadraat?
R-kwadraat, genoteerd als R², is een statistische maat voor de goodness of fit in regressiemodellen. Het vertelt ons hoeveel van de variatie in de afhankelijke variabele door het model kan worden verklaard.
De waarde van R-kwadraat ligt tussen 0 en 1:
- R² = 0 betekent dat het model geen enkele variabiliteit verklaart;
- R² = 1 betekent dat het model alles verklaart.
Hoewel het concept eenvoudig is, vergt de interpretatie nuance, zeker wanneer je van theorie naar praktijk gaat.
Hoe bereken je R-kwadraat
Er zijn meerdere wiskundig equivalente manieren om R-kwadraat te berekenen, die elk een ander inzicht geven in wat “fit” nu precies betekent, afhankelijk van de context—enkelvoudige regressie, meervoudige regressie, matrixalgebra of Bayesiaanse modellering. Laten we de meest gebruikte benaderingen verkennen.
1. Met residuele kwadratensom en totale kwadratensom
Dit is de meest standaard en veelgebruikte formule:

waarbij:
- RSS de residuele kwadratensom is, die de door het model onverklaarde variatie meet,
- TSS de totale kwadratensom is, die de totale variatie in de data meet.
Met andere woorden, R-kwadraat is het deel van de totale variatie dat door het model wordt verklaard.
Deze benadering benadrukt hoeveel beter het regressiemodel presteert dan simpelweg het gemiddelde van de respons voorspellen.
2. Met verklaarde kwadratensom en totale kwadratensom
R-kwadraat kan ook direct worden uitgedrukt in termen van verklaarde variantie:

waarbij:
- ESS de verklaarde kwadratensom is, die meet hoeveel van de variantie door het model wordt opgevangen,
- TSS de totale kwadratensom is, die de totale variatie in de data meet.
We zien dat deze versie benadrukt hoeveel van de totale variatie in de uitkomst wordt opgevangen door de voorspellingen van het model. Met andere woorden, de focus verschuift hier van wat we niet hebben verklaard (RSS) naar wat we wel hebben verklaard (ESS), wat een optimistischere framing geeft.
Voor een deepdive in de drie componenten van de kwadratensommen, lees Understanding Sum of Squares: A Guide to SST, SSR, and SSE.
3. Met verklaarde kwadratensom en residuele kwadratensom
In de context van een ANOVA-tabel komt R-kwadraat vanzelf voort uit de ontbinding van de totale variabiliteit:

waarbij:
- ESS de verklaarde kwadratensom is, die meet hoeveel van de variantie door het model wordt opgevangen,
- RSS de residuele kwadratensom is, die de door het model onverklaarde variatie meet.
Deze formulering laat zien hoeveel van de totale variantie door het model wordt opgepikt en hoeveel onverklaard blijft.
Dit perspectief is wat unieker omdat het R-kwadraat koppelt aan hypothesetoetsing. De verhouding ESS tot RSS wordt namelijk gebruikt om de F-statistic te berekenen, waardoor R-kwadraat een belangrijk onderdeel is van significantietoetsing in ANOVA-rapportages.
4. Met correlatiecoëfficiënt in enkelvoudige lineaire regressie
De vorige drie methoden waren allemaal algebraïsch equivalente formules afgeleid uit regressie-ontbinding. Hier is nu een nieuw perspectief:
Bij enkelvoudige lineaire regressie met slechts één voorspeller heeft R-kwadraat een snelkoppeling:

waar
- r de Pearson-correlatiecoëfficiënt tussen x en y is.
Deze formule laat zien hoe een sterke lineaire relatie tussen twee variabelen zich direct vertaalt in een hoge R-kwadraat.
Om de onderliggende theorie achter enkelvoudige lineaire regressie te begrijpen, bekijk Simple Linear Regression: Everything You Need to Know.
5. Met mean squared error en de variantie van de uitkomst
R-kwadraat kan worden berekend als een genormaliseerde maat voor modelerror:

waarbij:
- MSE de mean squared error van het model is,
- Var(y) de variantie van de echte uitkomst is.
Deze benadering is vooral relevant bij het vergelijken van modellen over verschillende schalen of eenheden, omdat het de modelerror normaliseert naar de totale spreiding in de data.
6. Met de variantie van voorspelde waarden
Uitgaande van residuen die niet gecorreleerd zijn met de voorspellingen, kan R-kwadraat ook worden geïnterpreteerd als het deel van de variantie dat door het model wordt opgevangen:

waarbij:
- Var(ŷ) de variantie van de voorspellingen van het model is,
- Var(y) de variantie van de echte uitkomst is.
Deze versie benadrukt hoe goed de voorspellingen zelf de spreiding van de werkelijke data weerspiegelen.
R-kwadraat interpreteren
Zoals eerder genoemd, is R-kwadraat makkelijk te berekenen maar wat lastiger om zinvol te interpreteren.
- Een hoge R-kwadraat betekent dat het model een groot deel van de variantie verklaart. Dat betekent echter niet dat ons model per se correct of nuttig is.
- Een lage R-kwadraat betekent dat het model weinig variantie verklaart. Dat is niet altijd slecht, zeker in de sociale wetenschappen of bij rumoerige data, waar een lage R-kwadraat vaak te verwachten is.
Het is belangrijk te onthouden dat R-kwadraat correlatie meet, maar geen causaliteit. Dat onze voorspellers de uitkomst verklaren, betekent nog niet dat ze die veroorzaken, want correlatie is nog steeds geen causaliteit. Bovendien zegt R-kwadraat niets over of voorspellingen accuraat zijn.
Hier zijn twee nuttige resources over meer geavanceerde onderwerpen rond lineaire regressie:
- Variance Inflation Factor (VIF): Addressing Multicollinearity in Regression Analysis
- QR Decomposition in Machine Learning: A Detailed Guide
Wanneer gebruik je R-kwadraat
R-kwadraat kan erg behulpzaam zijn als je het in de juiste situaties gebruikt. Het is geschikt voor:
- Modellen vergelijken met hetzelfde aantal voorspellers.
- Uitleggen hoeveel variantie in een dataset door het model wordt verklaard.
Aan de andere kant kan R-kwadraat misleidend zijn in de volgende scenario's:
- Het toevoegen van irrelevante voorspellers, wat tot overfitting leidt. In dit geval stijgt R-kwadraat altijd, zelfs als de voorspellende prestaties van het model niet verbeteren.
- Modellen vergelijken met een verschillend aantal voorspellers, dus met verschillende complexiteit. Hier is adjusted R-kwadraat een betere keuze. Ik ga later nog in op adjusted R-kwadraat.
Voorbeelden van R-kwadraat in R en Python
Laten we het concept van R-kwadraat nu illustreren in R en Python met de Fish Market Kaggle-dataset. In beide programmeertalen bouwen we twee modellen:
- Model 1: Voorspel het gewicht van vissen met vier voorspellers.
- Model 2: Voeg een willekeurige, irrelevante voorspeller toe.
R-voorbeeld
Laten we beginnen met R.
Model 1
# Load data
fish <- read.csv("Fish.csv")
# Model 1
model1 <- lm(Weight ~ Length1 + Length2 + Height + Width, data=fish)
summary(model1)$r.squared
Output:
[1] 0.8673
Model 2
# Model 2 with an irrelevant predictor
fish$random_noise <- rnorm(nrow(fish))
model2 <- lm(Weight ~ Length1 + Length2 + Height + Width + random_noise, data=fish)
summary(model2)$r.squared
Output:
[1] 0.8679
Zoals we zien, stijgt R-kwadraat licht na het toevoegen van een irrelevante voorspeller (Model 2). Dat betekent echter niet dat het model beter is geworden. We hebben immers alleen willekeurige ruis toegevoegd.
Voor verdere lectuur over dit onderwerp, zie de volgende tutorials:
En vergeet niet je in te schrijven voor onze aangewezen cursus:
Python-voorbeeld
Nu proberen we het in Python.
Model 1
import pandas as pd
import statsmodels.api as sm
import numpy as np
# Load data
fish = pd.read_csv('Fish.csv')
X1 = fish[['Length1', 'Length2', 'Height', 'Width']]
y = fish['Weight']
# Model 1
X1 = sm.add_constant(X1)
model1 = sm.OLS(y, X1).fit()
print(model1.rsquared)
Output:
0.8673
Model 2
# Model 2 with an irrelevant predictor
fish['random_noise'] = np.random.randn(len(fish))
X2 = fish[['Length1', 'Length2', 'Height', 'Width', 'random_noise']]
X2 = sm.add_constant(X2)
model2 = sm.OLS(y, X2).fit()
print(model2.rsquared)
Output:
0.8679
Opnieuw zien we een kleine stijging in de R-kwadraatwaarde, maar dit vangt slechts willekeurige ruis.
Blijf leren en schrijf je in voor onze cursussen:
- Introduction to Regression with statsmodels in Python en
- Intermediate Regression with statsmodels in Python
R-kwadraat vs. gerelateerde metrics
Nu vergelijken we R-kwadraat kort met twee gerelateerde metrics: adjusted R-kwadraat en predicted R-kwadraat.
R-kwadraat vs. adjusted R-kwadraat
In tegenstelling tot R-kwadraat houdt adjusted R-kwadraat rekening met het aantal voorspellers. Het bestraft het model met name voor het opnemen van onnodige voorspellers:

waarbij:
- n het aantal observaties is,
- p het aantal voorspellers is.
Deze metric stijgt alleen als een nieuwe voorspeller het model daadwerkelijk zinvol verbetert, en kan dalen in het omgekeerde geval. Lees onze tutorial om meer te leren over deze belangrijke uitbreiding: Adjusted R-Squared: A Clear Explanation with Examples.
R-kwadraat vs. predicted R-kwadraat
Waar gewone R-kwadraat laat zien hoe goed het model presteert op de trainingsdata, vertelt predicted R-kwadraat hoe goed het presteert op nieuwe, ongeziene data. Deze metric beoordeelt dus het generalisatievermogen van het model.
Predicted R-kwadraat wordt berekend met cross-validatie of door een deel van de trainingsdata apart te houden voor latere tests. Het kan significant lager zijn dan gewone R-kwadraat als het model overfit is. Een scenario waarin we een hoge waarde voor gewone R-kwadraat krijgen maar een lage waarde voor predicted R-kwadraat, kan dus zeer waarschijnlijk wijzen op overfitting.
Veelvoorkomende misvattingen over R-kwadraat
Laten we enkele populaire mythes over R-kwadraat bekijken, samen met hoe het echt zit:
- “Een hoge R-kwadraat betekent altijd een goed model.” Dat is niet per se waar. R-kwadraat kan hoog zijn voor een overfit model of een model gebaseerd op schijncorrelaties. In beide gevallen kun je zo'n model natuurlijk niet goed noemen.
- “R-kwadraat meet voorspellende kracht.” In werkelijkheid meet het alleen de modelfit op de trainingsdata en zegt het niets over ongeziene data. Om toekomstige modelprestaties te beoordelen, hebben we andere metrics nodig, zoals de hierboven besproken predicted R-kwadraat.
- “We moeten altijd streven naar een hoge R-kwadraat.” Nou, niet altijd. Het hangt af van het domein en van de datakwaliteit zelf. Zoals eerder in dit artikel genoemd, kan voor sociale wetenschappen zoals psychologie of geschiedenis de waarde van R-kwadraat heel laag zijn (0,1 of zelfs minder) en toch betekenisvol. Hetzelfde geldt voor rumoerige data, waar een lage R-kwadraat zeer te verwachten is.
Conclusie
Kort samengevat hebben we geleerd wat R-kwadraat is, hoe je deze metric berekent (zowel wiskundig als in R en Python), wanneer je hem gebruikt en wanneer je hem beter vermijdt, en hoe je de resultaten interpreteert. Daarnaast bespraken we twee gerelateerde metrics en enkele wijdverspreide misvattingen over R-kwadraat.
Kortom, R-kwadraat is een nuttige, intuïtieve en rechtlijnige maat voor de fit van een regressiemodel. Het is een prima startpunt voor modelevaluatie, maar het moet verstandig worden gebruikt, samen met andere metrics worden geïnterpreteerd, en niet worden aangezien voor het hele plaatje. Dit geldt zeker bij meervoudige regressie en modelselectie.
IBM Certified Data Scientist (2020), eerder petroleumgeoloog/geomodelleur voor olie- en gasvelden wereldwijd, met 12+ jaar internationale werkervaring. Vaardig in Python, R en SQL. Expertisegebieden: datacleaning, datamanipulatie, datavisualisatie, data-analyse, datamodellering, statistiek, storytelling, machine learning. Ruime ervaring met het beheren van datascience-communities en het schrijven/reviewen van artikelen en tutorials over data science en carrière-onderwerpen.
R-kwadraat veelgestelde vragen
Wat is R-kwadraat?
R-kwadraat, genoteerd als R², is een statistische maat voor de goodness of fit in regressiemodellen en laat zien hoeveel van de variatie in de afhankelijke variabele door het model kan worden verklaard.
Hoe bereken je R-kwadraat?
De meest voorkomende formule om R-kwadraat te berekenen is: R2=1-RSS/TSS, waarbij RSS de residuele kwadratensom is en TSS de totale kwadratensom.
Welke waarden kan R-kwadraat aannemen?
De waarde van R-kwadraat ligt tussen 0 en 1, waarbij R²=0 betekent dat het model geen variabiliteit verklaart en R²=1 betekent dat het model alles verklaart.
Hoe interpreteer je R-kwadraat?
Een hoge R-kwadraat betekent dat het model een groot deel van de variantie in de trainingsdata verklaart, terwijl een lage R-kwadraat betekent dat het model weinig variantie verklaart. R-kwadraat meet geen causaliteit en zegt niets over de correctheid of bruikbaarheid van het model.
Wanneer gebruik je R-kwadraat?
R-kwadraat kan helpen modellen te vergelijken met hetzelfde aantal voorspellers of uitleggen hoeveel variantie in een dataset door het model wordt verklaard.

