14  T-toets voor het gemiddelde

We gebruiken in dit hoofdstuk gegevens uit de Canadian Election Study van 2019 als voorbeeld:

canada <- import("2019 Canadian Election Study.rds")

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)
example_vector <- rnorm(20)  # Voorbeeldgegevens van 20 normaal verdeelde willekeurige getallen.

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_selection <- canada |> 
  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
Rapportage
  • 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, dus mu = 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
Rapportage
  • 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, dus mu = 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 
Rapportage
  • 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.

Rapportage

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, dus mu = 0.

Rapportage

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, dus mu = 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.

Rapportage

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

  1. 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 
    ↩︎
  2. 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.↩︎