Kruskal-Wallis-Test in R rechnen

von | Aug 17, 2020 | Mittelwertvergleich, R

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.

 

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
Dieses Video ansehen auf YouTube.

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

 

Durchführung des Kruskal-Wallis-Test in R

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.  

 

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.  

 

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 der selben 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.  

 

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.

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.  

 

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

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