6 R

Hieronder wordt beschreven hoe je alle handelingen en analyses die in deze cursus aan bod komen kunt uitvoeren.
Als je eerst meer algemene informatie wilt over R en hoe je R kunt gebruiken, kun je hierover lezen in ons opensource boek Everybody R. Everbody R geeft een laagdrempelige introductie in het softwarepakket R, speciaal geschreven voor mensen die iets minder technisch zijn of iets meer uitleg nodig hebben.
6.0.1 Opstarten
6.0.1.1 Packages installeren
R is erg krachtig en veelzijdig. Deze kracht en veelzijdigheid is mogelijk doordat niet alle functionaliteit in het basisprogramma zit. Er zijn naast het basisprogramma duizenden zogenaamde packages beschikbaar. Elk package is ontwikkeld met een specifiek doel voor ogen. Een voorbeeld van zo’n package is psych, waarin een aantal methoden zitten die in het bijzonder bruikbaar zijn voor psychologen. Sommige packages zijn heel beperkt en doen vooral één ding heel goed, zoals diptest, die alleen de diptest uitrekent. Andere packages zijn een stuk breder en doen van alles. Een voorbeeld van die laatste categorie is rosetta, een package dat in deze cursus wordt gebruikt.
Een van de doelen van dit package is om gemakkelijk te kunnen switchen tussen SPSS en R door voor een aantal functies in SPSS equivalenten in R aan te bieden die zich hetzelfde gedragen als in SPSS. Voordat je deze functies kunt gebruiken, moet je dit package installeren. Dit kan met het volgende commando.
install.packages('rosetta');
R zal nu het betreffende package en alle hiervoor benodigde packages gaan downloaden en installeren.
6.0.1.2 Packages laden
Als packages eenmaal geïnstalleerd zijn, moet je ze ook laden. Als R opstart, zijn er geen packages geladen. Er start altijd een schone, lege versie van R op. Het inladen van packages hoeft alleen aan het begin van elke R-sessie. Er zijn twee commando’s die gebruikt kunnen worden om een package te laden: require en library. Het maakt niet uit welke je gebruikt. Het volgende commando zou dus moeten werken.
require('rosetta');
Het kan zijn dat R nu een foutmelding laat zien. In dat geval is het R-package niet goed geïnstalleerd. Geef daarom nogmaals het commando om rosetta te installeren en let daarbij goed op de meldingen van R. Als R meldt dat een benodigde package niet geïnstalleerd kan worden, installeer dat package dan eerst apart en herhaal daarna het commando om rosetta opnieuw te installeren. Doe dit net zolang tot de installatie succesvol verloopt.
6.0.1.3 Een dataset openen
Een dataset is meestal opgeslagen in een bestand op de harde schijf. Er zijn verschillende formats voor zulke databestanden, zoals .sav en .csv. R kan ongeveer alle soorten bestanden lezen. Gebruik om een databestand te openen in R het volgende commando.
dat <- rosetta::getData('C:/HetPadWaarOpJouwComputerDezeDataetStaat/Statistiek_Angst.sav');
De drive en directories in het pad moeten natuurlijk kloppen, net als de bestandsnaam. Het juiste pad kun je gemakkelijk achterhalen door rechts te klikken op het gedownloade bestand en dan op eigenschappen.
Het is mogelijk dat R de volgende foutmelding geeft.
Error: could not find function "getData"
In dat geval is het package rosetta nog niet geladen. Neem de secties over packages installeren en packages laden hierboven nog eens door en zorg dat je rosetta correct geïnstalleerd én geladen hebt voordat je verder gaat. Vergeet niet dat je een package, na eenmalige installatie, elke sessie weer opnieuw moet laden met require of library.
Met het volgende commando kun je in R ook een dialoogvenster openen waarin je een bestand kan selecteren.
rosetta::getDat();
R laat dan ook zien welk commando nodig is om de geselecteerde dataset automatisch in te laden. Vergeet niet dit commando aan het script toe te voegen.
6.0.2 Variabelen en variabelenamen bekijken
6.0.2.1 Variabelen bekijken
Het is handig om de variabelenamen in een dataset eerst te bekijken om te verifiëren dat de dataset goed is ingeladen. Er zijn verschillende manieren om dit te doen: de snelste methoden worden hier besproken.
De makkelijkste manier om in R de variabelenamen te bekijken is met het commando names.
names(dat);
R toont dan de variabelenamen op het scherm. R kan ook een spreadsheetachtig overzicht van de data tonen. Het commando hiervoor is edit,
edit(dat);
Bij data die uit SPSS ingelezen zijn, is extra informatie toegevoegd, maar het ‘edit’-commando laat dit niet rechtstreeks zien. Gebruik daarvoor
edit(data.frame(lapply(dat, as.vector)));
Let erop dat je in bovenstaande commando’s ‘dat’ vervangt door de naam van de dataset.
In RStudio is een wat gebruikersvriendelijker interface beschikbaar met het commando View.
View(dat);
Het is overigens heel belangrijk vanaf het begin de gewoonte aan te leren nooit iets te veranderen in deze Data View. Alle wijzigingen dienen traceerbaar te zijn, en dat kan alleen door ze via een analysescript uit te voeren. Alle handelingen, vanaf het inlezen van de ruwe data tot aan de laatste analyses, horen in een of meer analysescripts terug te vinden te zijn.
R is overigens case-sensitive, oftewel hoofdlettergevoelig. Het commando View is dus iets anders dan het commando view (dat overigens niet bestaat).
6.0.2.2 Variabelen hernoemen
Soms is het nodig om variabelen te hernoemen. Hier staan de commando’s waar dat mee kan. Er zijn verschillende conventies die gevolgd kunnen worden bij het benoemen van variabelen. Het is verstandig de volgende richtlijnen te volgen.
- Gebruik uitsluitend alfanumerieke karakters en underscores (liggende streepjes, _).
- Gebruik als eerste teken uitsluitend een letter.
- Gebruik namen die zo systematisch mogelijk zijn.
Omdat je spaties in variabelenamen beter kunt vermijden, zijn er een aantal manieren om woorden te onderscheiden. Een hiervan is om spaties te vervangen door underscores. Een andere manier is om elk nieuw woord met een hoofdletter te beginnen. Dit heet CamelCase. Het eerste woord kan met een kleine letter starten (lowerCamelCase) of ook met een hoofdletter (UpperCamelCase).
Het volgende commando hernoemt een variabele in R.
names(dat)[names(dat) == 'oudenaam'] <- 'thisIsTheNewVariableName';
Hierbij wordt hetzelfde names-commando gebruikt als om de lijst met variabelenamen te zien. Daarna wordt hieruit met de rechte haken één element gekozen: het element dat gelijk is aan oudenaam (de dubbele is-tekens (==) staan voor ‘is gelijk aan’). Hieraan wordt vervolgens de nieuwe waarde thisIsTheNewVariableName toegekend.
6.0.2.3 Categorische variabelen verkennen: frequentietabellen en staafdiagrammen
Om te bekijken hoe een categorische variabele verdeeld is, kun je frequentieverdelingen en staafdiagrammen opvragen. Dit kan met de volgende commando’s.
Met het commando freq kun je voor één variabele een frequentieverdeling en een staafdiagram opvragen.
rosetta::freq(dat$thisIsTheVariableName, plot=TRUE);
Met het commando frequencies kun je meerdere frequentietabellen tegelijk opvragen.
rosetta::frequencies(dat$thisIsTheVariableName, dat$thisIsAnotherVariableName, plot=TRUE);
Bij beide commando’s specificeert het argument ‘plot=TRUE’ dat we ook graag staafdiagrammen willen zien.
6.0.2.4 Continue variabelen verkennen: beschrijvingsmaten, histogrammen, Q-Q-plots en boxplots
Omdat met continue variabelen berekeningen uitgevoerd kunnen worden, zijn er meer mogelijkheden om de datareeksen van continue variabelen te verkennen. De betreffende beschrijvingsmaten, histogrammen, Q-Q-plots en boxplots vraag je met de volgende commando’s op.
Met het commando descr vraag je de beschrijvingsmaten (descriptives) op.
rosetta::descr(dat$thisIsTheVariableName);
Het commando examine geeft zowel de beschrijvingsmaten als de grafieken, en bovendien de hoogste en laagste waarden en een zogenaamde stem-and-leaf-plot.
rosetta::examine(dat$thisIsTheVariableName);
Met het commando ggBoxplot kun je boxplots opvragen.
rosetta::ggBoxplot(dat, 'thisIsTheVariableName');
Soms is het handig om boxplots op te vragen opgesplitst naar groep. Dit kan door bij het commando ggBoxplot, waarbij je als argumenten naast de naam van de dataset en de naam van de variabele om de boxplot van te maken ook de variabele die de groepen definieert geeft.
rosetta::ggBoxplot(dat, 'thisIsTheVariableName', 'thisIsACategoricalVariable');
Een alternatief commando om beschrijvingsmaten op te vragen is summary.
summary(dat$thisIsTheVariableName);
In het package psych zit een functie describe dat ook handig kan zijn. Hiervoor moet je eerst het psych package downloaden en laden.
psych::describe(dat$thisIsTheVariableName);
De functie describe kan ook in één keer een hele dataset beschrijven.
psych::describe(dat);
Of je kunt een selectie maken.
psych::describe(dat[, c('thisIsTheVariableName',
'thisIsAnotherVariableName',
'thisIsACategoricalVariable')]);
Het c-commando, met als argumenten de variabelenamen, kun je gebruiken om een lijst met elementen te specificeren. De rechte haken selecteren een element uit een lijst of een dataset. Omdat een dataset zowel rijen als kolommen heeft, worden eerst de te selecteren rijen gespecificeerd en daarna de kolommen. Tussen de rechte haken staat niets voor de komma: dit betekent dat alle rijen geselecteerd worden. Na de komma staat de lijst met drie variabelenamen: dit betekent dat alleen die drie kolommen geselecteerd worden. Met dit commando wordt de functie describe dus niet op de hele dataset toegepast, maar alleen op die drie kolommen.
6.0.2.5 Het verband tussen twee continue variabelen: de correlatie
Met een scatterplot kun je het verband tussen twee continue variabelen visualiseren. Lineaire verbanden kunnen vervolgens gekwantificeerd worden met correlatiecoëfficiënten. Scatterplots en correlatiecoëfficiënten kun je als volgt opvragen.
Dit commando vraagt om een scatterplot.
rosetta::ggScatterPlot(dat$thisIsTheVariableName, dat$thisIsAnotherVariableName);
Dit commando vraagt om een correlatiecoëfficiënt met het bijbehorende betrouwbaarheidsinterval.
rosetta::rMatrix(dat, x=c('thisIsTheVariableName', 'thisIsAnotherVariableName'));
Het scatterPlot-commando heeft overigens een hoop mogelijkheden om de grafiek aan te passen. Je kunt bijvoorbeeld de bolletjes doorzichtig maken om overlap zichtbaar te maken.
rosetta::ggScatterPlot(dat$thisIsTheVariableName,
dat$thisIsAnotherVariableName,
alpha=.25);
6.0.2.6 Het verband tussen twee continue variabelen: regressieanalyse
Als twee continue variabelen samenhangen, kun je regressieanalyse gebruiken om een model te bouwen waarmee de waarde van de ene variabele voorspeld kan worden uit de andere variabele.
Dit commando voert een regressieanalyse uit. De variabele links van de tilde (~) is de afhankelijke variabele. Rechts van de tilde plaats je de voorspeller (of meerdere voorspellers, die dan gescheiden moeten worden door een plus [+]).
rosetta::regr(dat$thisIsTheNewVariableName ~ dat$thisIsAnotherVariableName);
Bij een regressieanalyse is het handig het verband te visualiseren met een scatterplot. Dit kan door het argument plot=TRUE toe te voegen in het regr-commando.
rosetta::regr(dat$thisIsTheVariableName ~ dat$thisIsAnotherVariableName,
plot=TRUE);
6.0.2.7 Het verband tussen een dichotome en een continue variabele: de t-toets
Er zijn twee \(t\)-toetsen. Als de twee datareeksen, die ontstaan wanneer de datareeks van de continue variabele wordt opgesplitst per niveau van de dichotome variabele, volledig onafhankelijk zijn, gebruik je de onafhankelijke \(t\)-toets. Als de twee datareeksen wel samenhangen, gebruik je de gepaarde of de afhankelijke \(t\)-toets. Dit laatste is bijvoorbeeld het geval als de continue variabele twee keer gemeten wordt bij dezelfde onderzoekseenheden, of als de continue variabele gemeten wordt bij zogenaamde dyaden, groepen van steeds twee gerelateerde onderzoekseenheden, zoals twee ouders of verzorgers van hetzelfde kind.
De onafhankelijke \(t\)-toets vraag je op met het volgende commando.
rosetta::meanDiff(dat$thisIsTheVariableName,
dat$thisIsADichotomousVariable);
Deze functie stelt in principe zelf vast of de variantie in beide steekproeven gelijk is en voert afhankelijk van die uitkomst de \(t\)-toets voor gelijke varianties of de \(t\)-toets voor ongelijke varianties uit. Zoals besproken is het verstandig om veiligheidshalve altijd de \(t\)-toets voor ongelijke varianties uit te voeren. Dit kun je op de volgende manier specificeren.
rosetta::meanDiff(dat$thisIsTheVariableName,
dat$thisIsADichotomousVariable,
var.equal='no');
De gepaarde \(t\)-toets voer je uit met hetzelfde commando, alleen moet je dan het argument paired=TRUE toevoegen.
rosetta::meanDiff(dat$thisIsTheVariableName,
dat$thisIsAnotherVariableName,
paired=TRUE);
6.0.2.8 Het verband tussen een categorische en een continue variabele: variantieanalyse
Als de categorische variabele meer dan twee meetwaarden heeft, en zich dus manifesteert als meer dan twee groepen, kun je variantieanalyse gebruiken. Variantieanalyse werkt met de volgende commando’s.
Om een eenweg-variantieanalyse uit te voeren, gebruik je het commando oneway.
rosetta::oneway(dat$thisIsTheVariableName, dat$ThisIsTheCategorialVariable);
Dit commando berekent ook meteen de effectgroottes. Om de gemiddelden, Levene’s test, de correcties voor ongelijke varianties, een plot en post-hoc-testen op te vragen, gebruik je de volgende argumenten.
rosetta::oneway(dat$thisIsTheVariableName,
dat$thisIsACategoricalVariable,
means=TRUE, levene=TRUE, corrections=TRUE, plot=TRUE, posthoc='tukey');
Bij posthoc kun je ook een andere pos-thoc-test kiezen zoals Bonferroni of Games-Howell.
6.0.2.9 Meer leren over R?
Deze link kan je helpen om R verder onder de knie te krijgen: Modern Dive