11. Chi-kwadraat toets voor goodness of fit en binomiaaltoets#

11.1. Toepassing#

Gebruik de Chi-kwadraat toets voor goodness of fit om te onderzoeken of de geobserveerde frequenties van de categorieën van één categorische variabele overeenkomt met de verwachte frequenties van de categorische variabele.6,7 Met deze toets kan een geobserveerd percentage met een bekend of verwacht percentage vergeleken worden. Gebruik de exacte binomiaaltoets bij een laag aantal observaties, dit wordt bij de assumpties toegelicht.1

11.2. Onderwijscasus#

De controller van een universiteit is geïnteresseerd in de instroom van studenten met een hbo vooropleiding. Zij wil weten of haar universiteit relatief veel studenten met een vooropleiding in het hbo heeft in vergelijking met het landelijke gemiddelde. Op de website van de VSNU vindt ze dat studenten met een hbo vooropleiding 11,13% uitmaken van de totale instroom voor Bachelors en Masters in het wetenschappelijk onderwijs (wo) in 2018.[^2] Ze wil weten of er op haar instelling naar verhouding evenveel hbo-studenten zijn als het landelijk gemiddelde.

Dit onderzoek vertaalt zich in de volgende combinatie van hypothesen, waarbij de nulhypothese zo geformuleerd is dat er geen effect of verschil is en de alternatieve hypothese zo geformuleerd is dat er wel een effect of verschil is.

H0: De verdeling van de vooropleiding van de instromende studenten is gelijk aan de landelijke verdeling (11,13% met een hbo vooropleiding).

HA: De verdeling van de vooropleiding van de instromende studenten is niet gelijk aan de landelijke verdeling (11,13% met een hbo vooropleiding).

11.3. Assumpties#

Om de Chi-kwadraat toets voor goodness of fit uit te voeren, moet de variabele nominaal9 of ordinaal8 zijn.6 De exacte binomiaaltoets vereist een binaire3 variabele. In deze casus is de categorische variabele binair.

De categorieën van de variabele mogen niet overlappen, wat wil zeggen dat elke observatie slechts in een van de categorieën past. Voor de Chi-kwadraat toets voor goodness of fit mag in niet meer dan 20% van de categorieën van de variabele de verwachte frequentie minder dan vijf zijn. Als dit wel het geval is, gebruik dan de binomiaaltoets.7

11.4. De data bekijken#

Er is een dataset ingeladen genaamd dfInstroom_2018_totaal. Dit is een dataframe met studentnummers en een binaire variabele die laat zien of de student wel of geen hbo vooropleiding heeft.

## Importeer nuttige packages
import numpy as np
import pandas as pd
import scipy.stats as sps
## Eerste 5 observaties
print(dfInstroom_2018_totaal.head(5))
   Studentnummer hbo_vooropleiding
0        5615890               nee
1        5922075               nee
2        5445121               nee
3        5981209               nee
4        5357767               nee
## Laatste 5 observaties
print(dfInstroom_2018_totaal.tail(5))
      Studentnummer hbo_vooropleiding
7343        5837576               nee
7344        5894658               nee
7345        5222972               nee
7346        5640619               nee
7347        5333848               nee

Het is informatief om het percentage studenten met hbo vooropleiding in de data te bepalen.

# Maak een tabel met percentages
Percentages = 100 * pd.crosstab(dfInstroom_2018_totaal['hbo_vooropleiding'], columns = 'count',
normalize = 'columns')

# Print de tabel
print(Percentages)
col_0                  count
hbo_vooropleiding           
ja                 16.575939
nee                83.424061

Het percentage studenten met hbo vooropleiding is r Round_and_format(py$Percentages[1, 1]). Dit percentage lijkt hoger te liggen dan het landelijk percentage van 11,13%. De Chi-kwadraat toets voor goodness of fit of de binomiaaltoets toetst of dit verschil significant is.

11.5. Chi-kwadraat toets voor goodness of fit#

11.5.1. Asssumptie verwachte frequenties#

Het verwacht aantal observaties mag niet vijf of minder zijn in 20% van de categorieën van de categorische variabele. Aangezien er een binaire variabele getoetst wordt, mag geen van beide categorieën dus vijf of minder verwachte observaties hebben. Bereken het verwacht aantal observaties door de proporties van de nulhyothese (11,3% met hbo vooropleiding, dus 0,113 en 1 - 0,113) te vermenigvuldigen met het totaal aantal observaties in de dataset (len(dfInstroom_2018_totaal)).

# Sla de verwachte proporties op in een vector
Verwachte_proporties = np.array([0.113, 1 - 0.113])

# Bereken het verwachte aantal observaties door de verwachte proporties met het totaal aantal observaties te vermenigvuldigen
Verwacht_aantal_observaties = Verwachte_proporties * len(dfInstroom_2018_totaal)

# Print het verwachte aantal observaties
print(Verwacht_aantal_observaties)
[ 830.324 6517.676]

Geen van de verwachte frequenties is kleiner dan vijf, dus de Chi-kwadraat toets voor goodness of fit kan worden uitgevoerd.

11.5.2. Uitvoering#

Voer de Chi-kwadraat toets voor goodness of fit uit om te onderzoeken of de verdeling van het aantal studenten met en zonder hbo vooropleiding overeenkomt met de landelijke verdeling waarbij het percentage studenten met hbo vooropleiding 11,13% is.

Bereken eerst de aantallen observaties en verwachte aantallen observaties. Gebruik daarna de functie chisquare() van het scipy.stats package met als argumenten de aantallen observaties Aantal_observaties, de verwachte aantallen observaties Verwacht_aantal_observaties en axis = None om aan te geven dat alle waarden in de twee vorige argumenten van dezelfde dataset afkomstig zijn. Let goed op dat de volgorde van de aantallen observaties en de verwachte aantallen observaties dezelfde volgorde hebben zodat de toets de goede vergelijking maakt.

## Bereken de aantallen observaties
Aantal_observaties = pd.crosstab(dfInstroom_2018_totaal['hbo_vooropleiding'], columns = 'count')

## Zet het aantal observaties om in een numpy array. Gebruik de toevoeging .T om de array om te zetten in een rij
Aantal_observaties = np.array(Aantal_observaties).T

## Bereken de verwachte aantallen observaties
Verwachte_proporties = np.array([0.113, 1- 0.113])
Verwacht_aantal_observaties = Verwachte_proporties * len(dfInstroom_2018_totaal)

## voer de chi-kwadraat toets uit
sps.chisquare(Aantal_observaties, Verwacht_aantal_observaties, axis = None)
Power_divergenceResult(statistic=204.0641058946973, pvalue=2.710169272143345e-46)
  • χ^2^~r Round_and_format(py$vdf)~ = r Round_and_format(py$chi2), p < 0,0001

  • De p-waarde is kleiner dan 0,05, dus de H0 wordt verworpen.5

11.5.3. Rapportage#

De Chi-kwadraat toets voor goodness of fit is uitgevoerd om te onderzoeken of de verdeling van het instromende aantal studenten van een universiteit met en zonder hbo vooropleiding verschilt van de landelijke verdeling waarbij het percentage studenten met een hbo vooropleiding 11,13% is. De verdeling van de instromende studenten van de universiteit is significant verschillend van de landelijke verdeling, χ^2^~r Round_and_format(py$vdf)~ = r Round_and_format(py$chi2), p < 0,0001. Het percentage instromende studenten met een hbo vooropleiding is r Round_and_format(py$Proporties[1, 1]). Aan de hand van de resultaten kan geconcludeerd worden dat het percentage studenten met een hbo vooropleiding hoger ligt dan het landelijk gemiddelde van 11,13%.

11.6. Binomiaaltoets#

11.6.1. Uitvoering#

Voer de binomiaaltoets uit om te onderzoeken of de verdeling van het aantal studenten met en zonder hbo vooropleiding overeenkomt met de landelijke verdeling waarbij het percentage studenten met hbo vooropleiding 11,13% is. Deze toets is een alternatief voor de Chi-kwadraat toets voor goodness of fit bij lage verwachte aantallen observaties. Er is een subset dfInstroom_2018_totaal_steekproef van de dataset dfInstroom_2018_totaal ingeladen met daarin een lager aantal observaties.

Maak een tabel van de variabele hbo_vooropleiding om het aantal observaties per categorie te tellen. Bereken het verwacht aantal observaties door de proporties van de nulhyothese (11,3% met hbo vooropleiding, dus 0,113 en 1 - 0,113) te vermenigvuldigen met het totaal aantal observaties in de dataset (len(dfInstroom_2018_totaal)).

# Bereken de aantallen observaties
Aantal_observaties = pd.crosstab(dfInstroom_2018_totaal_steekproef['hbo_vooropleiding'], columns = 'count')

# Print het aantal observaties
print(Aantal_observaties)

# Sla de verwachte proporties op in een vector
Verwachte_proporties = np.array([0.113, 1 - 0.113])

# Bereken het verwachte aantal observaties door de verwachte proporties met het totaal aantal observaties te vermenigvuldigen
Verwacht_aantal_observaties = Verwachte_proporties * len(dfInstroom_2018_totaal_steekproef)

# Print het verwachte aantal observaties
print(Verwacht_aantal_observaties)
col_0              count
hbo_vooropleiding       
ja                     2
nee                   18
[ 2.26 17.74]

Het aantal studenten met een hbo vooropleiding is r Round_and_format(py$Aantal_observaties[1, 1]) en het aantal zonder hbo vooropleiding r Round_and_format(py$Aantal_observaties[2, 1]). Het verwachte aantal observaties met een hbo vooropleiding is r Round_and_format(py$Verwacht_aantal_observaties[1]) wat kleiner dan vijf is. Voer daarom de binomiaaltoets uit, aangezien meer dan 20% van de categorieën een verwacht aantal observaties van vijf of minder heeft.

Bereken eerst het aantal studenten met een hbo vooropleiding in de dataset en het totaal aantal studenten in de dataset. Voer daarna de binomiaaltoets uit met de functie binom_._test() van het scipy package met de argumenten x = Aantal_hbo_vooropleiding voor de hoeveelheid studenten met een hbo vooropleiding, n = Aantal_observaties voor de totale instroom van de universiteit, p = 0.1113 voor de referentieproportie en alternative = two-sided voor het soort toets (eenzijdig of tweezijdig). Bereken tenslotte handmatig de proportie studenten met een hbo vooropleiding.

# Bereken het aantal observaties met hbo vooropleiding
Aantal_hbo_vooropleiding = sum(dfInstroom_2018_totaal_steekproef['hbo_vooropleiding'] == 'ja')

# Bereken het totaal aantal observaties
Aantal_observaties = len(dfInstroom_2018_totaal_steekproef)

# Voer de binomiaaltoets uit
sps.binom_test(x = Aantal_hbo_vooropleiding, n = Aantal_observaties, p = 0.113, alternative = 'two-sided')

# Bereken de proportie studenten met een hbo vooropleiding
Proportie_hbo_vooropleiding = Aantal_hbo_vooropleiding / Aantal_observaties

# Print de proportie
print(Proportie_hbo_vooropleiding)
0.1
  • de geschatte proportie studenten met een hbo vooropleiding in de data is r Round_and_format(py$Proportie_hbo_vooropleiding).8

  • p-waarde = r Round_and_format(py$pval), dus de H0 kan niet worden verworpen.5

11.6.2. Rapportage#

De binomiaaltoets is uitgevoerd om te onderzoeken of de verdeling van het instromende aantal studenten van een universiteit met en zonder hbo vooropleiding voor een dataset met een laag aantal observaties verschilt van de landelijke verdeling waarbij het percentage studenten met een hbo vooropleiding 11,13% is. De verdeling van het aantal instromende studenten met een zonder hbo vooropleiding is niet significant verschillend van de landelijke verdeling (p = r Round_and_format(py$pval)), dus de nulhypothese kan niet verworpen worden. De schatting van het percentage is r Round_and_format(py$Proportie_hbo_vooropleiding)% en is niet significant verschillend van het landelijk gemiddelde van 11,13%. De resultaten suggereren dat het percentage studenten met een hbo vooropleiding niet hoger ligt dan het landelijk gemiddelde van 11,13%.


6(1,2)

Laerd Statistics (2018). Chi-Square Goodness-of-Fit Test in SPSS Statistics. https://statistics.laerd.com/spss-tutorials/chi-square-goodness-of-fit-test-in-spss-statistics.php

7(1,2)

Allen, P. & Bennett, K. (2012). SPSS A practical Guide version 20.0. Cengage Learning Australia Pty Limited.

1

Agresti, A. (2003). Categorical data analysis. Vol. 482, John Wiley & Sons.

9

Een nominale variabele is een categorische variabele waarbij de categorieën niet geordend kunnen worden. Een voorbeeld is de variabele windstreek (noord, oost, zuid, west) en geslacht (man of vrouw).

8(1,2)

Een ordinale variabele is een categorische variabele waarbij de categorieën geordend kunnen worden. Een voorbeeld is de variabele beoordeling met de categorieën Onvoldoende, Voldoende, Goed en Uitstekend.

3

Binaire variabelen: twee elkaar uitsluitende waarden, zoals ja of nee, 0 of 1, aan of uit.

5(1,2)

In dit voorbeeld wordt uitgegaan van een waarschijnlijkheid van 95% c.q. een p-waardegrens van 0,05. De grens is naar eigen inzicht aan te passen; houd hierbij rekening met type I en type II fouten.