lineaire-regressie-in-r

In dit blog gaan we in op hoe je een lineaire regressie uitvoert in R. We illustreren dit aan de hand van een voorbeeld.

Inhoud van dit blog

Wil jij R leren gebruiken voor (statistische) data analyses? Bekijk dan onze opleiding R voor data analyse.

Lineaire regressie vs. logistische regressie

Lineaire regressie behoort tot de methoden die worden gebruikt om toekomstige uitkomsten te voorspellen op basis van beschikbare gegevens. Dit doe je door het samenstellen van een model. Met behulp van statistiek is de kracht/bruikbaarheid van een model te beoordelen.

In onderstaande afbeelding kun je zien welke plaats lineaire regressie inneemt tussen andere statistische algoritmes.

lineaire regressie en logistische regressie in r overzicht

  • Lineaire regressie is een statistische methode om de relatie tussen een afhankelijke variabele (uitkomst) en één of meer onafhankelijke variabelen (voorspellers) te onderzoeken. Het doel is om een lineair model te vinden dat de relatie tussen variabelen beschrijft. Bijvoorbeeld het modelleren van de relatie tussen reclame-uitgaven en verkoopcijfers.
  • Logistische regressie is een statistische techniek die wordt gebruikt om de kans te voorspellen van een binair resultaat (bijvoorbeeld ja/nee, geslaagd/ongeslaagd), op basis van één of meer voorspellende variabelen. Het model berekent de kans op een bepaald resultaat met behulp van een logistische functie. Denk hierbij bijvoorbeeld aan het voorspellen of een hartaandoening zich ontwikkelt. Op basis van risicofactoren zoals leeftijd, geslacht, BMI, bloeddruk, cholesterol-niveaus.

In dit artikel gaan we dieper in op lineaire regressie in R.


Lineaire regressie Stap 1: Dataset uitlezen

We gaan een CSV bestand uitlezen. Als je mee wilt doen kun je het bestand hier downloaden.

Dit met data van een toets-scores van studenten.

Het bevat de volgende kolommen:

  1. gender: Geslacht van studenten.

  2. iq_score: IQ score van studenten.

  3. study_hours: Studietijd van studenten voor de toets.

  4. test_score: Toets-score van studenten.

df_student_scores <- read.csv("data/students_test_scores.csv")

We gaan aantonen of er een relatie is tussen het IQ, en de toets-score.


Lineaire regressie Stap 2: Aannames

Enkele aannames voor het gebruik van een eenvoudige lineaire regressie:

  • Lineair verband: Relatie tussen variabelen is rechtlijnig.
  • Onafhankelijke observaties: Waarnemingen mogen elkaar niet beïnvloeden.
  • Homoscedasticiteit: Gelijke spreiding van voorspellingsfouten.
  • Normaal verdeelde fouten: Fouten volgen normale verdeling rond voorspelde waarden.

Lineaire regressie Stap 3: Visualiseren met scatterplot

Met een scatterplot (puntenwolk) kunnen we de datapunten visualiseren.

We gebruiken package ggplot2 en functie geom_point():

library(ggplot2)

ggplot(
  data = df_student_scores,
  aes(x = iq_score, y = test_score)
) +
  geom_point() +
  labs(
    x = "IQ score",
    y = "Test score",
    title = "IQ Score versus Test Score"
  )

lineaire regressie in r voorbeeld

Grafisch is een lineaire relatie te zien: Hoe hoger het IQ, hoe hoger de toets-score.


Lineaire regressie Stap 4: Uitvoeren van lineaire regressie

Nu we onze data hebben geladen, kunnen we de lineaire regressie uitvoeren.

Dit met behulp van de standaard functie lm() (linear model).

  • Met set.seed() verzekeren we reproduceerbaarheid.
  • Met formula = test_score ~ iq_score geven we de relatie tussen kolommen op.
  • Met functie summary() verkrijgen we de uitkomsten van de lineaire regressie.
set.seed(123)

lm_model <- lm(formula = test_score ~ iq_score, data = df_student_scores)

summary(lm_model)
## 
## Call:
## lm(formula = test_score ~ iq_score, data = df_student_scores)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.66399 -0.42565 -0.03422  0.42364  1.83126 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -7.856552   0.570270  -13.78   <2e-16 ***
## iq_score     0.148096   0.005688   26.04   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6635 on 180 degrees of freedom
## Multiple R-squared:  0.7902, Adjusted R-squared:  0.789 
## F-statistic:   678 on 1 and 180 DF,  p-value: < 2.2e-16

De uitvoer bevat informatie over het regressiemodel, waaronder:

  • De helling (coëfficiënt)
  • Intercept
  • R-kwadraat (R-squared) waarde
  • p-waarde voor de regressiecoëfficiënt

Lineaire regressie Stap 5: Interpretatie van resultaten

We bekijken hier in het kort enkele belangrijke resultaten.

R-squared

Multiple R-squared:  0.7902,    Adjusted R-squared:  0.789 

R-squared geeft aan hoeveel variatie van een uitkomst-variabele verklaard kan worden door een input-variabele van een regressie-model.

Hierdoor is het een maat voor de nauwkeurigheid van de voorspellende kracht van het model.

In geval van eenvoudige lineaire regressie gebruik je doorgaans de Multiple R-squared metric.

  • Dit is hier gelijk aan 0.7902.
  • 79% van de variatie wordt verklaard door het model.
  • Dit is een sterke relatie.

Coeffcients

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -7.856552   0.570270  -13.78   <2e-16 ***
iq_score     0.148096   0.005688   26.04   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

We willen een gegeneraliseerd model bouwen in de vorm van y = ax + b.

  • Waarbij b het snijpunt (intercept) is van de lijn met de y-as.
  • En a de helling (slope) is van de lijn.
  • (Intercept) is het snijpunt
  • iq_score is de helling van de lijn (let op, afhankelijk van gekozen variabele).

Dit geeft de volgende formule: y = 0.148096x - 7.856552

Lineaire regressie Stap 6: Visualiseren van voorspellingen

We kunnen aan de eerder gemaakte scatterplot voorspellingsuitkomsten van het model toevoegen.

  • Dit doen we met een lijn met geom_line().
  • Daarbij gebruiken we de predict() functie om voorspellingen van het model te verkrijgen.
library(ggplot2)

ggplot(
  data = df_student_scores,
  aes(x = iq_score, y = test_score)
) +
  geom_point() + 
  geom_line(
    aes(x = iq_score, y = predict(lm_model)),
    color = "blue",
  ) +
  labs(
    x = "IQ Score",
    y = "Test Score",
    title = "IQ Score versus Test Score"
  )

lineaire regressie in r tutorial

Dit blog is onderdeel van onze blogreeks over programmeren in R, de veelzijdige programmeertaal die essentieel is in data science. Of je nu een beginner bent of een ervaren gebruiker, deze serie biedt inzichten en praktische tips voor iedereen. We verkennen de basis met Wat is R? en R installeren, duiken in data manipulatie met dplyr en Data Table package, en onthullen de kracht van visualisatie met ggplot2. Voor een geïntegreerde ontwikkelomgeving, bekijk RStudio, en ontdek hoe R Jupyter Notebook de interactieve programmering verbetert. Verdiep je in de Tidyverse met Tidyverse R en leer over R scripts. Of je nu worstelt met de vraag Is programmeren in R moeilijk?, deze serie heeft voor elk wat wils.

Wil je in 2 of 3 dagen zelfstandig met R leren werken in RStudio?

Wil jij goed leren werken in R? Tijdens onze Opleiding R leer je alles wat je nodig hebt om zelfstandig analyses uit te voeren in R. In deze opleiding kun je kiezen voor een extra dag waarin je alles leert over statistiek met R.

by: