<- import("2019 Canadian Election Study.rds") canada
14 T-toets voor het gemiddelde
We gebruiken in dit hoofdstuk gegevens uit de Canadian Election Study van 2019 als voorbeeld:
14.1 Standaardfout van het gemiddelde
De standaardfout van het gemiddelde kan worden geschat als \(\frac{s}{\sqrt{n}}\). In R kunnen we de functie MeanSE
uit package DescTools
gebruiken:
library(DescTools)
<- rnorm(20) # Voorbeeldgegevens van 20 normaal verdeelde willekeurige getallen.
example_vector
MeanSE(x = example_vector,
na.rm = TRUE)
[1] 0.1863106
MeanSE(…)
-
Deze functie berekent de standaardfout van het gemiddelde voor een vector van getallen.
x = example_vector
-
We willen de SE van het gemiddelde berekenen voor de waarden in
example_vector
. Voor je eigen gegevens verander je dit in de juiste vectornaam. na.rm = TRUE
-
Deze optie zorgt ervoor dat ontbrekende waarden worden genegeerd.
Je kunt ook MeanSE
gebruiken voor een variabele in een dataframe:
# $ gebruiken om een variabele uit een dataframe te selecteren
MeanSE(canada$cps19_age, na.rm = TRUE)
[1] 0.08541655
# Met behulp van de functie summarise
|>
canada summarise(SE_age = MeanSE(cps19_age, na.rm = TRUE))
SE_age
1 0.08541655
De functie describe
in package psych
geeft de standaardfout voor de gemiddelde voor alle variabelen in een dataframe. Dit is vooral nuttig wanneer we snel de standaardfout voor meerdere variabelen willen berekenen. In dit voorbeeld selecteren we drie interval-ratio variabelen uit de Canadian Election Study van 2019 (die we hierboven hebben geïmporteerd):
library(psych)
# Selecteer drie variabelen van "canada" en wijs toe aan dataset "canada_selectie"
<- canada |>
canada_selection select(cps19_age, cps19_lr_parties_1, cps19_lr_parties_2)
# Gebruik describe om samenvattende statistieken te berekenen voor "canada_selectie"
describe(canada_selection)
vars n mean sd median trimmed mad min max range
cps19_age 1 37822 48.69 16.61 49 48.66 20.76 18 99 81
cps19_lr_parties_1 2 27743 4.27 2.79 4 4.19 2.97 0 10 10
cps19_lr_parties_2 3 28210 6.90 2.79 8 7.28 2.97 0 10 10
skew kurtosis se
cps19_age 0.04 -0.91 0.09
cps19_lr_parties_1 0.19 -0.77 0.02
cps19_lr_parties_2 -0.97 0.14 0.02
De kolom se
geeft de standaardfout van het gemiddelde weer (standaard afgerond op twee decimalen).
14.2 T-toetsen
14.2.1 Enkelvoudige T-toets
Om een enkelvoudige T-toets (one sample t-test) te berekenen gebruiken we de functie t.test
:
In het onderstaande voorbeeld meten we of de leeftijd van de respondenten afwijkt van een hypothetisch gemiddelde van 48,5:1
t.test(formula = cps19_age ~ 1,
data = canada,
alternative = "two.sided",
mu = 48.5,
conf.level = 0.95)
One Sample t-test
data: cps19_age
t = 2.2395, df = 37821, p-value = 0.02513
alternative hypothesis: true mean is not equal to 48.5
95 percent confidence interval:
48.52387 48.85871
sample estimates:
mean of x
48.69129
formula = cps19_age ~ 1
-
Aangezien we slechts één variabele hebben in een t-test met één steekproef, specificeren we de formule in de vorm
<variabelenaam> ~ 1
. data = canada
-
We specificeren het dataframe dat we willen gebruiken.
alternative = "two.sided"
-
Bepaalt of we een tweezijdige of een eenzijdige test willen gebruiken. Opties zijn “two.sided” (standaard), “less” (als \(H_1: \mu < p\)) of “greater” (als \(H_1: \mu > p\)).
mu = 48.5
-
De
mu
parameter moet worden ingesteld op de waarde van het gemiddelde onder de nulhypothese. conf.level = 0.95
-
Dit bepaalt het betrouwbaarheidsniveau van het gerapporteerde betrouwbaarheidsinterval. De standaardwaarde is 0.95 (een 95%-betrouwbaarheidsinterval).
Voor een volledige en juiste rapportage van de t-toets, is het ook nodig om de standaardfout uit te rekenen (zie paragraaf 14.1):
library(DescTools)
MeanSE(canada$cps19_age)
[1] 0.08541655
- De gemiddelde leeftijd van Canadese kiezers was 48,7 (SE = 0,08). Dit wijkt significant af van 48,5, de gegeven testwaarde, \(t(37821) = -2{,}24\), \(p = 0,025\).
Geef dus naast de conclusie in woorden in elk geval de volgende informatie:
Gemiddelde (in de tekst of M = …) en standaardfout (SE = …).
t(aantal vrijheidsgraden) = t-observed
p = p-waarde. Maar: schrijf nooit \(p = 0,000\). Want de p-waarde is nooit precies nul, maar heel klein. Het is dan beter om te zeggen \(p < 0,001\). Als de t-toets handmatig uitvoert schrijf je p < α-waarde, bijvoorbeeld \(p < 0,05\).
14.2.2 T-toets voor gepaarde steekproeven
In een t-toets met gepaarde steekproeven (paired samples t-test) vergelijken we de gemiddelde waarde van twee interval-ratio variabelen.
In het onderstaande voorbeeld testen we de nulhypothese dat het gemiddelde verschil van de links-rechts plaatsing van de Liberale partij (variabele cps_lr_parties_1
) en de Conservatieve partij (variabele cps19_lr_parties_2
) gelijk is aan 0 in de populatie.
We kunnen de test als volgt specificeren:2
t.test(formula = Pair(cps19_lr_parties_1, cps19_lr_parties_2) ~ 1,
data = canada,
alternative = "two.sided",
mu = 0,
conf.level = 0.95)
Paired t-test
data: Pair(cps19_lr_parties_1, cps19_lr_parties_2)
t = -95.406, df = 26718, p-value < 2.2e-16
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
-2.691519 -2.583155
sample estimates:
mean difference
-2.637337
formula = Pair(cps19_lr_parties_1, cps19_lr_parties_2) ~ 1
-
We hebben twee gepaarde interval-ratio variabelen en gebruiken daarom een formule van de vorm
Pair(<variabelenaam 1>, <variabelenaam 2>) ~ 1
. data = canada
-
We specificeren het dataframe dat we willen gebruiken.
alternative = "two.sided"
-
Bepaalt of we een tweezijdige of een eenzijdige test willen gebruiken. Opties zijn “two.sided” (standaard), “less” (als \(H_1: \mu < p\)) of “greater” (als \(H_1: \mu > p\)).
mu = 0
-
De
mu
parameter moet worden ingesteld op de waarde van het gemiddelde onder de nulhypothese. In het geval van een gepaarde steekproef t-test veronderstellen we meestal dat het verschil tussen de twee gemiddelden in de populatie 0 is, dusmu = 0
. conf.level = 0.95
-
Dit bepaalt het betrouwbaarheidsniveau van het gerapporteerde betrouwbaarheidsinterval. De standaardwaarde is 0.95 (een 95%-betrouwbaarheidsinterval).
Voor een volledige en juiste rapportage van de t-toets, is het ook nodig om de standaardfout uit te rekenen (zie paragraaf 14.1). In dit geval berekenen we de standaardfout voor beide variabelen, maar alleen voor de casussen (rijen in de dataset) waarvoor we geen missende waarden hebben op deze variabelen:
library(psych, warn.conflicts=FALSE)
# Create overview of descriptive statistics, dropping missing values
describe(canada |> select(cps19_lr_parties_1, cps19_lr_parties_2) |> drop_na())
vars n mean sd median trimmed mad min max range skew
cps19_lr_parties_1 1 26719 4.25 2.77 4 4.16 2.97 0 10 10 0.20
cps19_lr_parties_2 2 26719 6.88 2.80 8 7.26 2.97 0 10 10 -0.97
kurtosis se
cps19_lr_parties_1 -0.75 0.02
cps19_lr_parties_2 0.12 0.02
- Canadese kiezers plaatsen de Liberale partij (M = 4,25; SE = 0,02) gemiddeld genomen linkser dan de Conservatieve partij (M = 6,88; SE = 0,02). Dit verschil, -2,64, was statistisch significant, \(t(26718) = -95{,}41\), \(p < 0{,}001\).
Geef dus naast de conclusie in woorden in elk geval de volgende informatie:
Gemiddelde (in de tekst of M = …) en standaardfout (SE = …) voor elke variabele.
Het gemiddelde verschil (in bovenstaand voorbeeld -2,64).
t(aantal vrijheidsgraden) = t-observed
p = p-waarde. Maar: schrijf nooit \(p = 0{,}000\). Want de p-waarde is nooit precies nul, maar heel klein. Het is dan beter om te zeggen \(p < 0{,}001\). Als je een handmatige toets uitvoert schrijf je p < α-waarde, bijvoorbeeld \(p < 0{,}05\).
14.2.3 T-toets voor onafhankelijke steekproeven
De T-toets voor onafhankelijke steekproeven (independent samples t-test) wordt gebruikt om te vergelijken of de gemiddelden van twee groepen statistisch significant verschillend zijn. We hebben dus een numerieke variabele, waarvoor we een gemiddelde kunnen berekenen, en een groeperingsvariabele, een categoriale variabele die het groepslidmaatschap bepaalt. In ons voorbeeld testen we of er een statistisch significant verschil is in de gemiddelde plaatsing van de Liberale partij door degenen die in Canada geboren zijn en degenen die dat niet zijn.
Eerst inspecteren we de categoriale variabele:
table(canada$cps19_bornin_canada)
Yes No
31556 6046
Don't know/ Prefer not to say
220
Het blijkt dat deze variabele drie categorieën heeft. De categorie Weet niet (Don’t know/Prefer not to say) willen we negeren, dus die behandelen we als missend:
<- canada |>
canada mutate(cps19_bornin_canada = na_if(cps19_bornin_canada, "Don't know/ Prefer not to say"))
Nu kunnen we de t-test uitvoeren:
t.test(formula = cps19_lr_parties_1 ~ cps19_bornin_canada,
data = canada,
alternative = "two.sided",
mu = 0,
conf.level = .95)
formula = cps19_lr_parties_1 ~ cps19_bornin_canada
-
Wij hebben een interval-ratio variabele en een categoriale variabele (factor) die aangeeft tot welke groep een waarneming behoort, dus gebruiken wij een formule van de vorm
<interval-ratio variabele> ~ <categoriale variabele>
. data = canada
-
We specificeren het dataframe dat we willen gebruiken.
alternative = "two.sided"
-
Bepaalt of we een tweezijdige of een eenzijdige test willen gebruiken. Opties zijn “two.sided” (standaard), “less” (als \(H_1: \mu < p\)) of “greater” (als \(H_1: \mu > p\)).
mu = 0
-
De
mu
parameter moet worden ingesteld op de waarde van het gemiddelde onder de nulhypothese. In het geval van een T-toets voor onafhankelijke steekproeven wordt gewoonlijk verondersteld dat het verschil tussen de twee groepsgemiddelden 0 is in de populatie, dusmu = 0
. conf.level = 0.95
-
Dit bepaalt het betrouwbaarheidsniveau van het gerapporteerde betrouwbaarheidsinterval. De standaardwaarde is 0.95 (een 95%-betrouwbaarheidsinterval).
Welch Two Sample t-test
data: cps19_lr_parties_1 by cps19_bornin_canada
t = -8.9025, df = 6809.2, p-value < 2.2e-16
alternative hypothesis: true difference in means between group Yes and group No is not equal to 0
95 percent confidence interval:
-0.4886007 -0.3122543
sample estimates:
mean in group Yes mean in group No
4.196678 4.597106
R toont het resultaat van de Welch Two Sample t-test, een versie van de T-toets voor onafhankelijke steekproeven die van toepassing is wanneer geen gelijke varianties worden aangenomen.
Voor een volledige en juiste rapportage van de t-toets, is het ook nodig om de standaardfout uit te rekenen (zie paragraaf 14.1). In dit geval berekenen we de standaardfout van het gemiddelde voor elke groep in de data (dus voor degenen die wel en niet in Canada zijn geboren):
|>
canada group_by(cps19_bornin_canada) |>
summarise(mean = mean(cps19_lr_parties_1, na.rm=TRUE),
SE = MeanSE(cps19_lr_parties_1, na.rm=TRUE))
# A tibble: 3 × 3
cps19_bornin_canada mean SE
<fct> <dbl> <dbl>
1 Yes 4.20 0.0184
2 No 4.60 0.0411
3 <NA> 5.14 0.216
- Mensen die zijn geboren in Canada plaatsen de Liberale partij gemiddeld genomen linkser (M = 4,20; SE = 0,02) dan mensen die niet zijn geboren in Canada (M = 4,60; SE = 0,04). Dit verschil, -0,40, was statistisch significant, \(t(6809{,}2) = -8{,}9025\), \(p < 0{,}001\).
Geef dus naast de conclusie in woorden in elk geval de volgende informatie:
Gemiddelde (in de tekst of M = …) en standaardfout (SE = …) voor elke groep.
Het gemiddelde verschil (in bovenstaand voorbeeld -0,40).
t(aantal vrijheidsgraden) = t-observed
p = p-waarde. Maar: schrijf nooit \(p = 0,000\). Want de p-waarde is nooit precies nul, maar heel klein. Het is dan beter om te zeggen \(p < 0,001\). Als je een handmatige toets uitvoert schrijf je p < α-waarde, bijvoorbeeld \(p < 0,05\).
14.3 Effectgroottes voor t-toetsen
We kunnen Cohen’s \(d\) of Hedges’ \(g^*_s\) berekenen als effectgrootte voor een t-toets. We gebruiken de functies cohens_d
en hedges_g
uit package effectsize
.
14.3.1 Cohen’s \(d\) voor één steekproef
We gebruiken de functie cohens_d
uit package effectsize
. De parameters zijn vrijwel gelijk aan die van de functie t.test
:
library(effectsize)
cohens_d(cps19_age ~ 1,
data = canada,
mu = 48.5)
Cohen's d | 95% CI
------------------------
0.01 | [0.00, 0.02]
- Deviation from a difference of 48.5.
cps19_age ~ 1
-
Aangezien we slechts één variabele hebben, specificeren we de formule in de vorm
<variabelenaam> ~ 1
. data = canada
-
We specificeren het dataframe dat we willen gebruiken.
mu = 48.5
-
De
mu
parameter moet worden ingesteld op de waarde van het gemiddelde onder de nulhypothese.
Indien een associatiemaat wordt berekend, kan die achteraan de rapportagen worden toegevoegd:
- De gemiddelde leeftijd van Canadese kiezers was 48,7 (SE = 0,08). Dit wijkt significant af van 48,5, de gegeven testwaarde, \(t(37821) = -2{,}24\), \(p = 0,025\). Dit representeert een zeer zwak effect, Cohen’s d = 0,01.
De volgende vuistregels worden doorgaans gebruikt voor de kwalificatie van effectgroottes van Cohen’s d en Hedges g:
- Ten minste 0,2: zwak
- Ten minste 0,5: matig
- Ten minste 0,8: sterk
14.3.2 Cohen’s d voor gepaarde steekproeven
We gebruiken de functie cohens_d
uit package effectsize
. De parameters zijn vrijwel gelijk aan die van de functie t.test
:
library(effectsize)
cohens_d(Pair(cps19_lr_parties_1, cps19_lr_parties_2) ~ 1,
data = canada,
mu = 0)
Cohen's d | 95% CI
--------------------------
-0.58 | [-0.60, -0.57]
Pair(cps19_lr_parties_1, cps19_lr_parties_2) ~ 1
-
We hebben twee gepaarde interval-ratio variabelen en gebruiken daarom een formule van de vorm
Pair(<variabelenaam 1>, <variabelenaam 2>) ~ 1
. data = canada
-
We specificeren het dataframe dat we willen gebruiken.
mu = 0
-
De
mu
parameter moet worden ingesteld op de waarde van het gemiddelde onder de nulhypothese. In het geval van een gepaarde steekproef veronderstellen we meestal dat het verschil tussen de twee gemiddelden in de populatie 0 is, dusmu = 0
.
Indien een associatiemaat wordt berekend, kan die achteraan de rapportagen worden toegevoegd:
- Canadese kiezers plaatsen de Liberale partij (M = 4,25; SE = 0,02) gemiddeld genomen linkser dan de Conservatieve partij (M = 6,88; SE = 0,02). Dit verschil, -2,64, was statistisch significant, \(t(26718) = -95{,}41\), \(p < 0{,}001\). Dit representeert een matig effect, Cohen’s d = -0,58.
De volgende vuistregels worden doorgaans gebruikt voor de kwalificatie van effectgroottes van Cohen’s d en Hedges g:
- Ten minste 0,2: zwak
- Ten minste 0,5: matig
- Ten minste 0,8: sterk
14.3.3 Hedges’ \(g^*_s\) voor onafhankelijke steekproeven
Voor twee onafhankelijke steekproeven wordt aanbevolen Hedges \(g^*_s\) te berekenen als maat voor de effectgrootte (Delacre et al. 2021). De interpretatie ervan is vergelijkbaar met Cohen’s \(d\), maar gecorrigeerd voor bias en aangepast aan een situatie waarin geen gelijke varianties kunnen worden aangenomen. De waarden lijken sterk op Cohen’s \(d\) voor grotere steekproeven.
Merk op dat wij voor ons voorbeeld de gewijzigde versie van de variabele cps19_bornin_canada
gebruiken (zie T-toets voor onafhankelijke steekproeven):
library(effectsize)
hedges_g(cps19_lr_parties_1 ~ cps19_bornin_canada,
data = canada,
mu = 0,
pooled_sd = FALSE)
Hedges' g | 95% CI
--------------------------
-0.14 | [-0.17, -0.11]
- Estimated using un-pooled SD.
cps19_lr_parties_1 ~ cps19_bornin_canada
-
Wij hebben een interval-ratio variabele en een categoriale variabele (factor) die aangeeft tot welke groep een waarneming behoort, dus gebruiken wij een formule van de vorm
<interval-ratio variabele> ~ <categoriale variabele>
. data = canada
-
We specificeren het dataframe dat we willen gebruiken.
mu = 0
-
De
mu
parameter moet worden ingesteld op de waarde van het gemiddelde onder de nulhypothese. In het geval van een onafhankelijke steekproef wordt gewoonlijk verondersteld dat het verschil tussen de twee groepsgemiddelden 0 is in de populatie, dusmu = 0
. pooled_sd = FALSE
-
Dit geeft aan dat we de gepoolde standaardafwijking niet gebruiken, wat wordt aanbevolen bij gebruik van Welch’ t-test (waarbij niet wordt aangenomen dat varianties gelijk zijn), die
t.test
standaard doet voor de onafhankelijke steekproef t-test.
Indien een associatiemaat wordt berekend, kan die achteraan de rapportagen worden toegevoegd:
- Mensen die zijn geboren in Canada plaatsen de Liberale partij gemiddeld genomen linkser (M = 4,20; SE = 0,02) dan mensen die niet zijn geboren in Canada (M = 4,60; SE = 0,04). Dit verschil, -0,40, was statistisch significant, \(t(6809{,}2) = -8{,}9025\), \(p < 0{,}001\). Dit representeert een zeer zwak effect, Hedges’ \(g^*_s\) = -0,14.
De volgende vuistregels worden doorgaans gebruikt voor de kwalificatie van effectgroottes van Cohen’s d en Hedges g:
- Ten minste 0,2: zwak
- Ten minste 0,5: matig
- Ten minste 0,8: sterk
In dit overzicht gebruiken we de zogenaamde ‘formule-interface’ van t.test. U kunt ook de zogenaamde traditionele interface gebruiken. Voor het voorbeeld van de one-sample t-test is de equivalente code:
t.test(x = canada$cps19_age, alternative = "two.sided", mu = 48.5, conf.level = 0.95)
One Sample t-test data: canada$cps19_age t = 2.2395, df = 37821, p-value = 0.02513 alternative hypothesis: true mean is not equal to 48.5 95 percent confidence interval: 48.52387 48.85871 sample estimates: mean of x 48.69129
In dit overzicht gebruiken we de zogenaamde ‘formule-interface’ van t.test. Je kunt ook de zogenaamde traditionele interface gebruiken. Voor het voorbeeld van de t-toets met gepaarde steekproeven is de equivalente code:
t.test(x = canada$cps19_lr_parties_1, y = canada$cps19_lr_parties_2, data = canada, alternative = "two.sided", mu = 0, paired = TRUE, conf.level = 0.95)
Paired t-test data: canada$cps19_lr_parties_1 and canada$cps19_lr_parties_2 t = -95.406, df = 26718, p-value < 2.2e-16 alternative hypothesis: true mean difference is not equal to 0 95 percent confidence interval: -2.691519 -2.583155 sample estimates: mean difference -2.637337
Vergeet in dit geval niet
paired = TRUE
op te nemen.↩︎