Gebruik de Wilcoxon signed rank toets om te toetsen of twee gepaarde groepen van elkaar verschillen op een ordinale1 variabele. Als de variabele beter als nominaal2 beschouwd kan worden, is de McNemar toets een alternatief. Bij de McNemar toets wordt echter geen rekening gehouden met de ordening van de categorieën van de ordinale variabele: de variabele wordt behandeld als een nominale variabele.
De hoofddocent van het vak ‘Speech schrijven’ van de bachelor Politicologie is benieuwd naar de effectiviteit van zijn eigen vak. Daarom laat hij studenten bij de eerste bijeenkomst van het vak een speech schrijven die zij beoordeelt als onvoldoende, voldoende, goed of uitstekend. Gedurende het vak leren studenten het schrijven van speeches vanuit verschillende perspectieven. Aan het einde van het vak schrijven studenten wederom een speech die op dezelfde wijze door de hoofddocent beoordeeld wordt. Op deze manier kan hij onderzoeken of zijn lessen ervoor zorgen dat studenten beter worden in het schrijven van speeches.
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 (som van rangschikkingen van de) beoordelingen van de speeches geschreven door studenten aan het begin en aan het eind van het vak.
HA: Er is een verschil tussen de (som van rangschikkingen van de) beoordelingen van de speeches geschreven door studenten aan het begin en aan het eind van het vak. De beoordelingen zijn hoger voor een van de twee meetmomenten.
Het meetniveau van de afhankelijke variabele is ordinaal3 of continu.4 In deze toetspagina staat een casus met ordinale data centraal; een casus met continue data met bijbehorende uitwerking zijn te vinden in de Wilcoxon signed rank toets I.
Om de Wilcoxon signed rank toets uit te voeren met een ordinale afhankelijke variabele, moet deze variabele omgezet worden in getallen. Wanneer er vier categorieën zijn, worden ze genummerd van 1 tot en met 4 op basis van de ordening van de variabele. De categorieën onvoldoende, voldoende, goed en uitstekend worden dan omgezet in respectievelijk 1, 2, 3 en 4. Met behulp van deze getallen worden verschilscores berekend per deelnemer5. Een persoon die van voldoende naar uitstekend gaat, krijgt als verschilscore 2. Hierbij wordt impliciet aangenomen dat de afstand tussen alle categorieën even groot is. In andere woorden, het verschil tussen onvoldoende en voldoende is even groot als het verschil tussen voldoende en goed en tussen goed en uitstekend. Bij de Bhapkar toets wordt deze aanname niet gedaan, maar wordt de ordinale variabele als nominaal6 beschouwd. De Wilcoxon signed rank toets maakt een rangschikking van de absolute waarden van de verschilscores en telt vervolgens de rangschikkingen op voor de positieve en negatieve verschilscores. Het verschil tussen de som van de positieve en negatieve rangschikkingen bepaalt de significantie van de toets.
De p-waarde geeft aan of een (mogelijk) verschil tussen twee groepen 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.7
De Wilcoxon signed rank toets heeft als effectmaat r. Een indicatie om r 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.8 De effectmaat r wordt voor de Wilcoxon signed rank toets berekend door de z-waarde behorend bij de p-waarde van de toets te delen door de wortel van het aantal deelnemers, i.e. \(\frac{z}{\sqrt{N}}\).9 Een correlatie tussen twee variabelen wordt vaak ook aangeduid met het symbool r. Beide zijn effectmaten, maar er is verder geen verband tussen de correlatie en de effectmaat van de Wilcoxon signed rank toets.
Er is data ingeladen met de beoordeling van studenten van het vak ‘Speech schrijven’ aan het begin en eind van het vak. Gebruik head() en tail() om de structuur van de data te bekijken.
## Eerste 6 observaties
head(Beoordelingen_speech_schrijven)
## Studentnummer Meetmoment Beoordeling
## 1 3909362 Begin Voldoende
## 2 3731799 Begin Voldoende
## 3 3623196 Begin Voldoende
## 4 3720223 Begin Uitstekend
## 5 3468737 Begin Onvoldoende
## 6 3327754 Begin Goed
## Laatste 6 observaties
tail(Beoordelingen_speech_schrijven)
## Studentnummer Meetmoment Beoordeling
## 155 3088606 Eind Goed
## 156 3182503 Eind Uitstekend
## 157 3814744 Eind Goed
## 158 3759883 Eind Uitstekend
## 159 3228871 Eind Goed
## 160 3863377 Eind Uitstekend
Een kruistabel geeft de aantallen observaties weer voor de combinaties van de categorieën van de variabelen Meetmoment en Beoordeling. In feite laat dit zien welke beoordelingen studenten krijgen aan het begin en eind van de cursus. Maak de kruistabel met de functie table() met als argumenten de variabele Beoordelingen_speech_schrijven$Meetmoment, die weergeeft of de speech aan het begin of eind van de cursus is geschreven en de variabele Beoordelingen_speech_schrijven$Beoordeling die de beoordeling weergeeft.
## Maak een kruistabel
Beoordelingen_kruistabel <- table(Beoordelingen_speech_schrijven$Meetmoment, Beoordelingen_speech_schrijven$Beoordeling)
## Bepaal de volgorde van de beoordelingen
Volgorde <- c("Onvoldoende", "Voldoende", "Goed", "Uitstekend")
## Print de kruistabel
print(Beoordelingen_kruistabel[,Volgorde])
##
## Onvoldoende Voldoende Goed Uitstekend
## Begin 12 35 25 8
## Eind 6 18 25 31
## Print een tabel met proporties; het tweede argument `1` zorgt ervoor dat de
## proporties per kolom berekend worden
prop.table(Beoordelingen_kruistabel[,Volgorde], 1)
##
## Onvoldoende Voldoende Goed Uitstekend
## Begin 0.1500 0.4375 0.3125 0.1000
## Eind 0.0750 0.2250 0.3125 0.3875
De kruistabel laat zien dat er aan het eind van het vak meer speeches als goed en uitstekend worden beoordeeld en minder speeches als onvoldoende of voldoende. Dit is ook te zien in de kruistabel met proporties.
Naast de kruistabel, is de confusiematrix ook relevant om te bekijken. Bij een confusiematrix worden de beoordelingen van studenten aan het begin en eind van de cursus tegen elkaar uitgezet. Sla daarom de variabele Beoordeling apart op in twee vectoren: een voor het begin van het vak en een voor het eind. Maak daarna de confusiematrix.
## Definieer de groepen
Begin <- Beoordelingen_speech_schrijven$Beoordeling[Beoordelingen_speech_schrijven$Meetmoment == "Begin"]
Eind <- Beoordelingen_speech_schrijven$Beoordeling[Beoordelingen_speech_schrijven$Meetmoment == "Eind"]
## Bepaal de volgorde van de beoordelingen
Volgorde <- c("Onvoldoende", "Voldoende", "Goed", "Uitstekend")
## Maak een confusiematrix
Beoordelingen_confusiematrix <- table(Begin, Eind)
## Print de confusiematrix
print(Beoordelingen_confusiematrix[Volgorde, Volgorde])
## Eind
## Begin Onvoldoende Voldoende Goed Uitstekend
## Onvoldoende 6 5 1 0
## Voldoende 0 9 19 7
## Goed 0 4 5 16
## Uitstekend 0 0 0 8
De confusiematrix geeft informatie over de verschillen tussen de beoordelingen aan het begin en eind van het vak. Er zijn bijvoorbeeld 16 studenten die aan het begin goed als beoordeling ontvingen en aan het eind de beoordeling uitstekend.
Maak een staafdiagram om de verdeling van de beoordelingen aan het begin en eind van het vak visueel weer te geven.
## Histogram met ggplot2
library(ggplot2)
ggplot(Beoordelingen_speech_schrijven,
aes(Beoordeling)) +
geom_bar(color = "grey30",
fill = "#0089CF") +
scale_x_discrete(limits = c("Onvoldoende", "Voldoende", "Goed", "Uitstekend")) +
facet_wrap(~ Meetmoment, labeller = labeller(Meetmoment = c(Begin = "Begin van het vak", Eind = "Eind van het vak"))) +
ylab("Frequentie") +
labs(title = "Beoordeling van het speech schrijven aan het begin en eind van het vak")
Aan het eind van het vak zijn er meer speeches als goed en uitstekend beoordeeld in vergelijking tot het begin van het vak. Daarnaast zijn er minder speeches als onvoldoende en voldoende beoordeeld.
Voer de Wilcoxon signed rank toets uit om de vraag te beantwoorden of de beoordelingen van het schrijven van speeches bij het vak ‘Speech schrijven’ verschillen tussen het begin en eind van het vak. Zet eerst de categorische variabele Beoordeling om in een numerieke variabele door de categorieën onvoldoende, voldoende, goed en uitstekend om te zetten in respectievelijk 1, 2, 3 en 4. Gebruik daarna de functie wilcox.test() met als eerste argument Beoordeling ~ Meetmoment waarin Beoordeling de afhankelijke variabele is en Meetmoment de onafhankelijke variabele is die twee meetmomenten aangeeft. Gebruik het argument paired = TRUE om aan te geven dat de twee meetmomenten aan elkaar gepaard zijn. Toets tweezijdig door het argument alternative = "two.sided" te gebruiken.
# Zet de categorieën om in getallen
Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Onvoldoende"] <- 1
Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Voldoende"] <- 2
Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Goed"] <- 3
Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Beoordeling == "Uitstekend"] <- 4
# Maak de variabele numeriek
Beoordelingen_speech_schrijven$Beoordeling_numeriek <- as.numeric(Beoordelingen_speech_schrijven$Beoordeling_numeriek)
# Voer de wilcoxon signed rank toets uit
wilcox.test(Beoordeling_numeriek ~ Meetmoment, Beoordelingen_speech_schrijven,
paired = TRUE, alternative = "two.sided")
##
## Wilcoxon signed rank test with continuity correction
##
## data: Beoordeling_numeriek by Meetmoment
## V = 90, p-value = 3.529e-09
## alternative hypothesis: true location shift is not equal to 0
Bereken de effectmaat r vervolgens op basis van de p-waarde van de Wilcoxon signed rank toets.
# Sla de p-waarde op
pwaarde <- wilcox.test(Beoordeling_numeriek ~ Meetmoment, Beoordelingen_speech_schrijven,
paired = TRUE, alternative = "two.sided")$p.value
# Bereken de effectgrootte voor een tweezijdige toets
r <- abs(qnorm(pwaarde/2)) / sqrt(length(Beoordelingen_speech_schrijven))
# Bereken de effectgrootte voor een eenzijdige toets
#r <- abs(qnorm(pwaarde)) / sqrt(length(Beoordelingen_speech_schrijven))
# Print de effectgrootte
paste("De effectmaat is", r)
## [1] "De effectmaat is 2.95243422219211"
Bereken de aantallen en de sommen van positieve en negatieve rangschikkingen op basis van de verschilscores.
# Bereken de verschilscores
Verschilscores <- Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Meetmoment == "Eind"] - Beoordelingen_speech_schrijven$Beoordeling_numeriek[Beoordelingen_speech_schrijven$Meetmoment == "Begin"]
# Rangschik de absolute waarden van de verschilscores
Rangschikkingen <- rank(abs(Verschilscores))
# Maak een vector met daarin de tekens (plus of min) van de verschilscores)
Tekens <- sign(Verschilscores)
# Bereken het aantal en de som van de positieve rangschikkingen
N_positief <- length(Tekens[Tekens == 1])
Som_positief <- sum(Rangschikkingen[Tekens == 1])
# Bereken het aantal en de som van de negatieve rangschikkingen
N_negatief <- length(Tekens[Tekens == -1])
Som_negatief <- sum(Rangschikkingen[Tekens == -1])
# Print de resultaten
N_positief
## [1] 48
Som_positief
## [1] 2632
N_negatief
## [1] 4
Som_negatief
## [1] 202
De Wilcoxon signed rank toets is uitgevoerd om de vraag te beantwoorden of er verschil is tussen de beoordelingen van het schrijven van speeches aan het begin en eind van het vak ‘Speech schrijven’. De resultaten van de toets laten zien dat er een significant verschil is tussen het de beoordelingen aan het begin en eind van het vak, V = 90, p < 0,0001, r = 2,95. Er zijn 48 studenten met een hogere beoordeling aan het eind van het vak (som van rangschikkingen is 2632) en er zijn 4 studenten met een lagere beoordeling aan het eind van het vak. Studenten lijken dus beter speeches te schrijven aan het eind vak het vak.
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.↩
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).↩
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.↩
Laerd Statistics (2018). Wilcoxon Signed-Rank Test using SPSS Statistics. https://statistics.laerd.com/spss-tutorials/wilcoxon-signed-rank-test-using-spss-statistics.php↩
Met een deelnemer wordt het object bedoeld dat geobserveerd wordt, bijvoorbeeld een student, een inwoner van Nederland, een opleiding of een organisatie. Met een observatie wordt de waarde bedoeld die de deelnemer heeft voor een bepaalde variabele. Een deelnemer heeft dus meestal een observatie voor meerdere variabelen.↩
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).↩
Field, A., Miles, J., & Field, Z. (2012). Discovering statistics using R. London: Sage publications.↩
Allen, P. & Bennett, K. (2012). SPSS A practical Guide version 20.0. Cengage Learning Australia Pty Limited.↩
Allen, P. & Bennett, K. (2012). SPSS A practical Guide version 20.0. Cengage Learning Australia Pty Limited.↩
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.↩