Biometrie betekent het vaststellen van meetbare eigenschappen van levende wezens. Dit kan bijvoorbeeld betekenen lichaamsgewicht, lengte van ledematen, levensduur, sexe. Biometrische kenmerken worden ook gebruikt in je paspoort.
Vandaag dag ga je met een groepje van 3 of 4 medestudenten bezig met het vaststellen van de hand lengte / breedte ratio, in het bijzonder in afhankelijkheid van sexe.
Aan de hand van dit onderwerp gaan we in eenvoudige vorm de gehele wetenschappelijke cyclus doorlopen. Maak je geen zorgen als je de code nog niet helemaal snapt; die kan je gewoon overnemen en aanpassen voor je eigen data.
Voor dit eerste onderzoekje in de module zal je erg geleid werken. De data verzameling doe je echt zelf maar de dataverwerking en -analyse grotendeels naar voorbeeld. In je eigen “grote” onderzoek van deze module ga je onder begeleiding dit proces zelf bedenken en uitvoeren.
Lees dit document eerst een keer helemaal door voordat je zelf aan het werk gaat.
Het staat je vrij een ander simpel te meten biometrisch kenmerk te onderzoeken. Voorwaarde is wel dat je twee aspecten meet (bv lichaamslengte en hoofdomtrek) en hun relatie onderzoekt, en ook dat je verschillende groepen onderzoekt (man/vrouw, jong/oud etc.). Ten slotte moeten verschillende studenten het meetwerk afwisselen en ook dat moet vastgelegd worden.
Voordat je verder gaat moet je je onderzoeksvraag formuleren. Wat is de centrale vraag die je in je onderzoek beantwoord wil hebben? We zullen de onderzoeksvraag hier als volgt definieren:
“Is er bij de mens een sexe verschil in de lengte/breedte ratio van de hand?”
Nu er een vraag geformuleerd is kan je een hypothese gaan opstellen. De hypothese beschrijft de verwachte uitkomst van je onderzoek. Voor dit onderzoek is de hypothese geformuleerd simpelweg door de onderzoeksvraag om te zetten in een stelling:
“Er is bij de mens een sexeverschil in de lengte/breedte ratio van de hand.”
Misschien heb je al wel eens gehoord van de nulhypothese. Dit is de tegenhanger van de hypothese, gebruikt in de statistiek. De nulhypothese stelt altijd dat een onderzocht effect niet bestaat, het uitgangspunt van alle statistische toetsen. Hier zou de nulhypothese dus zijn
“Er is bij de mens geen verschil in de lengte/breedte ratio van de hand.”
Als je je onderzoeksvraag hebt geformuleerd zal je een manier moeten bedenken om die vraag beantwoord te krijgen. Als we de onderzoeksvraag wat gedetailleerder bekijken zien we daar drie verschillende aspecten (variabelen) in zitten: de sexe, de hand-lengte en de hand-breedte. We zullen dus een manier moeten vinden om van een groep mensen deze drie variabelen vast te stellen. Hoe groot deze groep moet zijn om een betrouwbaar antwoord te vinden is een heel belangrijke vraag die je bij een volgende module zeker gaat behandelen. Voor nu kiezen we gewoon een redelijk aantal waarvan het haalbaar is om die in ongeveer anderhalf uur tijd te meten.
Sommige wetenschappers zullen tegenwerpen dat je pas van een experiment spreekt als ar sprake is van ingrijpen, en dat is hier natuurlijk niet het geval. Wij hanteren hier de Wikipedia definitie van een experiment:
Een experiment is een zorgvuldig opgezette en nauwkeurige observatie van een stukje werkelijkheid dat kan worden uitgevoerd om een wetenschappelijke hypothese te testen.
Ons experiment ziet er nu als volgt uit.
Van 40 proefpersonen, gelijk verdeeld over mannen en vrouwen en willekeurig geselecteerd in en rond het schoolgebouw, zal de sexe gevraagd worden en vervolgens de handlengte en -breedte gemeten worden.
Om te garanderen dat verschillende onderzoekers de metingen op dezelfde reproduceerbare manier doen wordt de uitvoering van een experiment bij goed onderzoek in een protocol vastgelegd.
Een wetenschappelijk (onderzoeks-) protocol beschrijft gedetailleerd de volgorde en uitvoering van stappen die in een experiment gezet moeten worden om tot een reproduceerbaar resultaat te komen.
Voor dit experiment is het (meet)protocol hieronder beschreven.
Zoek, samen met een ander groepje van je klas, in of rond het
schoolgebouw medestudenten. Vraag beleefd of ze willen participeren in
een klein wetenschappelijk onderzoekje voor school waarbij de maten van
de hand opgenomen zullen worden.
Is het antwoord nee, dan groet je vriendelijk en zoek je verder.
Is het antwoord ja, dan vraag je of de proefpersoon de hand horizontaal
en gestrekt wil houden met de palm naar beneden. Vervolgens meet je
zowel de lengte als de breedte van de hand op, in millimeters. Deze leg
je vast in de spreadsheet, samen met je laborant-ID en een identifier
(géén naam!) van de proefpersoon. Ten slotte vraag je aan de
proefpersoon zijn/haar/hun sexe en legt deze vast. Wil de proefpersoon
deze niet geven, of is die nonbinair, dan leg je dit vast als
“anders/onbekend”. Het “parallel groepje” (dat niet jouw bevindingen mag
horen) doet dezelfde meting en slaat deze met dezelfde participant
identifier op.
Bedank de proefpersoon voor deelname.
Wissel de metingen af tussen de verschillende studenten in jouw
groepje.
Ga door totdat van ten minste 40 proefpersonen de gegevens zijn verzameld.
Ga aan de slag! Bestudeer het protocol aandachtig en bespreek
onderling hoe je het gaat aanpakken. Als er onduidelijkheden zijn
bespreek je deze met de docent. Verzamel vervolgens de data en kom terug
als je van 40 personen de data hebt verzameld. Je hebt hier ongeveer
anderhalfuur voor.
Zorg er in ieder geval dat je alle metingen goed opslaat en er snel mee
aan de slag kan.
Je moet de onderzoeksresultaten in deze vorm opslaan:
laborant_ID,subject_ID,handlengte,handbreedte,sexe 3241,G1_03,113,104,m
Dit type databestand noemen we csv wat
staat voor “comma-separated values”. Het is daarom het handigste als je
je bestand een .csv extensie geeft. Als alternatief kan je
het in excel opslaan en daarna exporteren naar csv.
We gaan nu een data-analyse uitvoeren op de verzamelde biometrische gegevens.
Voor de verwerking en analyse van je eigen data maak je gebruik van
het aangeleverde template RMarkdown document. Daarin doorloop je
dezelfde onderzoeksstappen als hieronder, maar dan met je eigen data.
Aan het einde van de dag gaat dat document, in originele en “geknitte”
vorm, samen met je databestand, in een git repo die is opgezet volgens
voorschift in de cursushandleiding. De link hierna gaat in je portfolio
op eJournal. Let op dat je alle stappen hebt doorlopen voordat
je inlevert. Gebruik ook de RStudio spellingscontrole!
Vergeet niet jullie namen en studentnummers bovenaan de markdown te
zetten!
Als het goed is heb je nu een spreadsheet met daarin vier kolommen en
40 rijen. De kolommen zijn: hand_lengte,
hand_breedte, sexe en
laborant_ID.
Om de rest van dit practicum te kunnen voordoen worden gesimuleerde data gebruikt. Gesimuleerde data zijn data die niet echt gemeten zijn, maar kunstmatig samengesteld op basis van vooropgezette ideeen over de aard van de data.
Hier zijn de gesimuleerde data. Ze zitten al in een data frame.
sim_data
## tech_ID hand_length hand_width gender
## 1 3134 107.36163 90.20092 f
## 2 3134 98.55931 78.91056 f
## 3 3134 97.00358 73.98825 f
## 4 3134 108.74788 74.38382 f
## 5 3134 101.73746 85.50724 f
## 6 3134 108.24860 75.16627 f
## 7 3134 110.77049 92.25934 f
## 8 3134 107.11374 84.92682 f
## 9 3134 122.94990 74.30795 f
## 10 3134 92.43992 80.80366 f
## 11 3134 120.35583 97.08825 m
## 12 3134 115.35966 96.40534 m
## 13 3134 99.69219 104.70108 m
## 14 3134 111.42060 113.47554 m
## 15 3134 115.73551 106.96923 m
## 16 3134 114.82976 91.50933 m
## 17 3134 107.07510 112.88075 m
## 18 3134 105.26658 99.90833 m
## 19 3134 112.79134 96.30404 m
## 20 3134 101.07306 97.41011 m
## 21 3245 100.91851 75.71899 f
## 22 3245 79.59353 90.83587 f
## 23 3245 76.96255 65.10785 f
## 24 3245 83.62435 86.53701 f
## 25 3245 77.25653 78.37951 f
## 26 3245 102.55690 81.51985 f
## 27 3245 99.72391 86.08989 f
## 28 3245 91.79959 86.47279 f
## 29 3245 93.70799 81.25694 f
## 30 3245 64.32239 94.61460 f
## 31 3245 101.62729 91.29781 m
## 32 3245 113.19417 107.32987 m
## 33 3245 109.55074 95.30915 m
## 34 3245 99.21153 105.53079 m
## 35 3245 90.61605 97.79614 m
## 36 3245 84.58661 97.15676 m
## 37 3245 95.95259 94.02660 m
## 38 3245 110.18851 85.54245 m
## 39 3245 126.58701 79.58761 m
## 40 3245 96.66482 104.50437 m
Om data vanuit een tekstbestand in te lezen kan je dit codeblok gebruiken, aannemend dat je data er exact zo uitzien als in bovenstaande voorbeeld:
data_file <- "pad/naar/jouw/databestand.csv"
#data format: laborant_ID,subject_ID,handlengte,handbreedte,sexe
biometric_data <- read.table(file = data_file,
header = TRUE,
sep = ",")
Let op: als je missende data hebt moet je die specificeren door dit
argument toe te voegen:
na.strings = "<jouw NA symbool>"
Je hebt je data verzameld en ingelezen. Nu is het tijd om er een eerste verkenning op uit te voeren.
Allereerst berekenen we de lengte/breedte ratio, want dat was immers de onderzoeksvraag. Onderstaande code voegt een extra kolom toe aan de dataframe.
sim_data$ratio <- sim_data$hand_length / sim_data$hand_width
head(sim_data)
## tech_ID hand_length hand_width gender ratio
## 1 3134 107.36163 90.20092 f 1.190250
## 2 3134 98.55931 78.91056 f 1.249000
## 3 3134 97.00358 73.98825 f 1.311067
## 4 3134 108.74788 74.38382 f 1.461983
## 5 3134 101.73746 85.50724 f 1.189811
## 6 3134 108.24860 75.16627 f 1.440122
De R code in de chunks hieronder hoef je nog niet zelf te
kunnen doen, maar hopelijk snap je wel wat er gebeurd. Als je iets meer
van een functie wilt weten kan je in de console
?<>functie_naam intypen zodat je de documentatie
ervan krijgt.
Laten we eerst eens naar de gemiddelden kijken per sexe. Het is natuurlijk mogelijk om dat “handmatig” per sexe uit te voeren, zoals hier
mean(sim_data[sim_data$gender == "f" , "hand_length"]) # vrouwen
## [1] 96.26994
mean(sim_data[sim_data$gender == "m" , "hand_length"]) # mannen
## [1] 106.5889
Selecteren uit een dataframe is als zeeslagje spelen: tussen de
blokhaken moet je [<rijen>, kolommen] selecteren
gebruikmakend van adres (index), naam of logische operatie.
Efficiënter en mooier is het op deze manier te doen:
tapply(X = sim_data$hand_length, # split wat
INDEX = sim_data$gender, # split op
FUN = mean) # pas functie toe
## f m
## 96.26994 106.58895
Echter, omdat je dit ook voor de handbreedte wil doen is dit nog beter:
#split over gender into list of dataframes
gender_split_data <- split(x = sim_data,
f = sim_data$gender)
#apply a function to report means of both measurements
sapply(X = gender_split_data,
FUN = function(x){
c(hand_length = mean(x$hand_length),
hand_width = mean(x$hand_width),
ratio = mean(x$ratio))
})
## f m
## hand_length 96.269938 106.588948
## hand_width 81.849406 98.736677
## ratio 1.187848 1.089838
Kan jij een van bovenstaande stukken code aanpassen zodat ook de standaarddeviatie (sd) wordt gerapporteerd? Is er verschil in spreiding van de data tussen de sexen?
Deze tabel laat zien dat er een verschil is tussen mannen en vrouwen, in zowel handlengte, -breedte en de ratio. Een boxplot laat dat ook mooi zien, en nog veel meer.
Dit is een grafische weergave van de “vijf-getallensamenvatting” (five number summary). Deze bestaat uit het minimum, het eerste kwartiel, de mediaan (of tweede kwartiel), het derde kwartiel en het maximum van de waargenomen data. Uitbijters (outliers) worden als losse punten weergegeven.
Je ziet hieronder hoe gemakkelijk het uitsplitsen op groepen -geslacht in dit geval- is wanneer je de “formule-variant” van de boxplot functie gebruikt.
Deze workshop maakt gebruik van de plotting bibliotheek
ggplot2. Die moet je importeren door
library(ggplot2) bovenaan te zetten. In “basis” R zitten
ook plotting functies, maar die zijn veel minder mooi dus die slaan we
over.
library(ggplot2)
# maak de plot en voeg lagen toe
ggplot(data = sim_data,
mapping = aes(x = gender, y = hand_length, fill = gender)) +
geom_boxplot() + # boxplot visualisatie
labs(x = "Sexe", y = "hand lengte (mm)") + # as-labels
theme_minimal() # beetje schoner plotje maken
Hier nog een voor de andere variabele.
#library(ggplot2) #hoeft niet nog een keer!
# maak de plot en voeg lagen toe
ggplot(data = sim_data,
mapping = aes(x = gender, y = hand_width, fill = gender)) +
geom_boxplot() + # boxplot visualisatie
geom_point() + # met punten erbij
labs(x = "Sexe", y = "hand breedte (mm)") + # as-labels
theme_minimal() # beetje schoner plotje maken
geom_point() functie
Gebruik de geom_point() functie als je ook de datapunten
zelf wil laten zien
Een boxplot is een visuele data representatie die ongelofelijk veel informatie geeft in één oogopslag. Zo zie je zoals de definitie gaf de mediaan en de kwartielen, maar ook of er uitbijters zijn en of de verdeling “scheef” is. Die scheefheid heeft te maken met de verdeling van de data. In de volgende paragraaf gaan we naar de verdeling kijken.
Voor een statistische analyse is het belangrijk om te weten wat de onderliggende verdeling, of distributie, van de data is. De meest simpele verdeling is de uniforme distributie, waarbij alle mogelijke waarden tussen het minimum en maximum exact dezelfde kans hebben.
Een voorbeeld is de verdeling van bacteriën in een reageerbuis, of
bomen in een bos. Deze komt echter niet veel voor in de
levenswetenschappen.
In de levenswetenschappen is het eigenlijk altijd de vraag of de data
wel of niet normaal zijn verdeeld. De
normaalverdeling ziet er zo uit.
Het is voor het gebruik van statistische testen heel belangrijk om te
weten of de data normaal zijn verdeeld. Zo is de
t-test (functie t.test()) alleen
te gebruiken voor normaal verdeelde data. De t-test wordt gebruikt om te
onderzoeken of twee steekproeven significant van elkaar verschillen.
Zijn de data niet normaal verdeeld dan moet de Wilcoxon
rank-sum test gebruikt worden; ook wel
Mann-Whitney U test genoemd (functie
wilcox.test()).
Hoe zit het nu met de verdeling van onze hand biometrie? Dat kan je
op verschillende manieren benaderen. Visueel kan dit met
histogram of density plot. Hier zie je beide, voor de
ratio kolom.
ggplot(data = sim_data,
mapping = aes(x = ratio, fill = gender)) +
geom_histogram(bins = 10, colour = "black") + # histogram layer with 10 bins
facet_wrap(. ~ gender) + # split plots over gender
labs(x = "Length/width ratio") +
theme_minimal()
De expressie facet_wrap(. ~ gender) zegt: splits alles
in verschillende plots uit op gender.
Zit er een histogram tussen die lijkt op een normaalverdeling?
Hoe kleiner de steekproefgrootte (sample size) hoe lastiger
het is de onderliggende verdeling vast te stellen. Speel maar eens met
dit blokje code, en verander de steekproefgrootte (n=) in
de rnorm() functie en de breaks= in de
hist() functie. Neem voor n bijvoorbeeld
achtereenvolgens 10, 100, 1000, 10000, 10000 en voor breaks 5,
10, 50. Wanneer zie je een echte normaalverdeling verschijnen?
hist_data <- data.frame(x = rnorm(n = 100))
ggplot(data = hist_data,
mapping = aes(x = x)) +
geom_histogram(bins = 10, fill = "gold", colour = "black") +
theme_minimal()
Dit experiment met de argumenten van
rnorm() en hist() moet je opnemen in je eigen
RMarkdown.
Beantwoord deze vragen:
n
groter wordt?n groter wordt, en kan je dat verklaren?n en
breaks de uitkomst toch verschillend?n geeft het meeste kans om een echte
normaalverdeling te zien?breaks
argument? Geeft de documentatie daar een verklaring voor?We hebben tot nu toe gekeken naar de verschillen tussen man en vrouw. De variatie daarin noemen we biologische variatie. Alles in de biologie kent variatie, door milieu of door genetica. Echter, als je in een experiment dingen meet doet een persoon dat en gebruik je meestal instrumenten. Dat noemen we experimentele variatie. Twee meetlatten kunnen net anders gefabriceerd worden, en een onderlinge -maar dan reproduceerbare afwijking hebben ten opzichte van elkaar. Aan de andere kant kan het zijn dat twee laboranten experimenten net op een verschillende manier uitvoeren. Deze laatste bron van variatie gaan we hier onderzoeken.
Onderstaande boxplot geeft de meetwaarden voor handlengte uitgesplitst op laborant_ID.
ggplot(data = sim_data,
mapping = aes(x = tech_ID, y = hand_length, fill = tech_ID)) +
geom_boxplot(colour = "black") +
theme_minimal()
Er lijkt hier duidelijk sprake van een systematische fout (bias): Laborant 3245 heeft schijnbaar consequent een kleinere lengte gemeten.
Een systematische fout, ook wel (systematische) bias genoemd, is in de statistiek een zogenaamde niet-steekproeffout die een vertekening (dat wil zeggen, een afwijking ten opzichte van het juiste resultaat) oplevert die een systematische oorzaak heeft, en dus niet te wijten is aan toevallige effecten.
We kunnen de ggplot gebruiken om op beide variabelen uit te splitsen:
ggplot(data = sim_data,
mapping = aes(x = gender, y = hand_length)) +
geom_boxplot(fill = "darkgreen") +
facet_wrap(. ~ tech_ID) +
ylab("hand lengte (mm)") +
theme_linedraw()
Je ziet hier twee bronnen van variatie in actie: systematische bias die hoogstwaarschijnlijk veroorzaakt is door de laboranten en biologische variatie tussen mannen en vrouwen.
Dit is het verschijnsel dat verschillende individuen van één soort
van elkaar verschillen.
Biologische variabiliteit kan verschillende oorzaken hebben.
Welke bron van biologische variatie ligt volgens jou ten grondslag aan de gevonden verschillen in handlengte tussen mannen en vrouwen, en tussen mannen respectievelijk vrouwen onderling?
Nu is het tijd om op de oorspronkelijke onderzoeksvraag (en hypothese) terug te komen. “Is er bij de mens een sexeverschil in de lengte/breedte ratio van de hand?” Bij deze gesimuleerde data lijkt het er wel op. Om er een waarschijnlijkheid bij te vinden dat dit echt zo is moeten we een statistische test uitvoeren.
Een statistische toets is een methode om na te gaan of een bepaalde veronderstelling, nulhypothese genaamd, in het licht van de waarnemingsuitkomsten verworpen dient te worden.
De toetsen die je voor het beantwoorden van deze vraag kan gebruiken zijn de t-test als er sprake is van een normaalverdeling en de Mann-Whitney U test als dat niet het geval is.
We zullen daarom eerst onderzoeken of hier wel sprake is van normaliteit. Ook daar is -natuurlijk- een test voor: de Shapiro-Wilk test.
shapiro.test(sim_data$ratio)
##
## Shapiro-Wilk normality test
##
## data: sim_data$ratio
## W = 0.97289, p-value = 0.442
Als de p-waarde kleiner dan 0.05 is, is de verdeling van de steekproef significant verschillend van de normale verdeling. Dat is hier dus absoluut niet aan de orde. We kunnen dus gewoon de t-test gebruiken.
We gaan hier een onafhankelijke t-test uitvoeren (de two-sample independent).
female_ratios <- subset(sim_data,
subset = gender == "f",
select = ratio,
drop = T) # drop = T forces ro a vector
male_ratios <- subset(sim_data,
subset = gender == "m",
select = ratio,
drop = T)
t.test(female_ratios, male_ratios)
##
## Welch Two Sample t-test
##
## data: female_ratios and male_ratios
## t = 1.6039, df = 36.102, p-value = 0.1175
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.0259096 0.2219297
## sample estimates:
## mean of x mean of y
## 1.187848 1.089838
Voor deze gesimuleerde data is de p-waarde 0.1175, weer hoger dan het
standaard afsnijpunt van 0.05, wat betekent dat de nulhypothese
niet wordt verworpen. De nulhypothese hebben we in het begin
van dit document opgesteld.
Er is geen bewijs gevonden voor een significant verschil in hand
lengte/breedte ratio’s tussen mannen en vrouwen.
Voor de volledigheid kunnen we ook nog de Mann-Whitney U test
uitvoeren (die in R wilcox.test() heet).
wilcox.test(female_ratios, male_ratios)
##
## Wilcoxon rank sum exact test
##
## data: female_ratios and male_ratios
## W = 276, p-value = 0.04018
## alternative hypothesis: true location shift is not equal to 0
Deze zit net wel in het significantie bereik.
Wat nu te doen? Als je de krant wil halen met een leuk berichtje dan kies je het significante resultaat. Wil je robuuste wetenschap bedrijven dan ga je wat meer data verzamelen.
Vraag de data van je parallelgroep (die dezelfde proefpersonen hebben gemeten). Onderzoek of er verschillen in de resultaten zijn tussen jullie groepen. Als er verschillen zijn probeer deze dan te verklaren. Neem deze analyse op in je onderzoeksdocument.
Bespreek in je groep de volgende vragen en voeg de antwoorden toe aan je uitgewerkte onderzoeksdocument.
Zijn de metingen tussen de verschillende meters ook (significant) verschillend? Zo ja, waardoor zou je de verschillen kunnen verklaren?
Onderzoek de verschillen tussen mannen en vrouwen met betrekking tot hand lengte, handbreedte en de ratio.
Zou je het protocol aanpassen na deze ervaring, of was hij voldoende duidelijk en reproduceerbaar?