Wilcoxon-Test für 2 abhängige Stichproben in R rechnen

von | Dez 16, 2020 | Mittelwertvergleich, R | 0 Kommentare

Ziel des WilcoxonTest in R

Der Wilcoxon-Test ist ein nicht parametrischer Mittelwertvergleich bei 2 abhängigen Stichproben. Er verwendet Ränge statt die tatsächlichen Werte und ist das Gegenstück zum t-Test bei abhängigen Stichproben, allerdings hat er nicht solche strengen Voraussetzungen.

Voraussetzungen des Wilcoxon-Test in R

  • zwei voneinander abhängige Stichproben/Gruppen
  • ordinal oder metrisch skalierte y-Variable
  • normalverteilte y-Variable innerhalb der Gruppen nicht nötig
Dieses Video ansehen auf YouTube.

Fragen können unter dem verlinkten Video gerne auf YouTube gestellt werden.

 

Nullhypothese

Die Nullhyopthese beim Wilcoxon-Test für abhängige Stichproben geht davon aus, dass zentrale Tendenzen zu den zwei Zeitpunkten existieren. In Worten, die häufig beim t-Test verwendet werden: in etwa Gleichheit der Mittelwerte zu beiden Zeitpunkten.

Ihr könnt bei diesem Test einseitig und zweiseitig testen. Einseitig heißt lediglich, dass ihr eine konkrete Vermutung habt, dass die zentrale Tendenz der Testvariable (=abhängige Variable) zum einen Zeitpunkte kleiner oder größer ist als zum anderen Zeitpunkt. Standardmäßig wird zweiseitig getestet, das heißt ihr vermutet einen Unterschied, wisst aber nicht, zu welchem Zeitpunkt der größere „Mittelwert“ existiert. Ein Beispiel: Ich habe einen Datensatz mit zwei Messzeitpunkten. Zwischen den Messzeitpunkten liegt eine Intervention – der Beginn eines Trainings. Es wurde vor dem Training gezählt, wie viele Liegestütze die Probanden schafften (t0). Nach einem regelmäßigen, z.B. 10-wöchigen Training, wurde erneut gezählt (t10).

Die Nullhypothese ist also: Es gibt keinen Unterschied hinsichtlich der Anzahl an Liegestützen vor und nach dem Training.

Die Alternativhypothese lautet entsprechend: Es gibt einen Unterschied hinsichtlich der Anzahl der Liegestützen vor und nach dem Training. Das können wir sogar konkretisieren, da wir aus Erfahrung wissen, dass ein gezieltes Training typischerweise zu einer Verbesserung der Leistung führt. Die Alternativhypothese kann demzufolge sogar lauten: nach dem 10-wöchigen Training ist die mittlere Anzahl an Liegestützen höher als davor. Dies wäre die einseitige Testung.  

 

Durchführung des Wilcoxon-Test in R

Daten im wide-Format

Hier zeige ich die Berechnung, wenn die Daten im Wide-Format vorliegen. Achtung: Für die anschließende Berechnung der Effektstärke benötigt es eine Umwandlung in das long-Format – dies zeige ich unten für dieses Beispiel.

Proband	t0	t10
A	28	42
B	5	10
C	23	26
D	20	30
E	16	24
F	22	28
G	8	12
H	11	15
I	7	9
J	17	23
K	9	24
L	29	39
M	34	56
N	34	51
O	14	24
P	21	28
Q	21	29

 

Vorarbeiten

Nach dem Einlesen eurer Daten verwendet ihr die Funktion wilcox.test(): Allerdings würde ich vorher eine kurze deskriptive Analyse empfehlen, um einen kleinen Eindruck über die Entwicklung der Werte zu haben. Dazu nutze ich das Paket psych mit der describe()-Funktion sowie einen kleinen Boxplot.

install.packages("psych")
library(psych)
Mit der describe()-Funktion und boxplot()-Funktion kann ich mir nun die Variablen t0 und t10 anschauen.

describe(t0)
describe(t10)
boxplot(data$t0,data$t10)

> describe(data$t0)
   vars  n  mean   sd median trimmed   mad min max range skew kurtosis   se
X1    1 17 18.76 9.11     20   18.67 11.86   5  34    29 0.16    -1.22 2.21
> describe(data$t10)
   vars  n  mean    sd median trimmed  mad min max range skew kurtosis   se
X1    1 17 27.65 13.28     26      27 5.93   9  56    47 0.55    -0.52 3.22
Wilcoxon Boxplot Hier ist sowohl anhand der Mittelwertes (mean) als auch des Medians erkennbar, dass sich die Werte von z0 zu t10 erhöhen. Ob dies ein signifikanter Unterschied ist, muss jedoch mit wilcox.test() festgestellt werden. Für wilcox.test() sind noch folgende Dinge zu beachten:
  • Da wilcox.test() standardmäßig den ungepaarten Test rechnet, muss zwingend noch das Argument paired = TRUE angehängt werden.
  • Mit exact = TRUE wird eine exakte Berechnung des p-Wertes durchgeführt. Dies ist immer dann sinnvoll, wenn es wenige Beobachtungen gibt (unter 30, stellenweise liest man auch bereits unter 50 (Benesch (2012) Schlüsselkonzepte zur Statistik, S. 217), manchmal erst unter 25 (Harris, T., & Hardin, J. W. (2013). Exact Wilcoxon signed-rank and Wilcoxon Mann–Whitney ranksum tests. S. 339). Einige Autoren (z.B. Dalgaard (2008), Introductory Statistics with R, S. 106f.) sprechen ebenfalls davon, dass ein exakter Test bei Bindungen (doppelte Ränge) nicht gerechnet werden sollte. Da ich nur 17 Beobachtungen habe, rechne ich einen exakten Test. Hinweis: Die Unterschiede zwischen approximativer und exakter Signifikanz sind meist sehr gering.
  • Mit correct = TRUE wird die sog. Kontinuitätskorrektur gerechnet. Eine Kontinuitätskorrektur ist eine Anpassung, die vorgenommen wird, wenn eine diskrete Verteilung durch eine kontinuierliche approximiert wird. Dies ist logischerweise nur dann relevant, wenn eine approximierte Signifikanz gerchnet wird. In meinem Fall trifft es zu.
  • Mit conf.int = TRUE wird noch zusätzlich zur Signifikanz das 95%-Konfidenzintervall ausgegeben. Solltet ihr ein anderes KI benötigen, nutzt ihr das Argument conf.level.
  • Mit alternative = less oder alternative = greater kann man zusätzlich einseitig testen. Es wird immer die erste mit der zweiten Variable (=Zeitpunkt) verglichen. Daher wird für die Vermutung, dass die erste Variable kleiner als die zweite ist, „less“ verwendet. „greater“ wird im umgekehrten Falle verwendet. Wir das Argument nicht verwendet, wird automatisch zweiseitig getestet – das ist ohnehin der Regelfall.

 

Beispielcode in R: zweiseitiger Test


wilcox.test(data$t10,data$t0, paired = TRUE, exact = TRUE, correct = TRUE, conf.int = TRUE)

 

Die Interpretation der Ergebnisse folgt nach der kurzen Darstellung des Codes für das long-Format.

Daten im long-Format

Sollten die Daten im long-Format vorliegen, kann auch die wilcox.test()-Funktion verwendet werden.

Proband  t       v
A	t0	28
B	t0	5
C	t0	23
D	t0	20
E	t0	16
F	t0	22
G	t0	8
H	t0	11
I	t0	7
J	t0	17
K	t0	9
L	t0	29
M	t0	34
N	t0	34
O	t0	14
P	t0	21
Q	t0	21
A	t10	42
B	t10	10
C	t10	26
D	t10	30
E	t10	24
F	t10	28
G	t10	12
H	t10	15
I	t10	9
J	t10	23
K	t10	24
L	t10	39
M	t10	56
N	t10	51
O	t10	24
P	t10	28
Q	t10	29

 

Vorarbeiten

Die Vorarbeiten gestalten sich sehr ähnlich zu oben. Der Vollständigkeit wegen aber der komplette Code:

install.packages("psych")
library(psych)
Mit der describeBy()-Funktion kann ich mir nun die Variablen t0 und t10 anschauen.

describeBy(data_long$v, group=data_long$t)
boxplot(data_long$v~ data_long$t)

> describe(data$t0)
 Descriptive statistics by group 
group: t0
   vars  n  mean   sd median trimmed   mad min max range skew kurtosis   se
X1    1 17 18.76 9.11     20   18.67 11.86   5  34    29 0.16    -1.22 2.21
---------------------------------------------------------------------------- – 
group: t10
   vars  n  mean    sd median trimmed  mad min max range skew kurtosis   se
X1    1 17 27.65 13.28     26      27 5.93   9  56    47 0.55    -0.52 3.22

 

Beispielcode in R: zweiseitiger Test

Hier ist der Messwert und der Zeitpunkt nun mit einem „~“ zu trennen. Der Rest bleibt identisch zu den obigen Ausführungen, ebenso wie das Ergebnis und die jetzt folgende Interpretation.


wilcox.test(data_long$v~data_long$t, paired = TRUE, exact=FALSE, correct=TRUE, conf.int = TRUE)

 

Interpretation des Wilcoxon-Test in R

Das Ergebnis ist unabhängig von der Berechnung nach wide-Format oder long-Format folgendes:

	Wilcoxon signed rank test with continuity correction

data:  data$t0 and data$t10
V = 0, p-value = 0.0003167
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
 -11.99996  -5.99993
sample estimates:
(pseudo)median 
     -8.000056 

Hier ist v.a. der p-Wert von Interesse. Er ist mit 0,0003167 sehr klein und liegt deutlich unter der typischen Verwerfungsgrenze von 0,05. Die Nullhypothese einer Gleichheit der Werte zu den beiden Zeitpunkten kann also verworfen werden. Somit ist die ohnehin schon beobachtete Ungleichheit sehr wahrscheinlich nicht zufällig und das Training hat für eine höhere Leistungsfähigkeit gesorgt.

Achtung: Wenn bereits eine Wirkungsvermutung vor dem Test existiert – die plausible Annahme, dass ein 10-wöchiges Kardiotraining den Ruhepuls senkt, wäre so eine – dann würde man, wie oben schon geschrieben, einseitig testen. Hierzu darf alternative = less geschrieben werden oder alternativ die Asymptotische bzw. Exakte Signifikanz halbiert werden und erneut mit 0,05 verglichen werden. Dass dies passiert ist, sieht man auch am Output. 

 


	Wilcoxon signed rank test with continuity correction

data:  data$t0 and data$t10
V = 0, p-value = 0.0001584
alternative hypothesis: true location shift is less than 0
95 percent confidence interval:
      -Inf -6.000026
sample estimates:
(pseudo)median 
     -8.000056 

 

Ermittlung der Effektstärke des Wilcoxon-Tests

Für die Effektstärkenbeurteilung gibt es keinen Goldstandard, es hat sich aber etabliert den sog. r-Wert zu berichten (Rosenthal, Robert, Rubin (2003). Es existieren meines Wissens nach keine Funktionen zur Effektstärkenberechnung im wide-Format. Demzufolge ist eine Umwandlung in das long-Format vorzunehmen. Hierzu ist das Paket tidyr notwendig und die Funktion gather. Als erstes wird die Datenquelle übergeben (hier: Dataframe mit dem Namen data), dann die Zeitpunktvariable (t), die Variable, welche den Wert enthält (v) sowie mit t0:t10 als Angabe, wie viele Messwerte existieren, die der Zeitpunktvariable jeweils zugeordnet werden.

library(tidyr)
data_long <- gather(data, t, v, t0:t10)
wilcoxonPairedR(x = data_long$v, g = data_long$t)
Mit der wilcoxonPairedR()-Funktion wird letztlich der r-Wert berechnet.

Im Beispiel erhalte ich einen r-Wert von -0,878 . Effektstärken sind immer positiv, somit ist 0,878 einzuordnen. Laut Cohen: Statistical Power Analysis for the Behavioral Sciences (1988), S. 79-81 sind die Effektgrenzen ab 0,1 (schwach), ab 0,3 (mittel) und ab 0,5 (stark).

Im vorliegenden Beispiel ist die Effektstärke mit 0,878 stark. Es handelt sich also um einen starken Effekt hinsichtlich des Unterschiedes des Ruhepulses vor und nach dem 10-wöchigen Training.  

Literatur

Rosenthal, Robert, and Donald B. Rubin (2003). r(equivalent): A simple effect size indicator. Psychological Methods 8, no. 4: 492-496. Benesch, T. (2012). Schlüsselkonzepte zur Statistik: Die wichtigsten Methoden, Verteilungen, Tests anschaulich erklärt. Springer Spektrum. Harris, T., & Hardin, J. W. (2013). Exact Wilcoxon Signed-Rank and Wilcoxon Mann–Whitney Ranksum Tests. The Stata Journal, 13(2), 337–343. Dalgaard, P. (2008). Introductory statistics with R. Milton Keynes UK: Lightning Source UK Ltd.

Weitere nützliche Tutorials findest du auf meinem YouTube-Kanal.

 

Hat dir der Beitrag geholfen?

Dann würde ich mich über eine kleine Spende freuen, die es mir erlaubt, weiterhin kostenfreie Inhalte zu veröffentlichen.

Vielen Dank und viel Erfolg!

Über mich

Björn Walther

Excel- und SPSS-Experte

YouTube-Kanal

Excel Online-Kurs

YouTube-Kanal