15. Chi-kwadraat toets voor onafhankelijkheid en Fisher-Freeman-Halton exact toets#

15.1. Toepassing#

Gebruik de Chi-kwadraat toets voor onafhankelijkheid1 of de Fisher-Freeman-Halton exact toets2 om te toetsen of er een afhankelijkheid is tussen twee ongepaarde categorische variabelen. De Fisher-Freeman-Halton exact toets is een alternatief voor de Chi-kwadraat toets voor onafhankelijkheid bij een laag aantal observaties.2,3 De Fisher-Freeman-Halton exact toets is een uitbreiding van de Fisher’s exact toets welke gebruikt wordt om te toetsen of er een verband bestaat tussen twee ongepaarde binaire variabelen, oftewel een 2x2 tabel.

In de huidige casus worden de Chi-kwadraat toets voor onafhankelijkheid en de Fisher-Freeman-Halton exact toets gebruikt voor een casus met een categorische variabele bestaande uit twee categorieën en een categorische variabele bestaande uit meer dan twee categorieën. Beide toetsen zijn in het algemeen te gebruiken voor alle onderzoeksvragen waarbij twee categorische variabelen die beide twee of meer categorieën bevatten getoetst worden.

15.2. Onderwijscasus#

De opleidingsdirecteur van de Bachelor Antropologie vraagt zich af wat de invloed is van de instroom van studenten met een vooropleiding in het buitenland op het behalen van een positief BSA. Krijgen studenten met een vooropleiding uit bepaalde landen vaker een positief BSA dan studenten met een vooropleiding uit andere landen? Op basis van deze analyse kan de opleidingsdirecteur overwegen om bij de inrichting van het tutoraat rekening te houden met de vooropleidingen van studenten.

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: Er is geen afhankelijkheid tussen het land van de hoogste vooropleiding en het wel of niet behalen van het BSA voor studenten van de bachelor Antropologie.

HA: Er is een afhankelijkheid tussen het land van de hoogste vooropleiding en het wel of niet behalen van het BSA voor studenten van de bachelor Antropologie.

15.3. Assumpties#

Voor een valide resultaat moeten de data aan een aantal voorwaarden voldoen voordat de toets uitgevoerd kan worden. De variabelen zijn categorisch (nominaal4 of ordinaal10) en de observaties zijn onafhankelijk van elkaar.

15.3.1. Groepsgrootte#

De Chi-kwadraat toets voor onafhankelijkheid heeft een assumptie wat betreft het aantal observaties in een kruistabel. Een kruistabel is een tabel waarin de aantallen observaties worden weergegeven per combinatie van de categorieën van beide variabelen. De kruistabel van de data in de huidige casus is te vinden in Tabel 1.

NL

GE

IT

UK

ES

BE

US

Negatief BSA

r BSA_kruistabel[1,1]

r BSA_kruistabel[1,2]

r BSA_kruistabel[1,3]

r BSA_kruistabel[1,4]

r BSA_kruistabel[1,5]

r BSA_kruistabel[1,6]

r BSA_kruistabel[1,7]

r sum(BSA_kruistabel[1,1:7])

Positief BSA

r BSA_kruistabel[2,1]

r BSA_kruistabel[2,2]

r BSA_kruistabel[2,3]

r BSA_kruistabel[2,4]

r BSA_kruistabel[2,5]

r BSA_kruistabel[2,6]

r BSA_kruistabel[2,7]

r sum(BSA_kruistabel[2,1:7])

Totaal

r sum(BSA_kruistabel[1:2,1])

r sum(BSA_kruistabel[1:2,2])

r sum(BSA_kruistabel[1:2,3])

r sum(BSA_kruistabel[1:2,4])

r sum(BSA_kruistabel[1:2,5])

r sum(BSA_kruistabel[1:2,6])

r sum(BSA_kruistabel[1:2,7])

r sum(BSA_kruistabel)

Tabel 1. Geobserveerde aantallen casus BSA en land van hoogste vooropleiding.

De Chi-kwadraat toets voor onafhankelijkheid wordt onbetrouwbaar als er in meer dan 20% van de cellen van de kruistabel een verwacht aantal observaties van 5 of lager is.[^5],7 Gebruik in dat geval de Fisher-Freeman-Halton toets. Het verwachte aantal observaties in een cel is het aantal observaties dat zich volgens de nulhypothese in een cel zou moeten bevinden. Dit aantal kan worden berekend via kansrekening, uitgaande van de nulhypothese dat er geen afhankelijkheid tussen de twee variabelen is.

Een voorbeeldberekening van het het verwachte aantal observaties van de studenten met een Nederlandse vooropleiding met positief BSA werkt als volgt: vermenigvuldig het totaal aantal studenten met een Nederlandse vooropleiding (r sum(BSA_kruistabel[1:2,1])) met het totaal aantal studenten met een positief BSA (r sum(BSA_kruistabel[1,1:7])) en deel dit door het totaal aantal studenten (r sum(BSA_kruistabel)).

  • aantal studenten positief BSA: r sum(BSA_kruistabel[1,1:7])

  • aantal studenten met Nederlandse vooropleiding: r sum(BSA_kruistabel[1:2,1])

  • totaal aantal studenten: r sum(BSA_kruistabel)

  • verwacht aantal studenten met Nederlandse vooropleiding met positief BSA: r sum(BSA_kruistabel[1,1:7]) * r sum(BSA_kruistabel[1:2,1])/r sum(BSA_kruistabel)r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,1])/sum(BSA_kruistabel)) .

NL

GE

IT

UK

ES

BE

US

Negatief BSA

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,1])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,2])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,3])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,4])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,5])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,6])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[1,1:7])*sum(BSA_kruistabel[1:2,7])/sum(BSA_kruistabel))

r sum(BSA_kruistabel[1,1:7])

Positief BSA

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,1])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,2])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,3])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,4])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,5])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,6])/sum(BSA_kruistabel))

r round(sum(BSA_kruistabel[2,1:7])*sum(BSA_kruistabel[1:2,7])/sum(BSA_kruistabel))

r sum(BSA_kruistabel[2,1:7])

Totaal

r sum(BSA_kruistabel[1:2,1])

r sum(BSA_kruistabel[1:2,2])

r sum(BSA_kruistabel[1:2,3])

r sum(BSA_kruistabel[1:2,4])

r sum(BSA_kruistabel[1:2,5])

r sum(BSA_kruistabel[1:2,6])

r sum(BSA_kruistabel[1:2,7])

r sum(BSA_kruistabel)

Tabel 2. Verwachte aantallen observaties casus BSA en land van hoogste vooropleiding.

Alle verwachte aantallen observaties zijn te vinden in Tabel 2. Merk ook op dat de totalen in de rijen en kolommen gelijk zijn aan de totalen in Tabel 1, de kruistabel met de aantallen observaties. Geen van de verwachte aantallen is kleiner of gelijk aan vijf, dus er is voldaan aan de assumptie van groepsgrootte voor de Chi-kwadraat toets voor onafhankelijkheid.

15.4. Post-hoc toetsen#

De Chi-kwadraat toets voor onafhankelijkheid en Fisher-Freeman-Halton exact toets worden gebruikt om een afhankelijkheid aan te tonen tussen twee ongepaarde categorische variabelen. Wanneer één of beide variabelen meer dan twee categorieën bevat, worden post-hoc toetsen uitgevoerd om te bepalen welke categorieën significant van elkaar verschillen.

Als post-hoc toets voor de Chi-kwadraat toets voor onafhankelijkheid wordt het gestandaardiseerde residu gebruikt. Dit is het gestandaardiseerde verschil tussen het (geobserveerde) aantal observaties en het verwachte aantal observaties, waarbij gestandaardiseerd betekent dat het een gemiddelde van 0 en standaardafwijking van 1 heeft. Op deze manier kunnen de verschillende residuen met elkaar vergeleken worden, omdat ze dezelfde schaal hebben. Voor elke cel in de kruistabel kan het gestandaardiseerde residu bepaald worden. Vergelijkbaar met z-scores11 zijn deze residuen significant bij een waarde groter dan ± 1,96 wanneer een significantieniveau (α) van 0,05 wordt gehanteerd. Op deze manier kan bepaald worden in welke cellen er afwijkingen van de verwachte aantallen zijn.[^5]

Voor de Fisher-Freeman-Halton exact toets is er geen specifiek voorgeschreven post-hoc toets.3,[^5] Een goede optie is het uitvoeren van losse Fisher’s exact toets voor elke mogelijke combinatie van 2x2 tabellen. Gebruik een correctie op de p-waarden, omdat er meerdere testen tegelijk uitgevoerd worden. Een bekende correctie is de Bonferroni methode, andere opties zijn ook mogelijk. De keuze voor een correctie is afhankelijk van het onderzoek.[^5]

15.5. Effectmaat#

De p-waarde geeft aan of het verschil tussen twee groepen statistisch significant is. De grootte van het verschil of effect is echter ook relevant. Een effectmaat is een gestandaardiseerde maat die de grootte van een effect weergeeft, zodat effecten van verschillende onderzoeken met elkaar vergeleken kunnen worden.[^5] De Chi-kwadraat toets voor onafhankelijkheid heeft als effectmaat w.6 Een indicatie om w te interpreteren is: rond 0,1 is het een klein effect, rond 0,3 is het een gemiddeld effect en rond 0,5 is het een groot effect.7

De Fisher-Freeman-Halton exact toets heeft geen specifieke effectmaat. De post-hoc toets van deze toets - Fisher’s exact toets - gebruikt echter de odds ratio als effectmaat. De odds ratio is een effectmaat die voor zowel de Chi-kwadraat toets voor onafhankelijkheid als de Fisher’s exact toets kan worden gebruikt. Een voorwaarde is echter dat beide variabelen binair zijn. In andere woorden, er moet een 2x2 kruistabel gevormd kunnen worden. Odds is een Engelse term voor de verhouding van twee kansen, bijvoorbeeld de verhouding tussen het aantal studenten met positief BSA en negatief BSA. Een odds ratio is de verhouding tussen twee odds, dus de verhouding van de odds van studenten met Nederland als land van hoogste vooropleiding en studenten met Duitsland als land van hoogste vooropleiding. De odds ratio geeft dus een interpretatie van de verschillen tussen landen op het behalen van een positief of negatief BSA.[^5]

15.6. De data bekijken#

Er is een dataset ingeladen genaamd dfBSA_antropologie. In deze dataset is voor elke student aangegeven wat het land van de hoogst genoten vooropleiding is en of ze een positief of negatief BSA ontvangen hebben.

## Importeer nuttige packages
import numpy as np
import pandas as pd
import scipy.stats as sps
import statsmodels.stats as sms
import statsmodels.api as sma
## Eerste 5 observaties
print(dfBSA_antropologie.head(5))
   Studentnummer Landen_vooropleiding       BSA
0        4000039                   NL  Positief
1        4000582                   US  Positief
2        4000618                   NL  Positief
3        4000720                   GE  Positief
4        4000859                   NL  Positief
## Laatste 5 observaties
print(dfBSA_antropologie.tail(5))
      Studentnummer Landen_vooropleiding       BSA
2195        4499005                   NL  Positief
2196        4499139                   US  Positief
2197        4499509                   BE  Negatief
2198        4499564                   ES  Positief
2199        4499591                   NL  Positief

Een kruistabel geeft de aantallen observaties weer voor de combinaties van de categorieën van de variabelen Landen_vooropleiding en BSA. Maak de kruistabel met de functie .crosstable() van het package pandas met als argumenten de variabele dfBSA_antropologie['BSA'] (positief of negatief BSA) en dfBSA_antropologie['Landen_vooropleiding'] (land van hoogst genoten vooropleiding).

# Maak een kruistabel
BSA_antropologie_kruistabel =  pd.crosstab(dfBSA_antropologie['BSA'], dfBSA_antropologie['Landen_vooropleiding'])

# Print de kruistabel
print(BSA_antropologie_kruistabel)

# Maak een tabel met proporties, argument 'normalize = columns' zorgt ervoor dat de proporties
# per rij berekend worden
Prop_BSA_antropologie_kruistabel = pd.crosstab(dfBSA_antropologie['BSA'], dfBSA_antropologie['Landen_vooropleiding'], normalize = 'columns')

# Print de tabel met proporties met drie decimalen
print(round(Prop_BSA_antropologie_kruistabel, 3))
Landen_vooropleiding  BE  ES   GE  IT    NL   UK   US
BSA                                                  
Negatief              28   6   40  35   136    8   77
Positief              70  43  202  46  1151  115  243
Landen_vooropleiding     BE     ES     GE     IT     NL     UK     US
BSA                                                                  
Negatief              0.286  0.122  0.165  0.432  0.106  0.065  0.241
Positief              0.714  0.878  0.835  0.568  0.894  0.935  0.759

De kruistabel en bijbehorende tabel met proporties laat zien dat de meerderheid van de studenten een positief BSA ontvangt voor elk land van vooropleiding. Van studenten uit het Verenigd Koninkrijk (UK) haalt verhoudingsgewijs het grootste deel een positief BSA. Het percentage studenten met een positief BSA is hier (r Round_and_format(100 * py$UK)%).

Bekijk in aanvulling op de kruistabel de data ook met een staafdiagram. Maak een staafdiagram van de aantallen en percentages studenten met een positief en negatief BSA voor de verschillende landen van vooropleiding. Gebruik het argument position = "dodge" in de functie geom_bar() om de aantallen weer te geven en het argument position = "fill" in de functie geom_bar() om de proporties weer te geven.

De staafdiagram laat ook zien dat de meeste studenten in elk land van vooropleiding in de meerderheid een positief BSA behalen. De proportie negatieve BSA is het hoogst voor Italië en het laagst voor het Verenigd Koninkrijk.

15.6.1. Assumptie groepsgrootte#

Toets de assumptie dat niet meer dan 20% van de verwachte aantallen observaties gelijk of kleiner dan vijf is. Bereken het verwacht aantal observaties met de functie .contingency.expected_freq() van het scipy.stats package met als argument de kruistabel BSA_antropologie_kruistabel.

# Maak een kruistabel
BSA_antropologie_kruistabel =  pd.crosstab(dfBSA_antropologie['BSA'], dfBSA_antropologie['Landen_vooropleiding'])

# Bereken verwachte aantallen observaties
sps.contingency.expected_freq(BSA_antropologie_kruistabel)
array([[  14.7 ,    7.35,   36.3 ,   12.15,  193.05,   18.45,   48.  ],
       [  83.3 ,   41.65,  205.7 ,   68.85, 1093.95,  104.55,  272.  ]])

Geen van de verwachte aantallen observaties is gelijk of kleiner dan vijf, dus de Chi-kwadraat toets voor onafhankelijkheid kan worden uitgevoerd.

15.7. Chi-kwadraat toets voor onafhankelijkheid#

15.7.1. Uitvoering#

De Chi-kwadraat toets voor onafhankelijkheid wordt uitgevoerd om de vraag te beantwoorden of er een afhankelijkheid is tussen het land van vooropleiding en het wel of niet halen van een positief BSA. Gebruik de functie .stats.chi2_contingency() van het scipy package met als argument de kruistabel BSA_antropologie_kruistabel. De weergegeven output bevat de teststatistiek, de p-waarde, het aantal vrijheidsgraden en een aantal met de verwachte aantallen observaties (in deze volgorde).

import scipy.stats as sps
sps.chi2_contingency(BSA_antropologie_kruistabel)
(112.85943129620993,
 5.131695424334406e-22,
 6,
 array([[  14.7 ,    7.35,   36.3 ,   12.15,  193.05,   18.45,   48.  ],
        [  83.3 ,   41.65,  205.7 ,   68.85, 1093.95,  104.55,  272.  ]]))

Bereken de effectmaat w vervolgens op basis van de χ^2^-waarde van de Chi-kwadraat toets voor onafhankelijkheid.

# Sla de teststatistiek op
chi2, pval, df, tab = sps.chi2_contingency(BSA_antropologie_kruistabel)

# Bereken het totaal aantal observaties als som van de kruistabel
N = np.sum(np.array(BSA_antropologie_kruistabel))

# Bereken eta squared
Eta2 = np.sqrt(chi2 / N)

# Print de effectgrootte
print(Eta2)
0.22649446240091
  • χ^2^ ~r Round_and_format(py$df)~ = r Round_and_format(py$chi2), p < 0,0001

  • Vrijheidsgraden: df = (k-1)(r-1), waar k staat voor kolom en r voor rij. In dit geval geldt df = r Round_and_format(py$df).

  • p-waarde < 0,05, de H0 wordt verworpen.8

  • Effectmaat is r Round_and_format(py$Eta2), dus een klein tot gemiddeld effect

15.7.2. Post-hoc toets: gestandaardiseerde residuen#

Voer post-hoc toetsen uit om te bepalen welke landen van hoogste vooropleiding van elkaar verschillen wat betreft de verdeling van het aantal studenten met positief en negatief BSA. Inspecteer hiervoor de Pearson residuen van de Chi-kwadraat toets voor onafhankelijkheid op waarden groter dan 1,96 en kleiner dan -1,96. Let op dat hier nog geen correctie voor meerdere testen plaatsvindt.9

# Laad het package statsmodels.api in om de gestandaardiseerde residuën weer te geven
import statsmodels.api as sma

# Bereken de residuen 
Residuen = sma.stats.Table(BSA_antropologie_kruistabel).resid_pearson

# Print de residuen 
print(round(Residuen,3))
Landen_vooropleiding     BE     ES     GE     IT     NL     UK     US
BSA                                                                  
Negatief              3.469 -0.498  0.614  6.555 -4.106 -2.433  4.186
Positief             -1.457  0.209 -0.258 -2.754  1.725  1.022 -1.758
  • Significant hoger aantal observaties bij negatief BSA België (BE), z = r Round_and_format(py$Residuen[1,"BE"])

  • Significant hoger aantal observaties bij negatief BSA Italië (IT), z = r Round_and_format(py$Residuen[1,"IT"])

  • Significant lager aantal observaties bij negatief BSA Nederland (NL), z = r Round_and_format(py$Residuen[1,"NL"])

  • Significant lager aantal observaties bij negatief BSA Verenigd Koninkrijk (UK), z = r Round_and_format(py$Residuen[1,"UK"])

  • Significant hoger aantal observaties bij negatief BSA Verenigde Staten (US), z = r Round_and_format(py$Residuen[1,"US"])

  • Significant lager aantal observaties bij positief BSA Italië (IT), z = r Round_and_format(py$Residuen[2,"IT"])

15.7.3. Rapportage#

De Chi-kwadraat toets voor onafhankelijkheid is uitgevoerd om te onderzoeken of er een afhankelijkheid is tussen het land van hoogst genoten vooropleiding en het wel of niet behalen van een positief BSA. De resultaten illustreren dat de nulthypothese verworpen kan worden, χ^2^ ~r Round_and_format(py$df)~ = r Round_and_format(py$chi2), p < 0,0001, w = r Round_and_format(py$Eta2). Het land van hoogst genoten vooropleiding en het behalen van een positief of negatief BSA zijn dus niet onafhankelijk van elkaar. Dat betekent dat er verschillen zijn tussen de landen wat betreft de proportie studenten met een positief BSA.

De resultaten van de post-hoc toetsen van de Chi-kwadraat toets voor onafhankelijkheid zijn te vinden in Tabel 3, waarin geobserveerde aantallen met asterisk significant verschillend zijn van verwachte aantallen. De geobserveerde aantallen voor de verschillende landen van hoogste vooropleiding bij een positief BSA verschillen niet significant van de verwachte aantallen. Bij een negatief BSA is er echter een aantal landen waarbij significante verschillen van het verwachte aantal zijn op te merken. Nederland (NL; z = r Round_and_format(py$Residuen[1,"NL"])) en het Verenigd Koninkrijk (UK; z = r Round_and_format(py$Residuen[1,"UK"])) hebben een lager aantal studenten met een negatief BSA dan verwacht; Italië (IT; z = r Round_and_format(py$Residuen[1,"IT"])), België (BE; z = r Round_and_format(py$Residuen[1,"BE"])) en de Verenigde Staten (US; z = r Round_and_format(py$Residuen[1,"US"])) een hoger aantal studenten met negatief BSA dan verwacht. Daarnaast heeft Italië (IT; z = r Round_and_format(py$Residuen[2,"IT"])) ook een lager aantal studenten met positief BSA dan verwacht.

NL

GE

IT

UK

ES

BE

US

Positief BSA

r BSA_kruistabel[1,1]

r BSA_kruistabel[1,2]

r BSA_kruistabel[1,3]

r BSA_kruistabel[1,4]

r BSA_kruistabel[1,5]

r BSA_kruistabel[1,6]

r BSA_kruistabel[1,7]*

r sum(BSA_kruistabel[1,1:7])

Negatief BSA

r BSA_kruistabel[2,1]*

r BSA_kruistabel[2,2]

r BSA_kruistabel[2,3]*

r BSA_kruistabel[2,4]*

r BSA_kruistabel[2,5]

r BSA_kruistabel[2,6]*

r BSA_kruistabel[2,7]*

r sum(BSA_kruistabel[2,1:7])

Totaal

r sum(BSA_kruistabel[1:2,1])

r sum(BSA_kruistabel[1:2,2])

r sum(BSA_kruistabel[1:2,3])

r sum(BSA_kruistabel[1:2,4])

r sum(BSA_kruistabel[1:2,5])

r sum(BSA_kruistabel[1:2,6])

r sum(BSA_kruistabel[1:2,7])

r sum(BSA_kruistabel)

Tabel 3. Geobserveerde aantallen casus BSA en land van hoogste vooropleiding. Aantallen met asterisk zijn significant verschillend van verwachte aantallen.

15.8. Fisher-Freeman-Halton exact toets#

De Fisher-Freeman-Halton exact toets wordt uitgevoerd om te onderzoeken of er een afhankelijkheid is tussen het land van hoogst genoten vooropleiding en het wel of niet behalen van een positief BSA. Deze toets wordt in plaats van de Chi-kwadraat toets voor onafhankelijkheid gebruikt wanneer er in meer dan 20% van de cellen een verwacht aantal observaties van 5 of lager is. Er is een nieuwe dataset dfFisher_BSA_antropologie ingeladen met daarin een lager aantal observaties.

Een kruistabel geeft de aantallen observaties weer voor de combinaties van de categorieën van de variabelen Landen_vooropleiding en BSA. Maak de kruistabel met de functie .crosstable() van het package pandas met als argumenten de variabele dfFisher_BSA_antropologie['BSA'] (positief of negatief BSA) en dfFisher_BSA_antropologie['Landen_vooropleiding'] (land van hoogst genoten vooropleiding).

# Maak een kruistabel
Fisher_BSA_antropologie_kruistabel =  pd.crosstab(dfFisher_BSA_antropologie['BSA'], dfFisher_BSA_antropologie['Landen_vooropleiding'])

# Print de kruistabel
print(Fisher_BSA_antropologie_kruistabel)


# Maak een tabel met proporties, argument 'normalize = columns' zorgt ervoor dat de proporties
# per rij berekend worden
Fisher_Prop_BSA_antropologie_kruistabel = pd.crosstab(dfFisher_BSA_antropologie['BSA'], dfFisher_BSA_antropologie['Landen_vooropleiding'], normalize = 'columns')

# Print de tabel met proporties met drie decimalen
print(round(Fisher_Prop_BSA_antropologie_kruistabel, 3))
Landen_vooropleiding  BE  ES  GE  IT  NL  UK  US
BSA                                             
Negatief               5   9   2   3   2   4   8
Positief              63  60  27  52  39  57  59
Landen_vooropleiding     BE    ES     GE     IT     NL     UK     US
BSA                                                                 
Negatief              0.074  0.13  0.069  0.055  0.049  0.066  0.119
Positief              0.926  0.87  0.931  0.945  0.951  0.934  0.881

De kruistabel en bijbehorende tabel met proporties laat zien dat de meerderheid van de studenten een positief BSA ontvangt voor elk land van vooropleiding. Van studenten uit het Nederland (NL) haalt verhoudingsgewijs het grootste deel een positief BSA. Het percentage studenten met een positief BSA is hier (r Round_and_format(100 * py$NL)%).

15.8.1. Assumptie groepsgrootte#

Toets de assumptie dat niet meer dan 20% van de verwachte aantallen observaties gelijk of kleiner dan vijf is. Bereken het verwacht aantal observaties met de functie .contingency.expected_freq() van het scipy.stats package met als argument de kruistabel Fisher_BSA_antropologie_kruistabel.

# Maak een kruistabel
Fisher_BSA_antropologie_kruistabel =  pd.crosstab(dfFisher_BSA_antropologie['BSA'], dfFisher_BSA_antropologie['Landen_vooropleiding'])

# Bereken verwachte aantallen observaties
sps.contingency.expected_freq(Fisher_BSA_antropologie_kruistabel)
array([[ 5.75384615,  5.83846154,  2.45384615,  4.65384615,  3.46923077,
         5.16153846,  5.66923077],
       [62.24615385, 63.16153846, 26.54615385, 50.34615385, 37.53076923,
        55.83846154, 61.33076923]])

Drie van de 14 (21,43%) verwachte aantallen observaties zijn kleiner dan vijf. Meer dan 20% van de verwachte aantallen observaties is kleiner of gelijk aan vijf, dus de assumptie van de groepsgroette van de Chi-kwadraat toets voor onafhankelijkheid houdt geen stand. De Fisher-Freeman-Halton toets moet inderdaad uitgevoerd worden.

15.8.2. Uitvoering#

Voor zover bekend is er geen package om de Fisher-Freeman-Halton toets uit te voeren in Python. De Fisher exact toets kan in Python alleen uitgevoerd worden voor 2x2 kruistabellen. Deze stap kan dus in deze toetspagina niet weergegeven worden. Om de Fisher-Freeman-Halton toets uit te voeren. Bekijk de toetspagina van de Fisher-Freeman-Halton toets in R om deze met de programmeertaal R uit te voeren. Voor het vervolg van deze toetspagina wordt aangenomen dat de Fisher-Freeman-Halton exact toets geen significant resultaat laat zien.

15.8.3. Post-hoc toets: Fisher’s exacte toets#

Omdat er geen afhankelijkheid is tussen het wel of niet halen van een positief BSA en het land van hoogste vooropleiding, hoeven er geen post-hoc toetsen uitgevoerd te worden. Indien dit wel nodig is, toets uitvoert. Voer Fisher’s exact toets uit met behulp van de functie fisher_exact() van het package scipy.stats met als argumenten de kruistabel Fisher_BSA_antropologie_kruistabel.iloc[:,  [i,j]] en alternative = 'two-sided' om aan te geven dat er een tweezijdige alternatieve hypothese getoetst moet worden. Er vindt nu dus geen correctie op de p-waarden plaats, deze kan indien gewenst handmatig doorgevoerd worden op de p-waardes. Een voorbeeld is de Bonferroni cirrectie die de p-waarde aanpast door de p-waarde te vermenigvuldigen met het aantal uitgevoerde toetsen en hiermee de kans dat er bij toeval een verband wordt ontdekt dat er niet is te verlagen.[^5]

# Maak een tabel om de p-waardes in op te slaan
Tabel_p_waardes = np.zeros((7, 7))

# Geef de kolommen en rijen van de tabel de namen van de landen die vergeleken worden
Landen = Fisher_BSA_antropologie_kruistabel.columns
Tabel_p_waardes = pd.DataFrame(Tabel_p_waardes, columns = Landen, index = Landen)

# Maak een dubbele for loop om voor elke combinatie van landen Fisher's exact toets uit te voeren
for i in range(0,7):
  for j in range(0,7):
    OR, pval = sps.fisher_exact(Fisher_BSA_antropologie_kruistabel.iloc[:, [i,j]], alternative = 'two-sided')
    Tabel_p_waardes.iloc[i,j] = round(pval, 3)

# Print de tabel met p-waarden
print(Tabel_p_waardes)
Landen_vooropleiding     BE     ES     GE     IT     NL     UK     US
Landen_vooropleiding                                                 
BE                    1.000  0.399  1.000  0.730  0.709  1.000  0.398
ES                    0.399  1.000  0.499  0.224  0.205  0.254  1.000
GE                    1.000  0.499  1.000  1.000  1.000  1.000  0.718
IT                    0.730  0.224  1.000  1.000  1.000  1.000  0.342
NL                    0.709  0.205  1.000  1.000  1.000  1.000  0.313
UK                    1.000  0.254  1.000  1.000  1.000  1.000  0.371
US                    0.398  1.000  0.718  0.342  0.313  0.371  1.000

De resultaten laten de significantie zien van de Fisher’s exact toets voor elk mogelijke combinatie van 2x2 tabellen. Geen van de post-hoc toetsen is significant, wat logisch is aangezien de Fisher-Freeman-Halton exact toets niet significant was. De eerste rij bijvoorbeeld bestaat uit de p-waardes van deze toets voor de vergelijkingen van België (BE) met alle andere landen. Zo is de p-waarde van de vergelijking tussen België (BE) en Spanje (ES) 0,399. De opmerkelijke p-waardes van 1 komen doordat de verschillen zo klein zijndat dit leidt tot een p-waarde van 1.

15.8.4. Rapportage#

De Fisher-Freeman-Halton exact toets is uitgevoerd om te onderzoeken of er een afhankelijkheid is tussen het land van hoogst genoten vooropleiding en het wel of niet behalen van een positief BSA voor een dataset met een laag aantal observaties. De nulhypothese kan niet verworpen worden, dus er lijkt geen afhankelijkheid te zijn tussen het wel of niet ontvangen van een positief BSA en het land van de hoogst genoten vooropleiding. Het percentage studenten met een positief BSA lijkt niet te verschillen per land van hoogst genoten vooropleiding.


1

Van Geloven, N. (20 augustus 2015). Chi-kwadraat toets. Wiki Statistiek Academisch Medisch Centrum.

2(1,2)

Van Geloven, N. & Holman, R. (6 mei 2016). Fisher’s exact toets. Wiki Statistiek Academisch Medisch Centrum.

3(1,2)

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

4

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). [^5]: Field, A., Miles, J., & Field, Z. (2012). Discovering statistics using R. London: Sage publications.

10

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.

7(1,2)

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

11

Een z-score is een maat om aan te geven hoeveel een observatie afwijkt van het gemiddelde. De z-score wordt berekend door het gemiddelde van de observatie af te halen en dit daarna te delen door de standaarddeviatie, i.e. \(\frac{X - \mu}{\sigma}\). In feite geeft een z-score aan hoeveel standaarddeviaties de observatie van het gemiddelde afwijkt.

6

De effectmaat w wordt voor de Chi-kwadraat toets voor onafhankelijkheid berekend door de wortel te nemen van de χ^2^-waarde gedeeld door het totaal aantal observaties, i.e. \(\sqrt{ \frac{\chi^2}{N} }\).

8

Dit voorbeeld gaat uit van een waarschijnlijkheid van 95% en zodoende een p-waardegrens van 0,05. Dit is naar eigen inzicht aan te passen. Hou hierbij rekening met type I en type II fouten.

9

De waarde 1,96 is een z-score en correspondeert met het significantieniveau 0,05 voor een tweezijdige toets. Om te corrigeren voor meerdere testen kan een ander significantieniveau gekozen worden wat resulteert in een andere z-score om mee te vergelijken. Bij een significantieniveau van 0,01 is de z-score bijvoorbeeld 2,58. De z-score per significantieniveau is te berekenen met abs(qnorm(alfa/2)) waarbij alfa het gewenste significantieniveau is.