7  Centrum- en spreidingsmaten

In dit hoofdstuk bespreken we hoe je in R centrum- en spreidingsmaten voor variabelen met diverse meetniveaus kunt berekenen.

7.1 Centrummaten

De meest gebruikte centrummaten zijn het gemiddelde, de mediaan en de modus. Om te tonen hoe we ze berekenen met R, zullen we de volgende drie variabelen gebruiken:

directions <- factor(c("East", "West", "East", "North", "North", "East", "West", "West", "West", "East", "North"))
temperature <- factor(c("low", "high", "medium", "high", "low", "medium", "high"), levels = c("low", "medium", "high"), ordered = TRUE)
exam_points <- c(2, 7, 3, 4, 2, 0)

Als we deze variabelen vervolgens printen, zien we dat de inhoud correct is opgeslagen:

directions # nominaal
 [1] East  West  East  North North East  West  West  West  East  North
Levels: East North West
temperature # ordinaal
[1] low    high   medium high   low    medium high  
Levels: low < medium < high
exam_points # interval/ratio
[1] 2 7 3 4 2 0

7.1.1 Modus

De modus is de waarde die het vaakst voorkomt in een verzameling gegevens. We kunnen eerst de verdeling van de waarden bekijken met de table() functie:

table(directions)

Op basis hiervan kunnen we zien dat er twee modi zijn (Oost en West).

directions
 East North  West 
    4     3     4

Als we de modus willen berekenen, kunnen we gebruik maken van een pakket met de naam DescTools. Dit is een verzameling van diverse statistische basisfuncties voor het efficiënt beschrijven van gegevens. Het pakket bevat de functie Mode() (let op de hoofdletter M).

We installeren en laden het benodigde package as volgt:

install.packages("DescTools") # DescTools package installeren (hoeft slechts één keer)
library(DescTools) # DescTools package laden

Om de modus te berekenen, schrijven we:

Mode(directions, na.rm = TRUE)
[1] East West
attr(,"freq")
[1] 4
Levels: East North West
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd bij de berekening van de modus.

Uit de resultaten blijkt dat er twee modi zijn: East en West.

7.1.2 Mediaan

De mediaan is de waarde die, in de veronderstelling dat de dataset van klein naar groot is geordend, in het midden valt. Om deze te berekenen, gebruiken we het Mediaan() commando uit het DescTools package (zie hierboven voor het installeren en laden van dit package). De functie Median uit package DescTools kan omgaan met factors:

Median(temperature, na.rm=TRUE)
[1] medium
Levels: low < medium < high
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd bij de berekening van de mediaan.

7.1.3 Gemiddelde

Het gemiddelde van een verzameling waarnemingen wordt berekend door alle waarden bij elkaar op te tellen en dan te delen door het totaal aantal waarden1:

mean(exam_points, na.rm=TRUE)
[1] 3
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd bij de berekening van het gemiddelde.

7.2 Spreidingsmaten

Om de minimum- en maximumwaarde van een vector of een kolom in een data frame te vinden, kunnen we de functies max() en min() gebruiken. Toegepast op de ordinale en interval/ratio variabele die we hebben gemaakt:

min(temperature, na.rm = TRUE)
[1] low
Levels: low < medium < high
max(exam_points, na.rm = TRUE)
[1] 7
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd bij de berekening van het minimum of maximum.

7.2.1 Spreidingsbreedte

range() geeft een vector terug die het minimum en maximum bevat:

range(exam_points, na.rm = TRUE)
[1] 0 7
exam_points

Dit is de naam van de variabele/vector waarvan we de range willen berekenen. Vervang door je eigen variabelen indien je werkt met je eigen data.

na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd.

7.2.2 Interkwartielafstand

Om een overzicht te krijgen van de interkwartielafstand, kunnen we de summary() functie gebruiken:

summary(exam_points)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00    2.00    2.50    3.00    3.75    7.00 

In de resultaten zien we 1st Qu. (= 1st quartile, 1e kwartiel) en 3rd Qu. (= 3rd quartile, 3e kwartiel),

7.2.3 Standaardafwijking en variantie

Je kunt de standaardafwijking in R berekenen met de sd() functie. Standaard genereert deze de steekproef-standaardafwijking. Als je de standaardafwijking van de populatie wilt berekenen, kun je een aanpassing maken (vermenigvuldigen met sqrt((n-1)/n)).

sd(exam_points, na.rm = TRUE)
[1] 2.366432
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd.

Om de variantie te berekenen, kunnen we de var() functie gebruiken:

var(exam_points, na.rm = TRUE)
[1] 5.6
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd.

7.3 Bewerkingen doen in dataframes

Zoals uitgelegd in Paragraaf 1.7.1.3, gebruik je het symbool “$” om variabelen in dataframes aan te roepen. Daarom, als we een van de functies willen gebruiken die tot nu toe zijn behandeld (mean(), table(), sd(), var(), enz.) gebruik je gewoon die operator om specifieke variabelen in data frames te gebruiken.

Voorbeeld: als we het gemiddelde en de standaardafwijking van filmscores (‘Score’) in ‘deniro_data’ willen berekenen, zouden we schrijven:

library(rio)  # Laad package rio voor het importeren van de data met functie 'import'
deniro_data <- import(file = "deniro.csv") 
mean(deniro_data$Score, na.rm = TRUE)
[1] 58.1954
sd(deniro_data$Score, na.rm = TRUE)
[1] 28.06754
na.rm = TRUE

Dit zorgt ervoor dat eventuele missende waarden worden genegeerd.

7.4 Beschrijvende statistieken voor een volledig dataframe

Er zijn veel samenvattende statistieken beschikbaar in R. Een eenvoudige manier om een basisoverzicht van een dataframe te krijgen is de describe() functie uit het ‘psych’ pakket. Als je dit package moet installeren type je install.packages("psych") in de R console (niet nodig op universiteits-pc’s).

Om de describe() functie uit het `psych’ pakket te gebruiken, schrijven we:

library(psych)

Attaching package: 'psych'
The following objects are masked from 'package:DescTools':

    AUC, ICC, SD
describe(deniro_data, na.rm = TRUE, skew = FALSE, ranges = TRUE)
       vars  n    mean    sd median  min  max range   se
Year      1 87 1995.98 12.94   1997 1968 2016    48 1.39
Score     2 87   58.20 28.07     65    4  100    96 3.01
Title*    3 87   44.00 25.26     44    1   87    86 2.71
na.rm = TRUE

We voegen na.rm = TRUE toe om R te vertellen ontbrekende waarden weg te laten.

skew = FALSE

Via dit deel van de code, vertellen we R of het de scheefheid van de variabele moet berekenen. Ik zou aanraden om het weg te laten, maar als je het toch wilt toevoegen, verander het dan in skew = TRUE.

ranges = TRUE

We voegen ranges = TRUE toe om R te vertellen de spreidingsbreedte (range) te berekenen. Als je dit niet wilt, kun je het instellen op ranges = FALSE

Zoals je kunt zien, levert dit een relatief eenvoudige overzichtstabel op. Let wel op: de variabele Title is een character variabele (dat is te zien aan de asterisk *). Psych maakt hier eerst een numerieke variabele van.


  1. We kunnen het gemiddelde ook berekenen door de som te berekenen en dan te delen door het aantal observaties:

    sum(exam_points) / length(exam_points)
    [1] 3
    ↩︎