Kruskal-Wallis-Test in R rechnen

von | Okt 14, 2022 | Mittelwertvergleich, R

1 Ziel des Kruskal-Wallist-Tests

Der Kruskal-Wallist-Test prüft drei oder mehr unabhängige Stichproben auf unterschiedliche Mittelwerte. Oder genauer gesagt, dass die Stichproben der gleichen Grundgesamtheit entstammen. Er ist die nicht-parametrische Alternative zur einfaktoriellen ANOVA. Die Nullhypothese des Kruskal-Wallis-Test lautet, dass keine Mittelwertunterschiede (hinsichtlich der Testvariable) existieren bzw. alle Gruppen der gleichen Grundgesamtheit angehören. Demzufolge lautet die Alternativhypothese, dass zwischen den Gruppen Unterschiede existieren. Es ist das Ziel, die Nullhypothese zu verwerfen und die Alternativhypothese anzunehmen. Den Kruskal-Wallis-Test in R kann man mit wenigen Zeilen Code durchgeführt werden. Es gibt auch ein Tutorial in SPSS.

 

2 Voraussetzungen des Kruskal-Wallis-Tests

Es gibt nur zwei zu beachtende Voraussetzungen des Kruskal-Wallis-Tests:

  • mehr als zwei voneinander unabhängige Stichproben/Gruppen
  • mindestens ordinal skalierte y-Variable

 

3 Durchführung des Kruskal-Wallis-Test in R

3.1 Das Beispiel

Im Beispiel prüfe ich drei voneinander unabhängige Trainingsgruppen (wenig, durchschnittlich und stark trainiert) auf deren mittleren Ruhepuls. Ich vermute dahingehend Unterschiede, dass Probanden der verschiedenen Trainingsgruppen im Mittel unterschiedliche Ruhepulse haben. Das kann man auch gerichtet formulieren: Probanden aus den stärker im Training stehenden Gruppen haben im Mittel einen geringeren Ruhepuls. Der Kruskal-Wallis-Test vermag aber nicht einseitig zu testen, da dies nur bei genau 2 Gruppen (z.B. Mann-Whitney-U-Test) funktioniert.  

 

3.2 Deskriptive Voranalyse

Nach dem Einlesen der Daten kann direkt ein deskriptiver Vergleich durcheführt werden. Dieser ist im Rahmen des Kruskal-Wallis-Tests nicht zwingend notwendig hilft aber beim Schreiben der Ergebnisse. Hierzu nutze ich das sog. “psych”-Paket, was ich mit “install.packages” installiere und mit library(psych) lade. Dann lasse ich mir die deskriptiven Statistiken ausgeben. Das Format ist describeBy(Testvariable, Gruppenvariable).


install.packages("psych")
library(psych)
describeBy(data$Ruhepuls,data$Trainingsgruppe)

Hier erhält man folgenden Output:


Descriptive statistics by group
group: 0
vars n mean  sd   median trimmed mad   min max range skew  kurtosis se
1   13 68    9.6  69     68.64   10.38 50  79  29    -0.42 -1.26    2.66
------------------------------------------------------------------------------
group: 1
vars n mean  sd   median trimmed mad   min max range skew  kurtosis se
1   13 61    9.82 58     60.64   10.38 48  78  30    0.51  -1.17    2.72
------------------------------------------------------------------------------
group: 2
vars n mean  sd   median trimmed mad   min max range skew  kurtosis se
1   13 52.85 9.74 52     52.36   13.34 40 71   31    0.28  -1.21    2.7

 

Hier wird bereits deutlich, dass sich die mit fett markierten Mittelwerte über die Gruppen hinweg unterscheiden. Zwar vergleicht der Kruskal-Wallis-Test keine Mittelwerte an sich, sondern nutzt Ränge, aber dennoch ist es ein guter Anhaltspunkt. Die am wenigsten trainierte Gruppe hat einen mittleren Ruhepuls von 68, die durchschnittlich trainierte Gruppe von 61 und die stark trainierte Gruppe von 52,85.  

 

3.3 Kruskal-Wallis-Test rechnen und interpretieren

Hierzu wird die kruskal.test()-Funktion verwendet:


kruskal.test(data$Ruhepuls~data$Trainingsgruppe)

 

Nach der Ausführung dieser kleinen Codezeile erhält man den interpretierbaren Output:


Kruskal-Wallis rank sum test
data: data$Ruhepuls by data$Trainingsgruppe
Kruskal-Wallis chi-squared = 11.007, df = 2, p-value = 0.004073

 

Hier ist eigentlich nur ein Wert wirklich interessant: der p-Wert findet sich unter Pr(>F) und ist hier 0,004073. Das ist deutlich kleiner als 0,05 und somit kann die Nullhypothese von Gleichheit der Mittelwerte über die Gruppen hinweg verworfen werden bzw. der Ursprung der Gruppen aus derselben Grundgesamtheit kann verworfen werden. Das berichtet man mit Chi² = 11,007, p < 0,001.

Die entscheidende Frage ist nun, zwischen welchen der drei Trainingsgruppen ein Unterschied existiert. Es ist denkbar, dass nur zwischen zwei Gruppen ein Unterschied existiert oder zwischen allen 3. Hierzu braucht es eine post-hoc-Analyse.  

 

3.4 Post-hoc-Analyse: paarweise Gruppenvergleiche

Diese führt man mittels paarweisen Wilcoxon-Tests (“pairwise.wilcox.test()“) durch. Allerdings muss hierbei der p-Wert angepasst werden, da das mehrfache Testen auf dieselbe Stichprobe zu einem erhöhten Alphafehler führt. Dies hat wiederum zur Folge, dass die Wahrscheinlichkeit einen Fehler 1. Art zu begehen steigt. Ultimativ könnte das dazu führen, dass man die Nullhypothese fälschlicherweise ablehnt, also Unterschiede unterstellt, die nicht existieren. Aber keine Angst, R hat eine eingebaute Funktion namens p.adjust().

Es gibt für p.adjust() verschiedene Argumente, zumeist wählt man die konservativste “bonferroni”. Wird kein Argument übergeben, wird nach der etwas weniger strengen Holm-Methode korrigiert. Weitere Informationen zur Adjustierung des p-Wertes gibt es hier. Der Code zum paarweisen Vergleich sowie dem Anpassen des p-Wertes ist folgender:


pairwise.wilcox.test(data$Ruhepuls,data$Trainingsgruppe, p.adjust="bonferroni")

Als Ergebnis erhält man eine kleine Übersichtstabelle, die nur p-Werte enthält. Diese sind adjustiert nach Bonferroni, wie am letzten Argument der letzten Zeile zu erkennen ist.
Sollten Bindungen (=gleiche Ränge bzw. Werte) existieren, kann die Berechnung der exakten Signifikanz nicht vorgenommen werden. Mit dem Argument “exact = FALSE” kann die approximative Signifikanz angefordert werden. Bei Stichprobengrößen über 50 kann diese bedenkenlos gewählt werden. Lediglich bei kleinen Stichprobengrößen (< 30) sollte die exakte Signifikanz angefordert werden.


Pairwise comparisons using Wilcoxon rank sum test
data: data$Ruhepuls and data$Trainingsgruppe
  0       1
1 0.3003  -
2 0.0052  0.1824
P value adjustment method: bonferroni

 

In der obigen Tabelle kann man folgendes erkennen:

  • Der Unterschied zwischen der Gruppe 0 und der Gruppe 1 weist eine adjustierte Signifikanz von p = 0,3003 aus. Für diese beiden Gruppen kann die Nullhypothese keines Unterschiedes demzufolge nicht abgelehnt werden.
  • Für den Unterschied zwischen Gruppe 1 und Gruppe 2 ist die adjustierte Signifikanz p = 0,1824. Auch hier kann die Nullhypothese keines Unterschiedes nicht verworfen werden.
  • Für den Unterschied zwischen Gruppe 0 und Gruppe 2 ist allerdings eine adjustierte Signifikanz von p = 0,0052 zu erkennen. Die Nullhypothese keines Unterschiedes wird zugunsten der Alternativhypothese eines Unterschiedes verworfen. Der Unterschied ist statistisch signifikant.

Im Ergebnis kann festgehalten werden, dass nur zwischen Gruppe 0 (wenig trainiert) und Gruppe 2 (stark trainiert) ein statistisch signifikanter Unterschied hinsichtlich des Ruhepulses existiert. Kontrolliert für die Mehrfachtestung unterscheiden nur sie sich statistisch signifikant voneinander.  

 

3.5 Effektstärke des Kruskal-Wallis-Test

Die Effektstärke Eta² wird von R nicht mit ausgegeben. Eta² ist Teil von f (siehe unten) gibt an, wie stark der gefundene statistisch signifikante Effekt des Kruskal-Wallis-Test ist. Die Formel für Eta² lautet:

    \[  Eta^2 = (H - k + 1) / (n - k) \]

mit H als Chi²-Teststatistik,

k (Anzahl Gruppen) und n (Anzahl Gesamtbeobachtungen). Ohne jetzt über eine komplizierte Formel gehen zu müssen, kann man direkt die Werte von oben einsetzen.


eta_squared <- (11.007 - 3 + 1)/(39 - 3)
eta_squared
Im Ergebnis erhält man hier einen Wert von Eta² = 0,2501944. Diesen Wert muss man schließlich noch mal in folgende Formel einsetzen

    \[  f = \sqrt{\frac{\eta^2}{1-\eta^2}} \]

Das funktioniert ebenfalls mit einfacher Arithmetik in R.

sqrt(0.2501944/(1-0.2501944))
0.5776496
Der f-Wert für den Kruskal-Wallis-Test ist 0,5776496

Cohen: Statistical Power Analysis for the Behavioral Sciences (1988), S. 284-287 hilft hier bei der Einordnung.

  • Ab 0,1 ist es ein schwacher Effekt,
  • ab 0,25 ein mittlerer und
  • ab 0,4 ein starker Effekt.

Demzufolge ist der mit dem Kruskal-Wallis-Test beobachtete Unterschied ein starker Unterschied, da 0,5776496 über der Grenze zum starken Effekt liegt.

Die Effektstärke des Kruskal-Wallis-Test wird selten berichtet, da die paarweisen Vergleiche/Unterschiede interessanter sind.

 

3.6 Effektstärke der paarweisen Vergleiche

Wie eben beschrieben ist die Effektstärke des Kruskal-Wallis-Tests weniger interessant. Die paarweisen Vergleiche und deren Effektstärke sollten im Fokus stehen, um signifikante Unterschiede zwischen jene einordnen zu können.
Hierzu gibt es keine einfache Funktion in R. Vielmehr wird mit dem Konzept des Piping gearbeitet, welches mit dem dplyr-Paket zur Anwendung kommt. Gleichzeitig braucht es das rstatix-Paket zur Verwendung der wilcox_effsize()-Funktion:

library(dplyr)
library(rstatix)
data %>%
wilcox_effsize(Ruhepuls~Trainingsgruppe) %>%
  as.data.frame()
Dies führt im Ergebnis zu folgendem Output:

       .y.   group1  group2    effsize n1 n2 magnitude
1 Ruhepuls        2       1  0.3727555 13 13  moderate
2 Ruhepuls        2       0  0.6190494 13 13     large
3 Ruhepuls        1       0  0.3275328 13 13  moderate
Hier sehen wir die Effektstärken in der Spalte “effsize” für alle drei paarweisen Vergleiche. Da wir nur für den Vergleich zwischen Gruppe 2 und 0 (Gut trainiert vs. untrainiert) eine Signifikanz in den post-hoc-Tests haben, sollte auch nur hier die Effektstärke abgelesen werden. Sie beträgt r = 0.619. Die anderen beiden Effektstärken sollten aufgrund der Nichtsignifikanz des Unterschiedes nicht interpretiert werden – es gibt Fachdisziplinen die hier aber dennoch ein Reporting wünschen.
In der Spalte “magnitude” wird die Größe des Effektes eingeordnet. r = 0.619 wird als großer Effekt eingeordnet.

 

Dies erfolgt auf Basis von Cohen (1992): A Power Primer, S. 157:
  • Ab 0,1 ist es ein schwacher Effekt,
  • ab 0,3 ein mittlerer und
  • ab 0,5 ein starker Effekt.

 

4 Videotutorial

 

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.
Alternativ kannst du über meinen Amazon Affiliate-Link einkaufen – ohne Zusatzkosten.

Vielen Dank und viel Erfolg!

Über mich

Björn Walther

Excel- und SPSS-Experte

YouTube-Kanal

Excel Online-Kurs

YouTube-Kanal