16. Bhapkar toets#

16.1. Toepassing#

Gebruik de Bhapkar toets om te toetsen of er verschillen zijn voor een nominale1 variabele tussen twee gepaarde groepen.2, 3 Als de nominale variabele twee categorieën heeft, kan ook de McNemar toets gebruikt worden.

16.2. Onderwijscasus#

De studieadviseur van de bachelor Leisure & Events Management geeft halverwege het eerste studiejaar een voorlopig BSA-advies aan alle eerstejaars studenten. Studenten ontvangen een positief, negatief of uitgesteld BSA. Daarnaast voert zij met alle studenten persoonlijke gesprekken om het advies toe te lichten en een plan voor de rest van het studiejaar te maken. De studieadviseur wil graag onderzoeken of er verschillen zijn tussen het voorlopige BSA-advies halverwege het jaar en het definitieve advies aan het einde van het jaar zodat ze de effectiviteit van de persoonlijke gesprekken kan beoordelen.

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 verschil tussen de verdeling van de voorlopige BSA adviezen en de definitieve BSA adviezen.

HA: Er is een verschil tussen de verdeling van de voorlopige BSA adviezen en de definitieve BSA adviezen.

16.3. Assumpties#

Om de Bhapkar toets uit te voeren, moeten de data aan een aantal voorwaarden voldoen. Er dient een categorische variabele te zijn met twee of meer categorieën en een binaire variabele die de twee gepaarde groepen weergeeft. Daarnaast mag er geen overlap zijn tussen de categorieën van de categorische variabele: elke observatie past slechts in een van beide categorieën.2, 3

16.4. Frequentiematrix#

De Bhapkar toets gaat uit van een frequentiematrix, een matrix waarin de rijen de eerste meting van de steekproef bevat en de kolommen de tweede meting. Een voorbeeld bij de casus is weergegeven in Tabel 1.

Definitief

Positief

Negatief

Uitgesteld

Voorlopig

Positief

r py$BSA_frequentiematrix[2,2]

r py$BSA_frequentiematrix[2,1]

r py$BSA_frequentiematrix[2,3]

Negatief

r py$BSA_frequentiematrix[1,2]

r py$BSA_frequentiematrix[1,1]

r py$BSA_frequentiematrix[1,3]

Uitgesteld

r py$BSA_frequentiematrix[3,2]

r py$BSA_frequentiematrix[3,1]

r py$BSA_frequentiematrix[3,3]

Tabel 1. Frequentiematrix van de voorlopige en definitieve BSA-adviezen voor studenten van de bachelor Leisure & Event Management.

De cel linksboven bevat het aantal studenten dat zowel bij het voorlopige BSA als het definitieve BSA advies een positief advies heeft ontvangen; dit zijn r py$BSA_frequentiematrix[2,2] studenten. De cel in het midden van de frequentiematrix laat het aantal studenten zien dat zowel bij het voorlopige BSA als het definitieve BSA advies een negatief advies heeft ontvangen; dit zijn r py$BSA_frequentiematrix[1,1] studenten. De cel rechtsonder bevat het aantal studenten dat zowel bij het voorlopige BSA als het definitieve BSA advies een uitgesteld advies heeft ontvangen; dit is r py$BSA_frequentiematrix[3,3] student. Deze drie cellen staan op de diagonaal van de tabel en worden daarom de diagonale elementen genoemd.

Er zijn ook cellen die niet onder de diagonale elementen van de frequentiematrix vallen. Deze cellen bevatten studenten waarbij het voorlopige BSA advies verschilt van het definitieve advies. In de cel rechtsboven bijvoorbeeld staat het aantal studenten dat een positief voorlopig BSA advies en een uitgesteld definitief BSA advies heeft ontvangen; dit zijn r py$BSA_frequentiematrix[2,3] studenten. De cel linksonder bevat het aantal studenten dat een uitgesteld voorlopig BSA advies en een positief definitief BSA advies heeft ontvangen; dit zijn r py$BSA_frequentiematrix[3,2] studenten.

16.5. De data bekijken#

Er is een dataset ingeladen genaamd dfBSA_LEM. In deze dataset is voor elke student aangegeven wat het voorlopige en definitieve BSA advies is.

## Eerste 5 observaties
print(dfBSA_LEM.head(5))

## Laatste 5 observaties
print(dfBSA_LEM.tail(5))
   Studentnummer  Soort_BSA  BSA_advies
0        4909362  Voorlopig    Positief
1        4731799  Voorlopig    Positief
2        4623196  Voorlopig  Uitgesteld
3        4720223  Voorlopig    Positief
4        4468737  Voorlopig    Positief
     Studentnummer   Soort_BSA BSA_advies
295        4825665  Definitief   Negatief
296        4173895  Definitief   Negatief
297        4109988  Definitief   Negatief
298        4081066  Definitief   Positief
299        4874260  Definitief   Positief

Een kruistabel geeft de aantallen observaties weer voor de combinaties van de categorieën van de variabelen Soort_BSA en BSA_advies. In feite laat deze tabel de frequentie van het positieve, negatieve en uitgestelde BSA-advies zien voor de voorlopige en definitieve BSA. Maak de kruistabel met de functie .crosstab() van het package pandas met als argumenten de variabele dfBSA_LEM['Soort_BSA'], die weergeeft of het om het voorlopige of definitieve advies gaat, en de variabele dfBSA_LEM['BSA_advies'], die het BSA-advies aangeeft.

import pandas as pd

## Maak een kruistabel
BSA_kruistabel = pd.crosstab(dfBSA_LEM['Soort_BSA'], dfBSA_LEM['BSA_advies'])

## Print de kruistabel 
print(BSA_kruistabel)

## Print een tabel met proporties, tweede argument 'index' zorgt ervoor dat de 
## proporties per rij berekend worden
Prop_BSA_kruistabel = pd.crosstab(dfBSA_LEM['Soort_BSA'], dfBSA_LEM['BSA_advies'], normalize = 'index')

## Print de tabel met proporties
print(Prop_BSA_kruistabel)
BSA_advies  Negatief  Positief  Uitgesteld
Soort_BSA                                 
Definitief        20       124           6
Voorlopig         44        92          14
BSA_advies  Negatief  Positief  Uitgesteld
Soort_BSA                                 
Definitief  0.133333  0.826667    0.040000
Voorlopig   0.293333  0.613333    0.093333

De kruistabel en de kruistabel met proporties laten zien dat het aantal positieve BSA-adviezen hoger is bij het definitieve advies en het aantal negatieve BSA-adviezen juist lager. Het aantal uitgestelde BSA-adviezen is iets lager bij het definitieve advies.

16.6. Uitvoering#

16.6.1. Bhapkar toets#

Voer de Bhapkar toets uit om te onderzoeken of er een verschil is tussen de verdeling van de voorlopige en definitieve BSA-adviezen voor studenten van de bachelor Leisure & Events Management. Sla eerst de voorlopige en definitieve BSA adviezen op in vectoren. Maak daarna een frequentiematrix met behulp van de functie sms.SquareTable() van het package statsmodels.stats.api met als argument pd.crosstab(Voorlopig, Definitief), een manier om een frequentiematrix te maken met behulp van de functie pd.crosstab() van het package pandas. Voer vervolgens de Bhapkar toets uit met behulp van de functie .homogeneity(method = 'bhapkar'), ook van het package statsmodels.stats.api.

import statsmodels.stats.api as sms
import numpy as np

## Definieer de groepen
Voorlopig = np.array(dfBSA_LEM['BSA_advies'][dfBSA_LEM['Soort_BSA'] == 'Voorlopig'])
Definitief = np.array(dfBSA_LEM['BSA_advies'][dfBSA_LEM['Soort_BSA'] == 'Definitief'])

## Maak een frequentiematrix
BSA_frequentiematrix =  sms.SquareTable(pd.crosstab(Voorlopig, Definitief))

## Voer de Bhapkar toets uit
print(BSA_frequentiematrix.homogeneity(method = 'bhapkar'))
df          2
pvalue      4.516458307479709e-05
statistic   20.010394677125866
  • χ^2^ = r Round_and_format(py$stat), p < 0,0001

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

  • De verdelingen van de voorlopige en definitieve BSA-adviezen zijn verschillend.

16.7. Rapportage#

De Bhapkar toets is uitgevoerd om uit te vinden of er een verschil tussen de verdeling van de voorlopige en definitieve BSA-adviezen van de studenten van de bachelor Leisure & Events Management. Uit de Bhapkar toets blijkt dat er een significant verschil is tussen de verdelingen van de voorlopige en definitieve BSA-adviezen, χ^2^ = r Round_and_format(py$stat), p < 0,0001. De frequenties en bijbehorende percentages voor de voorlopige en definitieve BSA-adviezen zijn te vinden in Tabel 2. Op basis van de resultaten en deze tabel is te zien dat er bij de definitieve BSA-adviezen meer positieve en minder negatieve BSA-adviezen zijn dan bij de voorlopige adviezen. Daarnaast is het aantal uitgestelde BSA-adviezen iets lager bij de definitieve adviezen. De persoonlijke gesprekken met de studieadviseur lijken er dus voor te zorgen dat er meer positieve en minder negatieve en uitgestelde BSA-adviezen zijn.

BSA-advies

Positief

Negatief

Uitgesteld

Voorlopig

r py$BSA_kruistabel[2,2] (r Round_and_format(100*py$Prop_BSA_kruistabel[2,2])%)

r py$BSA_kruistabel[2,1] (r Round_and_format(100*py$Prop_BSA_kruistabel[2,1])%)

r py$BSA_kruistabel[2,3] (r Round_and_format(100*py$Prop_BSA_kruistabel[2,3])%)

Definitief

r py$BSA_kruistabel[1,2] (r Round_and_format(100*py$Prop_BSA_kruistabel[1,2])%)

r py$BSA_kruistabel[1,1] (r Round_and_format(100*py$Prop_BSA_kruistabel[1,1])%)

r py$BSA_kruistabel[1,3] (r Round_and_format(100*py$Prop_BSA_kruistabel[1,3])%)

Tabel 2. Kruistabel en rijpercentages voor de voorlopige en definitieve BSA-adviezen van studenten van de bachelor Leisure & Events Management.


1

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).

2(1,2)

Sun, X., & Yang, Z., (2008) Generalized McNemar’s Test for Homogeneity of the Marginal Distributions. SAS Global Forum 2008

3(1,2)

Uebersax, J. (30 augustus 2006). McNemar Tests of Marginal Homogeneity

6

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.