Chi-kwadraat toets voor goodness of fit en binomiaaltoets
Contents
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#
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,0001De 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
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.