2  R ontdekken

2.1 Theorie

R is uitgegroeid tot een van de krachtigste en meest gebruikte statistische programmeertalen ter wereld. Of je nu in de academische wereld werkt of in een bedrijf, de dingen die je in R kunt doen lijken vaak een superkracht voor anderen. Maar het is een superkracht die iedereen kan leren, mits je er wat tijd en moeite in stot.

Het boek laat zien hoe je R en RStudio installeert (de laatste geeft ons een gebruikersinterface die het makkelijker maakt om met onze gegevens, pakketten en uitvoer om te gaan). R is geen computerprogramma met een grafische gebruikersinterface en voorgedefinieerde functionaliteit. RStudio laat jou makkelijker met R werken. R is de moter en RStduio is meer het dashboard. Het boek laat zien hoe het met elkaar werkt.

R is een volledige programmeertaal waaraan mensen over de hele wereld met vrij beschikbare uitbreidingen, zogenaamde specifieke pakketten, kunnen bijdragen. Belangrijke specifieke pakketten voor het werken met dit boek en het doen van meta-analyse met R zijn meta (zie bv hier), metafor(zie bv hier), dmetar (zie hier) en (voor data bewerking) tidyverse (zie hier.

Nadat je R en RStudio hebt geïnstalleerd op jouw computer, moet deze pakketten installeren op je computer. De fundamentele bouwstenen van R zijn functies, waarmee in dit hoofdstuk wordt gewerkt en waarmee je een goed idee krijgt hoe een en ander voor het uitvoeren van meta-analyses werkt. Veel van de functies kunnen worden geïmporteerd en uitgevoerd via pakketten die met internet zijn te installeren. Functies kunnen worden gebruikt om gegevens te importeren, te manipuleren, te transformeren en op te slaan met behulp van R. Er worden voorbeelden gegeven van basisfuncties die belangrijk zijn voor het uitvoeren van meta-analyses in R en in de hoofdstukken hierna worden uitgevoerd.

2.2 Praktijk

Installeer eerst de pakketten die nodig zijn voor dit boek. Ik moest zelf een vorige versie van meta installeren om het pakket dmetar te installeren. Als je dit niet eerder hebt gedaan met je de hekjes (#) weghalen en de code uitvoeren. Dat installeren hoef je maar één keer te doen.

#require(remotes)
#install_version("meta", version = "6.5.0", repos = "http://cran.us.r-project.org")

#install.packages("tidyverse")

#install.packages("metafor")

#install.packages("devtools")

#devtools::install_github("MathiasHarrer/dmetar")

Laad de pakketten die nodig zijn om de voorbeelden in dit boek uit te voeren.

library(meta)
library(metafor)
library(dmetar)
library(tidyverse)

Haal ook de datasetSuicidePrevention.xlx die je hier vandaan kunt halen en open die set.

library(openxlsx)
data <-read.xlsx("SuicidePrevention.xlsx")

Laten we naar die dataset kijken en zien welke variabelen er zijn. Er zijn tien kolommen (variabelen) en negen rijgen (individuele studies)

glimpse(SuicidePrevention)
Rows: 9
Columns: 10
$ author    <chr> "Berry et al.", "DeVries et al.", "Fleming et al.", "Hunt & …
$ n.e       <dbl> 90, 77, 30, 64, 50, 109, 60, 40, 51
$ mean.e    <dbl> 14.98, 16.21, 3.01, 19.32, 4.54, 15.11, 3.44, 7.10, 23.74
$ sd.e      <dbl> 3.29, 5.35, 0.87, 6.41, 2.75, 4.63, 1.26, 0.76, 7.24
$ n.c       <dbl> 95, 69, 30, 65, 50, 111, 60, 40, 56
$ mean.c    <dbl> 15.54, 20.13, 3.13, 20.22, 5.61, 16.46, 3.42, 7.38, 24.91
$ sd.c      <dbl> 4.41, 7.43, 1.23, 7.62, 2.66, 5.39, 1.88, 1.41, 10.65
$ pubyear   <dbl> 2006, 2019, 2006, 2011, 1997, 2000, 2013, 2015, 2014
$ age_group <fct> gen, older, gen, gen, gen, gen, gen, older, older
$ control   <fct> WLC, no intervention, no intervention, WLC, WLC, no interven…

Je kunt de inhoud van een bepaalde kolommen alleen bekijken, bv deze:

SuicidePrevention$n.e
[1]  90  77  30  64  50 109  60  40  51

En je kunt ook zien wat voor een soort variabele het is.

class(SuicidePrevention$n.e)
[1] "numeric"

Laten we het gemiddelde van deze variabele vaststellen.

mean(SuicidePrevention$n.e)
[1] 63.44444

Zorg ervoor dat de variabelen de goede klasse hebben, bijvoorbeeld numeriek. Laten we dit veranderen voor enkele variabelen.

SuicidePrevention$mean.e <- as.numeric(SuicidePrevention$mean.e)
SuicidePrevention$sd.e <- as.numeric(SuicidePrevention$sd.e)
SuicidePrevention$n.c <- as.numeric(SuicidePrevention$n.c)
SuicidePrevention$mean.c <- as.numeric(SuicidePrevention$mean.c)
SuicidePrevention$sd.c <- as.numeric(SuicidePrevention$sd.c)
SuicidePrevention$n.c <- as.numeric(SuicidePrevention$n.c)

Twee variabelen moeten we veranderen in factoren om de analyse later correct te kunnen uitvoeren.

SuicidePrevention$age_group <- as.factor(SuicidePrevention$age_group)
SuicidePrevention$control <- as.factor(SuicidePrevention$control)

In dit geval is de variabele age_group opgesplitst in de niveaus gen en older, zie hier:

SuicidePrevention$age_group
[1] gen   older gen   gen   gen   gen   gen   older older
Levels: gen older

Een logische variabele kan ook handig zijn, bijvoorbeeld voor de volgende variabele:

SuicidePrevention$pubyear
[1] 2006 2019 2006 2011 1997 2000 2013 2015 2014

Deze zetten we om in een logische variabele.

as.logical(SuicidePrevention$pubyear >= 2010)
[1] FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE

Soms is het goed om naar specifieke gegevens uit het dataframe te kijken. Onthoud: data.frame[rijen, kolommen]. Dus kijken naar rij 2 wordt:

SuicidePrevention[2,]
          author n.e mean.e sd.e n.c mean.c sd.c pubyear age_group
2 DeVries et al.  77  16.21 5.35  69  20.13 7.43    2019     older
          control
2 no intervention

Als je informatie van de eerste kolom én de tweede rij wilt zien, schrijf je:

SuicidePrevention[2,1]
[1] "DeVries et al."

Gebruik de functie c() om delen van het dataframe te selecteren. Om rijen 2 en 3 en kolommen 4 en 6 te extraheren wordt

SuicidePrevention[c(2,3),c(4,6)]
  sd.e mean.c
2 5.35  20.13
3 0.87   3.13

Rijen selecteer je op nummer, kolommen kun je ook op naam selecteren, zoals in dit voorbeeld.

SuicidePrevention[, c("author", "control")]
           author         control
1    Berry et al.             WLC
2  DeVries et al. no intervention
3  Fleming et al. no intervention
4    Hunt & Burke             WLC
5 McCarthy et al.             WLC
6   Meijer et al. no intervention
7   Rivera et al. no intervention
8  Watkins et al. no intervention
9  Zaytsev et al. no intervention

Je kunt voor een gegevensverzameling ook de functie filter gebruiken, die werkt op basis van rijwaarden, bijvoorbeeld de rijwaarden van n.e. zijn kleiner of gelijk aan 50. Dan schrijf je:

filter(SuicidePrevention, n.e <= 50)
           author n.e mean.e sd.e n.c mean.c sd.c pubyear age_group
1  Fleming et al.  30   3.01 0.87  30   3.13 1.23    2006       gen
2 McCarthy et al.  50   4.54 2.75  50   5.61 2.66    1997       gen
3  Watkins et al.  40   7.10 0.76  40   7.38 1.41    2015     older
          control
1 no intervention
2             WLC
3 no intervention

Je kunt gegevens zelf gemakkelijk transformeren. Dus als je de studie van De Vries et al. wilt transformeren van 2019 naar 2018, kun je het schrijven als:

SuicidePrevention[2, "pubyear"] <- 2018
SuicidePrevention[2, "pubyear"]
[1] 2018

Als je een nieuwe kolom wilt toevoegen aan je dataframe (bijvoorbeeld het gemiddelde verschil), kun je dat als volgt doen:

SuicidePrevention$md <- SuicidePrevention$mean.e - SuicidePrevention$mean.c

Zodra alles is getransformeerd, kunnen we het bewerkte bestand opslaan. Je kunt het opslaan als een .rda-bestand, zo dan:

save(SuicidePrevention, file = "SuicidePrevention.rda")

of opslaan als een .csv-bestand, zo dan:

write.csv(SuicidePrevention, file = "SuicidePrevention.csv")
Important

Bewaar je transformatie syntax, zodat je weet wat je hebt gedaan van de originele gegevens naar de uiteindelijke gegevens.