Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.
Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.
De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.
Het is een goed idee om een dataset te verkennen, vooraleer je er allerlei statistische technieken op loslaat. R biedt een heel uitgebreid gamma aan functies om dat te doen.
Het is vaak niet de bedoeling om de output van die functies te publiceren. Ze dienen vooral om zelf meer inzicht te krijgen in de variabelen in je dataset.
Hier focussen we op de beschrijving en visuele voorstelling van één categorische variabele.
De dataset enquete
bevat gegevens van 14 variabelen geobserveerd bij 42 studenten uit het eerste jaar hoger onderwijs.
Deze dataset kan je inladen met onderstaande code. De data wordt meteen in een object enquete
ondergebracht zodat je het later makkelijk kan oproepen.
enquete <- read.csv("https://statlas.ugent.be/datasets/enquete.csv")
Het object enquete
is een dataframe dat alle data voor alle variabelen bevat.
class(enquete) # Denk eraan dat R hoofdlettergevoelig is!
[1] "data.frame"
Met str()
krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken om je data te verkennen. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr
.
str(enquete)
'data.frame': 42 obs. of 14 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ Section : int 1 1 1 1 1 1 1 1 1 1 ...
$ Class : chr "Senior" "Freshman" "Freshman" "Freshman" ...
$ Sex : chr "F" "F" "F" "M" ...
$ Distance : int 400 450 3000 100 2000 500 1100 1000 400 450 ...
$ Height : int 62 61 61 72 69 73 60 71 70 75 ...
$ Handedness : chr "Right" "Left" "Right" "Right" ...
$ Coins : num 1.12 29 1.5 0.07 0.12 8 0.77 0 0 0 ...
$ WhiteString: int 42 45 22 40 48 30 50 45 38 36 ...
$ BlackString: int 6 5 4 4 7 8 0 6 0 12 ...
$ Reading : num 80 100 100 50 200 100 200 100 100 100 ...
$ TV : num 3 10 4 25 5 0 2 2 20 20 ...
$ Pulse : int 71 78 80 63 63 56 72 66 54 48 ...
$ Texting : int 3 100 2 200 100 1 50 30 40 25 ...
In de output van str()
zie je inderdaad dat er 14 variabelen zijn met telkens 42 observaties (hier dus: studenten die de enquête hebben ingevuld).
Met het symbool $ kan je één variabele uit een dataset selecteren. Hier selecteren we Handedness
. Die variabele geeft weer of een student rechtshandig of linkshandig is.
enquete$Handedness
Het is vaak handig om deze variabele in een nieuw object te stoppen. Dit is vooral de moeite waard als je nog heel vaak naar deze variabele zal moeten verwijzen. Het kan ook interessant zijn als de oorspronkelijke variabele een moeilijk te begrijpen naam heeft.
hand <- enquete$Handedness
Vanaf nu kan je hand
typen om naar deze variabele te verwijzen in plaats van enquete$Handedness
.
chr
of factor
Met class()
kan je achterhalen om welk type variabele het gaat.
class(hand)
[1] "character"
Dat is een (klein) probleem… Er zijn namelijk enkele functies in R die niet werken met een chr
-type. Je zal dan een foutmelding of een raar antwoord zien. Onderstaande functie bijvoorbeeld zou je moeten het aantal niveaus (in het Engels: levels) van hand
geven. 0 is in ieder geval niet het juiste aantal!
nlevels(hand)
[1] 0
Je kan hieraan verhelpen door de variabele te transformeren naar het type factor
.
hand <- factor(hand)
Dezelfde code zal nu wel een zinnig resultaat opleveren.
nlevels(hand)
[1] 2
Wat zijn die 2 niveaus dan? Daarvoor dient de functie levels()
.
levels(hand)
[1] "Left" "Right"
Met table()
kan je een frequentietabel opvragen van een categorische variabele.
table(hand)
hand
Left Right
4 38
Deze tabel toont je de absolute frequenties van de niveaus van hand
. Deze frequenties kan je makkelijk visualiseren met barplot()
.
barplot(table(hand))
Voor de leesbaarheid van je code is het soms verstandiger om lijnen code op te splitsen. De code hieronder is helemaal equivalent aan de code hierboven.
abs.freq <- table(hand)
barplot(abs.freq)
Kleuren kunnen helpen om een visuele voorstelling van data aantrekkelijker, maar vooral ook duidelijker te maken. Je kan de lijst met beschikbare kleuren opvragen met het commando colors()
.
barplot(abs.freq, col=c('steelblue', 'lightgreen')) # indien meer niveaus, dan ook meer kleuren nodig!
Voor elk niveau van de variabele heb je een kleur nodig. Hier is snel duidelijk dat de variabele twee niveaus heeft. Soms zal dit misschien minder evident zijn.
Dan kan je achterhalen hoeveel kleuren je nodig hebt met de functie nlevels()
. Die vertelt je hoeveel niveaus er zijn.
nlevels(hand) # de variabele moet van type 'factor' zijn! (Zie eerder)
[1] 2
Voor een lijst van de niveaus kan je levels()
gebruiken.
levels(hand)
[1] "Left" "Right"
Je kan de staven ook bovenop elkaar stapelen, in plaats van naast elkaar. Dat kan door de tabel als een matrix aan de functie barplot()
te geven.
barplot(as.matrix(abs.freq), col=c('steelblue', 'lightgreen'))
Je kan iets gelijkaardig doen voor de relatieve frequentie. Daarvoor zal je proportions()
gebruiken. Deze functie heeft een table
-object nodig als argument, bijvoorbeeld table(hand)
.1
abs.freq <- table(hand)
proportions(abs.freq)
hand
Left Right
0.0952381 0.9047619
Ook van de relatieve frequenties kan je een staafdiagram met kleuren maken.
rel.freq <- proportions(abs.freq)
barplot(rel.freq, col=c('steelblue', 'lightgreen'))
Wil je liever percentages in plaats van relatieve frequenties, dan moet je vermenigvuldigen met 100.
percentages <- rel.freq * 100
barplot(percentages, col=c('steelblue', 'lightgreen'))
Je kan de staven ook bovenop elkaar stapelen, in plaats van naast elkaar. Dat kan door de tabel als een matrix aan de functie barplot
te geven.
barplot(as.matrix(percentages), col=c('steelblue', 'lightgreen'))
Let op! Bij de berekening van de relatieve frequenties houdt de functie proportions()
geen rekening met het bestaan van ontbrekende data. De relatieve frequentie die je afleest is dus de absolute frequentie gedeeld door het aantal werkelijke observaties.
table(hand)/length(hand)
hand
Left Right
0.0952381 0.9047619
In deze dataset kom je dezelfde proporties uit aangezien hier geen ontbrekende data zijn.