Cursus
Je hebt een regressiemodel gefit, de R² ziet er netjes uit en de coëfficiënten voelen intuïtief. Maar een fraai overzichtstabel kan een slecht gespecificeerd model verhullen. Eén spreidingsdiagram pikt vaak op wat de cijfers missen: de residuplot.
Dit artikel behandelt wat residuplots zijn, hoe je ze leest, de patronen die de moeite waard zijn om te kennen en hoe je er een maakt in zowel Python als R. De meeste beginners slaan de diagnostische stap helemaal over. Aan het eind doe jij dat niet meer.
Wat is een residuplot?
Een residu is het verschil tussen wat je model voorspelde en wat er daadwerkelijk gebeurde: residu = geobserveerd − voorspeld. Een residuplot zet die verschillen in beeld. De x-as toont ofwel de voorspelde (gefite) waarden of een verklarende variabele; de y-as toont de residuen. Een horizontale referentielijn op nul geeft perfecte voorspelling weer.

Willekeurige spreiding rond nul: een gezonde residuplot. Afbeelding door auteur.
Het kernidee: als je model de relatie goed heeft vastgelegd, zouden de residuen op ruis moeten lijken. Willekeurig verspreid rond nul, zonder duidelijk patroon. Zodra er een vorm verschijnt, vertelt je model je iets wat het niet alleen via coëfficiënten kon zeggen.
Hoe interpreteer je een residuplot
Zoek naar patronen. Idealiter is er geen duidelijk patroon. Dat is de hele regel. Wat de ligging, spreiding en vorm van de residuen onthullen, is waar het interessant wordt.
Ligging: is de spreiding gecentreerd op nul?
Residuen die in sommige regio's van de gefite waarden boven nul liggen en in andere eronder, betekenen dat het model bevooroordeeld is. Het over- of ondervoorspelt consequent in bepaalde regio's. Dit wijst vaak op een ontbrekende variabele of een niet-lineaire relatie die een rechte-lijnmodel niet kan vangen.
Spreiding: blijft de variantie ongeveer constant?
Scan van links naar rechts. Als de spreiding van de residuen ongeveer hetzelfde is over alle gefite waarden, is dat een goed teken. Als de punten uitwaaieren naarmate de gefite waarden toenemen, verandert de variantie. Dit heet heteroscedasticiteit. Het breekt de coëfficiëntschattingen niet, maar maakt standaardfouten onbetrouwbaar, wat ertoe doet als je hypothesetoetsen doet.
Vorm: is er een kromme of trend?
Vlak en patroonloos is wat je wilt. Een U-vorm of boog geeft aan dat het model een niet-lineaire term mist. Clusters of banden suggereren subgroepen die het model als één behandelt. Een enkel punt dat ver van de rest ligt, is het onderzoeken waard.
Veelvoorkomende residuplotpatronen en wat ze betekenen
Vier residuplotpatronen die op modelproblemen wijzen. Afbeelding door auteur.
Willekeurige spreiding rond nul
De goede uitkomst. Punten die grofweg gelijkmatig boven en onder de nul-lijn liggen, zonder zichtbaar verloop, duiden er doorgaans op dat het model de relatie redelijk goed vastlegt. Enige willekeur is te verwachten.
Gebogen patroon
Een gebogen of boogvormig patroon betekent meestal een niet-gemodelleerde niet-lineaire relatie. Het model past een rechte lijn door data die buigt. De oplossing is doorgaans het toevoegen van een polynoomterm (zoals x²) of het toepassen van een transformatie op de predictor. Dit is in de praktijk een van de meer voorkomende patronen, vooral bij het modelleren van zaken als huizenprijzen of biologische groei.
Trechter- of waaierpatroon
Residuen die breder uitwaaieren naarmate de gefite waarden toenemen: dat is heteroscedasticiteit, de variantie is niet constant. Dit komt vaak voor in financiële data, waar voorspellingsfouten van nature schalen met de omvang van de uitkomst. Een logtransformatie van de responsvariabele is vaak een redelijke eerste stap; gewogen kleinste kwadraten is een andere optie.
Clusters of groepen
Duidelijke groepen in de residuplot betekenen meestal dat de data subpopulaties bevat waar het model geen rekening mee houdt. Waarschijnlijk hoort er een categorische variabele (regio, behandelgroep, producttype) in het model. Als je twee of drie strakke banden ziet, begin dan daar.
Grote geïsoleerde residuen
Een enkel punt dat ver van de rest zit, verdient aandacht. Het kan een echte uitschieter zijn, een invoerfout of een observatie met ongebruikelijke kenmerken. Verwijder het niet automatisch. Begrijp het eerst. Of je het behoudt of verwijdert, hangt af van de context, niet van gemak.
Voor elk van deze patronen geldt: de residuplot identificeert een symptoom, geen diagnose. Hij vertelt je dat er iets niet klopt; jij moet nog uitzoeken waarom.
Welke regressieveronderstellingen kun je met residuplots controleren?
Met de patronen in het achterhoofd is het goed om helder te hebben welke regressieveronderstellingen een residuplot wel en niet kan beoordelen.
- Lineariteit: Als de relatie tussen predictoren en de uitkomst echt lineair is, zouden residuen geen trend moeten vertonen wanneer ze tegen gefite waarden worden uitgezet. Een kromme of boog is een direct visueel teken dat de lineariteit niet houdt.
- Constante variantie: Het trechterpatroon is precies hoe heteroscedasticiteit eruitziet. Als de spreiding toeneemt met de gefite waarden, is gelijke variantie geschonden. De residuen-tegen-gefite-plot is waarschijnlijk het meest gebruikte hulpmiddel om dit op te sporen.
- Onafhankelijkheid: Als je observaties een natuurlijke volgorde hebben (tijd, ruimte, subjectclusters) kun je residuen tegen die volgorde uitzetten om patronen te controleren. Een trend in residuen in een tijdgeordende plot suggereert autocorrelatie. Een gewone residuen-tegen-gefite-plot laat dit niet altijd zien; soms heb je een speciale residuen-tegen-volgorde-plot nodig.
- Uitschieters en invloedrijke observaties: Grote geïsoleerde residuen markeren observaties die het model slecht voorspelt. Voor invloed specifiek, observaties die de regressielijn onevenredig aantrekken, is de Residuen versus Leverage-plot informatiever dan de basisresiduplot.
Eén ding dat residuplots niet betrouwbaar kunnen beoordelen, is normaliteit. Een vlakke residuen-tegen-gefite-plot bevestigt niet dat fouten normaal verdeeld zijn. Daarvoor heb je een Q-Q-plot nodig. Dit is een veelvoorkomende bron van verwarring en het is de moeite waard dit uit elkaar te houden.
Hoe maak je een residuplot in Python
De standaardworkflow gebruikt scikit-learn om het model te fitten en residuen te berekenen, en vervolgens matplotlib om ze te visualiseren. Hier is een volledig voorbeeld met simpele lineaire regressie op huizenprijzen:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# Sample data: square footage predicting home price
sqft = np.array([800, 1000, 1200, 1500, 1800, 2000, 2200, 2500, 3000, 3500])
price = np.array([150, 180, 210, 260, 300, 330, 370, 420, 500, 560])
# Reshape for sklearn and fit the model
X = sqft.reshape(-1, 1)
model = LinearRegression()
model.fit(X, price)
# Generate predictions and calculate residuals
predicted = model.predict(X)
residuals = price - predicted
# Plot residuals against fitted values
plt.figure(figsize=(8, 5))
plt.scatter(predicted, residuals, color='steelblue', edgecolors='white', s=80)
plt.axhline(y=0, color='red', linestyle='--', linewidth=1.2)
plt.xlabel('Fitted Values')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.tight_layout()
plt.show()

De sleutelregel is residuals = price - predicted. De aanroep axhline() voegt de nul-referentielijn toe; zonder die is de plot veel lastiger te lezen. Als deze output grofweg patroonloos oogt, zit je redelijk goed. Let op dat de residuen groter lijken te worden bij hogere gefite waarden. Met slechts 10 punten is het lastig om zeker te zijn, maar dit hint naar het soort waaierpatroon dat we eerder bespraken.
Voor een diepere blik op regressie in Python behandelt onze Introduction to Regression with statsmodels in Python cursus model fitten, aannames controleren en interpretatie in detail.
Hoe maak je een residuplot in R
R maakt dit standaard iets makkelijker. Nadat je een model met lm() hebt gefit, produceert de ingebouwde plot() functie automatisch een compleet diagnostisch paneel, inclusief een residuen-tegen-gefite-plot.
# Same housing data in R
sqft <- c(800, 1000, 1200, 1500, 1800, 2000, 2200, 2500, 3000, 3500)
price <- c(150, 180, 210, 260, 300, 330, 370, 420, 500, 560)
# Fit the model and view diagnostics
housing_model <- lm(price ~ sqft)
plot(housing_model, which = 1) # which = 1 gives residuals vs. fitted
Het argument which = 1 toont alleen de residuen-tegen-gefite-plot. Laat je het weg, dan krijg je alle vier de standaarddiagnostieken: residuen vs. gefit, Q-Q, schaal-locatie en residuen vs. leverage. Handig als je snel een compleet beeld wilt. R annoteert ook de drie meest extreme punten op index, wat je het handmatig speuren naar uitschieters bespaart.
Voor een volledige walkthrough van regressie in R behandelt onze Introduction to Regression in R cursus modelbouw en diagnostiek vanaf de basis.
Residuplots vs. andere regressiediagnostische plots
De residuen-tegen-gefite-plot is het startpunt, niet het volledige plaatje. Een paar gerelateerde plots beantwoorden andere vragen.
Residuplot vs. Q-Q-plot
De residuen-tegen-gefite-plot controleert lineariteit en constante variantie. De Q-Q-plot controleert normaliteit, of de residuen een normale verdeling volgen. Dit zijn aparte vragen. Een residuplot die er schoon uitziet, garandeert geen normaliteit, en een Q-Q-plot vertelt je niets over variantie. Meestal wil je beide.

Twee verschillende plots, twee verschillende vragen over je model. Afbeelding door auteur.
Residuplot vs. schaal-locatieplot
De schaal-locatieplot (ook wel spreiding-locatie) zet de vierkantswortel van de absolute gestandaardiseerde residuen uit tegen de gefite waarden. Hij is ontworpen om heteroscedasticiteit op te sporen en maakt het trechterpatroon vaak makkelijker te zien dan de ruwe residuplot, omdat het het teken van de residuen verwijdert en zich volledig op spreiding richt.
Residuplot vs. residuen vs. leverage-plot
Leverage meet hoe ongewoon de predictorwaarden van een observatie zijn, niet hoe slecht het model die voorspelt. Hoge leverage gecombineerd met een groot residu is een potentieel invloedrijke observatie. De residuen-tegen-leverage-plot identificeert deze combinaties en markeert meestal de meest problematische punten bij naam. Als je je zorgen maakt dat invloedrijke observaties je model verstoren, check dan deze.
Wat te doen als een residuplot een probleem laat zien
Een residuplot is een diagnose, geen uitspraak. Een patroon zien betekent niet dat het model waardeloos is. Zo koppel je de veelvoorkomende patronen aan vervolgstappen:
- Gebogen patroon: Overweeg een polynoomterm toe te voegen of een predictor te transformeren. Een logtransformatie van x of een x²-term trekt dingen vaak recht.
- Trechtervorm: Probeer een log- of worteltransformatie van de responsvariabele. Als dat niet werkt, kent gewogen kleinste kwadraten minder invloed toe aan ruisigere observaties.
- Grote geïsoleerde residuen: Onderzoek de observatie. Controleer eerst op invoerfouten. Als het punt legitiem is, overweeg dan of je model rekening moet houden met wat het ongebruikelijk maakt.
- Clusters of groepen: Zoek naar een categorische variabele die je nog niet hebt opgenomen. Aparte subgroepmodellen zijn soms de juiste oplossing.
De residuplot toont symptomen. Hij vertelt je niet de exacte oorzaak, en één enkel patroon kan soms meerdere verklaringen hebben. Gebruik hem als prikkel om betere vragen te stellen.
Veelgemaakte fouten bij het lezen van residuplots
- Een perfect willekeurige plot verwachten: Echte data is rommelig. Een paar afwijkende punten, lichte asymmetrie, wat clustering aan de randen: dit is normaal. De vraag is niet of de plot perfect willekeurig is; het gaat erom of er een systematisch patroon is dat een beter model zou wegnemen.
- Elke uitschieter als slechte data zien: Een groot residu betekent dat het model die observatie slecht voorspelde. Het betekent niet dat de observatie fout is. Soms is de uitschieter het interessantste datapunt in de dataset. Verwijder het pas nadat je begrijpt wat het is.
- Aannemen dat een residuplot normaliteit bewijst: Dat doet het niet. Een schone residuen-tegen-gefite-plot vertelt je iets over lineariteit en constante variantie. Normaliteit vereist een Q-Q-plot. Deze twee diagnostieken zijn complementair, niet inwisselbaar.
- Naar de plot kijken zonder context mee te nemen: Een residuplot van een tijdreeksmodel moet anders gelezen worden dan die van een dwarsdoorsnede-dataset. Wat een zorgelijk patroon is, hangt af van datastructuur, steekproefgrootte en het doel van het model. Een patroon dat in een voorspelmodel het aanpassen waard is, kun je in een verkennende analyse soms negeren.
Conclusie
Een model fitten, de samenvatting checken, je goed voelen over de R²: hier stoppen de meesten. De residuplot is wat je daarna bekijkt, en die vertelt vaak een ander verhaal. Willekeurige spreiding rond nul is wat je wilt. Krommes, trechters, clusters en extreme, geïsoleerde punten suggereren elk iets waar het model geen rekening mee heeft gehouden.
Geen enkele plot geeft je het volledige plaatje. Combineer de residuen-tegen-gefite-plot met een Q-Q-plot voor normaliteit, een schaal-locatieplot voor variantie en een leverage-plot als invloedrijke observaties een zorg zijn. Elk beantwoordt een andere vraag.
Als je verder wilt gaan, behandelt onze Intermediate Regression with statsmodels in Python cursus aannames in detail, inclusief hoe je reageert wanneer diagnostiek een probleem signaleert. Voor een bredere basis in regressieveronderstellingen en modelbeoordeling is onze tutorial Assumptions of Linear Regression in Python een logische volgende stap.
Vinod Chugani begon zijn carrière in Tokio als JPMorgans jongste Head van de Hedge Fund Sales Desk en vestigde later een individueel verkooprecord bij Lehman Brothers, bouwde daarna een elektronicadistributiebedrijf in 30 landen uit tot voorbij SG$100 miljoen omzet en maakte vervolgens de overstap naar data. Als afgestudeerde Economie aan Duke en alumnus van de NYC Data Science Academy was hij een van de drie beursontvangers uit meer dan 100 aanmeldingen voor Hugo Bowne-Andersons Building AI Applications-cursus op Maven. Tegenwoordig schrijft hij voor DataCamp, KDnuggets, Machine Learning Mastery en Statology over onderwerpen van statistiek tot agentische AI, en coacht hij dataprofessionals bij de NYC Data Science Academy met meer dan 1.000 één-op-één-sessies op zijn naam.
FAQs
Wat betekent het als een residuplot een gebogen patroon laat zien?
Een gebogen of boogvormig patroon duidt meestal op een niet-lineaire relatie tussen je predictor en uitkomst die het model niet heeft vastgelegd. Omdat lineaire regressie een rechte lijn past, verschijnt elke buiging in de ware relatie als een systematische kromme in de residuen. De gebruikelijke oplossing is het toevoegen van een polynoomterm (zoals x²) of het toepassen van een log- of worteltransformatie op de predictorvariabele.
Hoeveel residuen zouden in een normale dataset als uitschieters moeten lijken?
In een goed passend model met normaal verdeelde fouten valt grofweg 5% van de gestandaardiseerde residuen buiten ±2 en minder dan 0,3% buiten ±3 puur door toeval—dus een paar extreme punten zijn te verwachten en niet automatisch een probleem. Waar je naar kijkt is of die punten een patroon vormen, of dat een enkel punt zo'n ongewoon residu heeft dat het op een gegevensprobleem wijst dat het onderzoeken waard is.
Kan ik een residuplot gebruiken om alle regressieveronderstellingen te controleren?
Nee—en dit is een veelvoorkomende bron van verwarring. Een residuen-tegen-gefite-plot helpt bij het controleren van lineariteit, constante variantie en mogelijk onafhankelijkheid als je residuen in observatievolgorde uitzet. Hij kan normaliteit niet betrouwbaar beoordelen; daarvoor heb je een Q-Q-plot nodig. Voor invloedrijke observaties is een residuen-tegen-leverage-plot informatiever. Zie de residuplot als de eerste diagnose, niet de enige.
Wat is het verschil tussen een residuplot en een schaal-locatieplot?
Beiden beoordelen variantie, maar op verschillende manieren. Een residuplot toont ruwe residuen (positief en negatief) tegen gefite waarden—handig om algemene patronen te spotten, inclusief krommes en clusters. Een schaal-locatieplot toont de wortel van gestandaardiseerde residuen (allemaal positief) tegen gefite waarden, waardoor hij beter is om heteroscedasticiteit te isoleren. Als het trechterpatroon subtiel is, maakt de schaal-locatieplot het vaak makkelijker zichtbaar.
Moet ik uitschieters verwijderen als de residuplot grote geïsoleerde residuen laat zien?
Niet automatisch. Een groot residu betekent dat het model die observatie slecht voorspelde—niet dat de observatie onjuist is. Controleer voordat je iets verwijdert of het punt een invoerfout is, een ongewoon maar legitiem geval, of iets buiten de reikwijdte van het model. Geldige data verwijderen om een residuplot te verbeteren is een vorm van modelmanipulatie. Als de observatie legitiem is, is het eerlijker om de beperkingen van het model te erkennen of een andere modelstructuur te onderzoeken.
Wat beïnvloedt heteroscedasticiteit in een residuplot eigenlijk?
Het trechter- of waaierpatroon vertekent je coëfficiëntschattingen niet—het model geeft je nog steeds het juiste gemiddelde effect. Wat stukgaat, is de betrouwbaarheid van je standaardfouten, en dus je p-waarden en betrouwbaarheidsintervallen. Als je regressie puur voor voorspelling gebruikt, kan het minder uitmaken. Als je hypothesen toetst of betrouwbaarheidsintervallen bouwt, moet je ofwel de responsvariabele transformeren of standaardfoutcorrecties voor ongelijke variantie gebruiken.
Werken residuplots voor meervoudige regressiemodellen net zo goed als voor simpele regressie?
Ja, en ze zijn in meervoudige regressie misschien wel belangrijker omdat er meer manieren zijn waarop het model fout kan gaan. De standaardaanpak is om residuen tegen gefite waarden uit te zetten voor een totaalbeeld, en vervolgens tegen elke predictor afzonderlijk om te checken op niet-lineaire relaties die het model kan missen. De interpretatieregels zijn hetzelfde: zoek naar patronen en onderzoek alles wat systematisch is.
Hoe verschillen residuplots in tijdreeks- versus dwarsdoorsnederegressie?
In dwarsdoorsnederegressie zoek je naar ruimtelijke patronen—krommes, trechters, clusters—in de residuen-tegen-gefite-plot. In tijdreeksregressie moet je ook controleren of residuen in de tijd gecorreleerd zijn, want autocorrelatie schendt de onafhankelijkheidsaanname en maakt standaardfouten onbetrouwbaar. Zet residuen uit tegen de tijdsindex en let op trends of oscillerende patronen; de Durbin-Watson-statistiek kan ook testen op autocorrelatie van de eerste orde. Een gewone residuen-tegen-gefite-plot vangt dit niet uit zichzelf.

