Samenvatting Statistiek – R Course 3
Voor een samenvatting van de course van DataCamp over verschillende datatypen en
objecten/datastructuren: zie laatste 2 pagina’s
Week 1
R: R is een softwarepakket en programmeertaal ontwikkeld voor statistiek
en data-analysedoelen.
Je kunt R makkelijk downloaden, maar de applicatie zelf is niet heel handig
om in te werken. Daarom download je ook R studio. Het is een virtuele
omgeving voor R, net als je Pycharm gebruikt voor Python.
De syntax van R lijkt wel wat op die van Python. Er zijn een aantal voordelen van R
tegenover python:
- Statistische functies
- Gemakkelijk grafieken maken
- Datasets zijn al ingeladen
- Ingebouwde documentatie
Op DataCamp kunnen we een course maken over een introductie tot R. Het geeft informatie
over de verschillende datastructuren:
- Vectors <- lijst van 1 datatype
- Matrices <- 2d-lijst van 1 datatype
- Factors <- categorische lijst (nominaal/ordinaal)
- Data Frames <- 2d-lijst met verschillende datatypen
- Lists <- lijst met verschillende datatypen
Het is de bedoeling dat je zelf R en R studio download voor de volgende les. Download eerst
R, en daarna pas R studio. Als het goed is gaat het allemaal automatisch in R studio.
Week 2
Let op: R begint met tellen bij 1!
R heeft veel ingebouwde packages: datasets, graphs, stats, enz. De packages zijn
standaard aanroep baar. Ze bevatten onder andere functies en gevulde datastructuren.
R beschikt over ingebouwde documentatie. Die kun je ophalen met ? + waar je informatie
van wilt weten, bijvoorbeeld ?datasets. Je krijgt dan een korte uitleg over het gene wat je
opzoekt. Als je nog meer informatie wilt, dan kun je library gebruiken, bijvoorbeeld
library(help = “datasets”).
Wanneer je ergens informatie over wilt weten, maar je weet niet precies wat je zoekt/hoe het
heet, dan kun je ook een zoekterm gebruiken met dubbele vraagtekens, bijvoorbeeld ??
package. Je krijgt dan wat algemene informatie die met je zoekterm overeen komt.
Deze les werken we met de dataset ChickWeight. Je kunt kijken wat voor een informatie erin
staat met ?ChickWeight. Vervolgens kun je een heleboel dingen aanroepen over de dataset,
bijvoorbeeld (let er op dat alles case sensitive is):
, - summary(ChickWeight): geeft wat informatie over de dataset
- gewicht <- ChickWeight$weight: wat je hier doet is het selecteren van de weight
kolom van ChickWeight met $, en dat sla je op in de gewicht variabele.
- mean(gewicht): het gemiddelde gewicht
- median(gewicht): mediaan van het gewicht
- sd(gewicht): standaarddeviatie van het gewicht
NA waardes: soms heb je geen waardes bij bepaalde metingen, die waardes zijn dan not
available. Je kunt checken of iets een NA waarde bevat door is.na(), bijvoorbeeld
is.na(gewicht). Je zult zien dat overal False staat.
Wanneer je berekeningen wilt doen, dan moet je soms die NA’s eruit halen. Dat kan met
na.omit(), bijvoorbeeld sum(na.omit(gewicht)). Alle gewichten worden dan bij elkaar
opgeteld, op de NA’s na.
Vervolgens hebben we wat dingen gedaan met de dataset Airquality.
We hebben naar de resultaten van de volgende vragen gekeken:
a) subset(airquality,Day==6): geeft alles weer waarvan de dag 6 is
b) head(airquality): geeft de eerste paar rijen terug
c) tail(airquality): geeft de laatste paar rijen terug
d) subset(airquality, Temp >80, select = c(Ozone, Temp)): selecteer Ozone en Temp
waarbij de temperatuur hoger is dan 80 graden.
e) summary(airquality): samenvatting van airquality
f) tempcelcius <- 5/9*(airquality$Temp-32): je doet 5 delen door 9 keer (de temperatuur
min 32), en dat sla je op in tempcelcius
g) is.na(airquality$Ozone): je checkt of er NA’s voorkomen in Ozone
h) na.omit(airquality$Ozone): je haalt de NA’s eruit (niet echt uit de dataset, alleen voor
deze line).
Ten slotte hebben we wat oefeningen gedaan met de airquality dataset:
a) Selecteer de subset, waarvoor de temperatuur onder de 70°F en laat alleen
rijnummer, Ozone en Temp zien.
b) Selecteer de subset, waarvoor Wind>12.0 en laat alleen rijnummer, Ozone en Wind
zien.
c) Selecteer de subset, waarvoor Day = 1 en laat alleen rijnummer, Ozone en Temp en
Day zien.
d) Selecteer de subset, waarvoor Day = 1 en laat de kolom Temp weg.
e) Selecteer de kolommen Ozone tot en met Wind.
f) Selecteer regel 8 tot en met 14 (week 2) uit het dataframe.
g) Selecteer de zondagen uit het dataframe.
, h) Selecteer alle dagen uit het dataframe waarop Ozone de waarde NA heeft.
De uitwerkingen heb ik niet meer…
Week 3
Grafieken: plot, barplot en histogram
In R kun je gemakkelijk grafieken plotten. De functie plot werkt erg gemakkelijk. Je kunt wat
voorbeeld plots zien met example(plot). Je kunt datasets ook plotten, bijvoorbeeld plot(cars).
Je krijgt dan deze plot:
Maar wat hier nou staat is niet echt duidelijk, in wat voor eenheid staat bijvoorbeeld de
snelheid? Informatie over de dataset vind je moet ?cars. Je ziet dan waar alles voor staat.
Nu je dat weet kun je extra informatie toevoegen aan de grafiek, bijvoorbeeld assen:
- xlab: voegt x-as label toe
- ylab: voegt y-as label toe
- sub: ondertitel
- main: titel
- las: zegt iets over hoe de getallen op de x-, y-assen worden weergegeven
(horizontaal of verticaal). Las kan 1, 2 of 3 zijn.
Invullen geeft:
> plot(cars, xlab = "Speed (mph)", ylab = "Stopping distance (ft)", sub = "bron: Ezekiel,
M. (1930) Methods of Correlation Analysis. Wiley.", main = "Cars data from the year
1920", las=1)
Soms kan het zijn dat je een grafiek aanmaakt, maar nog niet meteen titels meegeeft. Je
kunt dan met title() nog die informatie later meegeven.
Het toevoegen van een lineaire trendlijn: dat doe je met abline:
> abline(lm(dist ~speed, data=cars))
Ik weet niet precies was lm doet, maar je moet het wel gebruiken.
Je kunt ook gewoon makkelijk lijnen invoegen nadat je de grafiek hebt gemaakt:
,> abline(v = 15, col = "red", lwd = 3)
> abline(h = 40, col = "green", lwd = 3)
> abline(20,1, col = "blue", lwd = 3)
v en h: geven de locatie aan van de trendlijn.
col: de kleur
lwd: line width
Wat de getallen betekenen bij de laatste abline begrijp ik niet precies. Ik denkt dat het
betekent dat je bij 20 begint, en elke keer met 1 omhoog gaat, but don’t quote me on that.
Resultaat:
Barplot (staafgrafiek)
In R kun je ook staafgrafieken maken.
Maak een variabele aan, en sla daar een aantal cijfers in op:
> cijfers <- c(6,7,8,5,6,8,8,6,5,9,7)
Vervolgens kun je barplot(cijfers) doen. Je krijgt dan de volgende grafiek te zien:
,Dit zegt natuurlijk nog niet echt veel. Je kunt bijvoorbeeld namen gaan toevoegen, die je
koppelt aan de cijfers met names(), op de volgend manier:
> names(cijfers) <- c("Kim", "Jip", "Neo", "Jan", "Miep", "Lot", "Ernie", "Bert", "Ine", "Rik",
"Mees"
Wanneer je cijfer nu opnieuw plot, zie je dit:
Het kan zijn dat de namen die je hebt ingevuld lang zijn, en dat ze daardoor niet worden
weergegeven. Maak de grafiek groter om ze wel te zien.
Nu kun je de grafiek titels geven:
> barplot(cijfers, main = "Cijfers per student", xlab= "Namen", ylab= "Cijfer")
Je grafiek heeft nu dan ook as namen en een titel.
Een andere barplot van dezelfde data, om het aantal voorkomen van een cijfer te zien:
> barplot(table(cijfers), main = "aantal keer dat een cijfer is gegeven")
Wat je nu te zien krijgt is de volgende grafiek:
Hierin kun je zien hoe vaak elk cijfer is gegeven. Dit komt doordat je table() hebt gebruikt.
Wat table doet is het tellen van hoe vaak iets voorkomt.
Je kunt ook de kleur van de plot bepalen door col te gebruiken.
,
,Nog een voorbeeld:
> binomialeverdeling<-dbinom(0:4,4,1/2)
> names(binomialeverdeling)<-c("0","1","2","3","4")
> barplot(binomialeverdeling,col="lavender",xlab="aantal successen")
Dbinom komen we later nog op terug.
Histogram
Je kunt histogrammen maken met hist(). Wanneer je hist(cijfers) doet, krijg je de volgende
grafiek:
Je ziet de frequentie van hoe vaak de cijfers voorkomen, alleen zitten ze nu wel in groepen.
Zo zie je bijvoorbeeld dat er 5 leerlingen zijn die een 5 of 6 hebben gehaald, maar je weet
niet de exacte aantallen, dus die is niet echt een duidelijk grafiek. De barplot van eerder is
dan beter.
Je kunt de informatie van een histogram zien, door de histogram op te slaan in een
variabele, en deze variabele dan te printen.
> y <- hist(cijfers)
>y
$breaks
[1] 5 6 7 8 9
$counts
[1] 5 2 3 1
$density
[1] 0.45454545 0.18181818 0.27272727 0.09090909
$mids
[1] 5.5 6.5 7.5 8.5
$xname
[1] "cijfers"
$equidist
[1] TRUE
,attr(,"class")
[1] "histogram"
Stacked/grouped barplot:
Wanneer je een barplot maakt van een matrix, dan zorgt dat voor een stacked barplot
(grafieken op elkaar). Wanneer je beside=TRUE meegeeft, dan wordt het een grouped
barplot (grafieken naast elkaar).
Opdracht:
Bekijk de dataset Titanic. De Titanic dataset is een 4-dimensionale array:
1. Class
2. Seks
3. Age
4. Survived
Maak met behulp van margin.table() een matrix van het aantal overlevenden per Classe, en
maak daar een stacked en grouped barchart van. Met margin.table() selecteer je een deel uit
de dataset. Je wilt het aantal overlevenden per Classe, dus de Classe en Survived “levels”
van de dataset wil je. De code voor de stacked ziet er als volgt uit:
barplot(margin.table(Titanic,c(4,1)),legend.text = TRUE, col = c(2,3))
En geeft deze grafiek:
Je maakt dus een plot van de margin.table(), je maakt automatische een legenda met de
tekst in de dataset, en gebruikt kleuren 2 en 3.
De code voor de grouped barchart ziet er als volgt uit:
> barplot(margin.table(Titanic,c(4,1)),legend.text = TRUE, beside=TRUE, col = c(2,3))
Precies het zelfde, alleen nu met beside=TRUE. De grafiek:
,Opdrachten:
- Visualiseer een mooie barplot van HairEyeColor:
> barplot(margin.table(HairEyeColor,c(1,2)), legend.text = TRUE, col =
c(1,"brown","Red","yellow"), beside=TRUE, xlab = "Eye color", ylab = "Aantal")
- (ik heb geen uitwerking bij de rest van de vragen):
- Bedenk een onderzoeksvraag bij de dataset Titanic en maak een grafiek om deze
vraag te beantwoorden.
- Plot de dataset Formaldehyde en voeg een trendlijn toe.
- Bekijk zelf een dataset waar je een grafiek van maakt.
Week 4
Boxplots en custom legenda’s
In R kun je ook boxplots maken. Er zijn erg veel dingen die je als parameters mee kunt
geven.
Bijvoorbeeld een boxplot van de dataset InsectSprays:
> boxplot(count ~ spray, data = InsectSprays)
Dat geeft deze grafiek:
De grafiek wordt een stuk duidelijker met titels, en een leuk kleurtje:
> boxplot(count ~ spray, data=InsectSprays, main="Effectiviteit Insectenspray",
xlab="Type Spray", ylab="Aantal gemeten insecten", col="Cyan")
Dat geeft de volgende grafiek:
, Je kunt ook een logaritmische schaalverdeling doen van de y-as. Dat doe je door log=”y” als
parameter mee te geven.
Een voorbeeld met de dataset ChickWeight:
Maak een overzicht in boxplots van het gewicht van kuikens op dag 21 bij de verschillende
diëten:
> boxplot(weight~Diet, data=ChickWeight, subset=Time==21, col="yellow")
Let op de dubbel = bij het maken van de subset. Je krijgt nu de volgende boxplot:
Wanneer je geen subset zou gebruiken, dan zou je de volgende boxplot krijgen:
Je krijgt nu dus alle gewichten van alle dagen op 1 hoog gegooid.