Weiter zum Inhalt

Kruskal-Wallis-Test: Mehrere Gruppen ohne Normalverteilung vergleichen

Ein praktischer Leitfaden zum Kruskal-Wallis-Test – was er ist, wie er funktioniert, wann er ANOVA ersetzt und wie du ihn in Python und R durchführst und interpretierst.
Aktualisiert 4. Mai 2026  · 9 Min. lesen

Mehrere Gruppen zu vergleichen, ist simpel, wenn deine Daten normalverteilt sind. Das Problem: Die meisten Real-World-Daten sind es nicht.

Wenn ANOVA dein Standardtest ist, landest du schnell bei falschen Schlüssen, denn er setzt Normalverteilung voraus. Fehlt sie – etwa bei schiefen Verteilungen oder kleinen Stichproben – brauchst du einen anderen Ansatz.

Der Kruskal-Wallis-Test ist genau dieser Ansatz. Er ist die nichtparametrische Alternative zu ANOVA und arbeitet mit Rängen statt mit Rohwerten – eine Normalverteilung ist daher keine Voraussetzung.

In diesem Artikel zeige ich dir das Konzept, die dahinterstehende Mathematik, die Umsetzung in Python und R sowie die Interpretation der Ergebnisse.

Was ist der Kruskal-Wallis-Test?

Der Kruskal-Wallis-Test ist ein nichtparametrisches Verfahren zum Vergleich von drei oder mehr unabhängigen Gruppen. Er wandelt alle Beobachtungen in Ränge um und vergleicht diese Rangfolgen zwischen den Gruppen, statt mit Rohwerten zu arbeiten.

Du kannst ihn dir als Erweiterung des Mann-Whitney-U-Tests vorstellen, über den ich ebenfalls geschrieben habe.

Der Mann-Whitney-U-Test macht denselben rangbasierten Vergleich, aber nur für zwei Gruppen. Der Kruskal-Wallis-Test skaliert auf drei oder mehr Gruppen. Wenn du also mehrere Gruppen hast und ANOVA nicht in Frage kommt, ist er die richtige Wahl.

Weil er mit Rängen statt mit Rohwerten arbeitet, setzt er keine bestimmte Verteilung voraus. Das macht ihn in der Praxis so hilfreich – reale Daten folgen selten perfekt einer bestimmten Verteilungsform.

Wann setzt du den Kruskal-Wallis-Test ein?

Der Kruskal-Wallis-Test passt ideal, wenn du es mit Folgendem zu tun hast:

  • Drei oder mehr unabhängige Gruppen, die du vergleichen willst
  • Ordinale oder kontinuierliche Daten, z. B. Likert-Skalen oder Messwerte
  • Nicht-normalverteilte Daten durch Schiefe, Ausreißer, kleine Stichproben – alles, womit ANOVA schlecht zurechtkommt
  • Kleine Stichproben, bei denen Normalität schwer zu prüfen ist

Hier ein einfaches Beispiel.

Stell dir vor, du möchtest Prüfungsergebnisse über drei verschiedene Klassen hinweg vergleichen. Die Werte sind schief verteilt und die Stichproben klein – ANOVA fällt damit aus. Der Kruskal-Wallis-Test braucht keine Normalität und funktioniert hier. Er sagt dir, ob sich mindestens eine Klasse von den anderen unterscheidet – ohne Annahmen, die deine Daten nicht erfüllen.

Kruskal-Wallis-Test vs. ANOVA

Beide Tests vergleichen Gruppen, gehen aber unterschiedlich vor.

ANOVA vergleicht Gruppen-mittelwerte und setzt Normalverteilung sowie ungefähr gleiche Varianzen voraus. Sind diese Annahmen erfüllt, ist ANOVA die bessere Wahl – statistisch stärker und leichter zu interpretieren.

Der Kruskal-Wallis-Test vergleicht Gruppen-verteilungen über Ränge. Er ist unempfindlich gegenüber Normalität und gleichen Varianzen. Das macht ihn flexibler, kostet aber etwas Teststärke.

Hier ein schneller Vergleich in der Übersicht:

ANOVA im Vergleich zum Kruskal-Wallis-Test

ANOVA im Vergleich zum Kruskal-Wallis-Test

Sind deine Daten normalverteilt, nutze ANOVA. Wenn nicht – oder wenn du es nicht prüfen kannst – nutze Kruskal-Wallis.

Formel des Kruskal-Wallis-Tests

Der Kruskal-Wallis-Test führt auf eine einzelne Teststatistik H hinaus. Hier ist die Formel:

Kruskal-Wallis-Formel

Kruskal-Wallis-Formel

Das bedeuten die Komponenten:

  • N – Gesamtzahl der Beobachtungen über alle Gruppen

  • k – Anzahl der Gruppen

  • n_i – Anzahl der Beobachtungen in Gruppe i

  • R_i – Summe der Ränge, die Gruppe i zugeordnet sind

Die Formel misst, wie stark sich die Rangsummen der Gruppen von dem unterscheiden, was man erwarten würde, wenn alle Gruppen identisch wären. Ein großes H bedeutet, die Gruppen unterscheiden sich; ein kleines H spricht für ähnliche Gruppen.

Sobald du H berechnet hast, vergleichst du es mit einer Chi-Quadrat-Verteilung mit k - 1 Freiheitsgraden, um den p-Wert zu erhalten.

So funktioniert der Kruskal-Wallis-Test

Für den Kruskal-Wallis-Test brauchst du vier Schritte:

  1. Alle Gruppen zusammenführen: Nimm alle Beobachtungen aus allen Gruppen in einen gemeinsamen Datensatz auf
  2. Alle Beobachtungen rängen: Sortiere die kombinierten Daten von klein nach groß und vergib Ränge. Der kleinste Wert erhält Rang 1, der nächste Rang 2 usw. Bei gleichen Werten teilen sie sich den Durchschnitt der entsprechenden Ränge.
  3. Rangsummen berechnen: Teile die Ränge wieder in die ursprünglichen Gruppen auf. Addiere die Ränge je Gruppe. Das sind die Rangsummen – R_i in der Formel
  4. Teststatistik berechnen: Setze die Rangsummen in die H-Formel ein. Sind die Gruppen ähnlich, liegen ihre Rangsummen nah beieinander und H ist klein. Erhält eine Gruppe systematisch höhere oder niedrigere Ränge, wird H größer

Und das war’s!

Du siehst: Der Test betrachtet nicht die eigentlichen Werte, sondern nur ihre relative Position.

Kruskal-Wallis-Test in Python

Pythons scipy-Bibliothek bringt eine fertige Funktion für den Kruskal-Wallis-Test mit – du musst die Formel nicht selbst implementieren. Schauen wir uns ein Beispiel an.

Angenommen, du vergleichst Prüfungsergebnisse aus drei Klassen. So führst du den Test aus:

from scipy import stats

# Exam scores
class_a = [78, 85, 90, 72, 88]
class_b = [65, 70, 68, 74, 60]
class_c = [88, 92, 95, 85, 91]

# Run the test
statistic, p_value = stats.kruskal(class_a, class_b, class_c)

print(f"H statistic: {statistic:.4f}")
print(f"P-value: {p_value:.4f}")

Python-Ausgabe

Python-Ausgabe

Der p-Wert liegt unter 0,05. Das heißt, mindestens eine Klasse unterscheidet sich von den anderen. Beachte: Der Test sagt dir nicht, welche – dafür brauchst du einen Post-hoc-Test, den ich im nächsten Abschnitt vorstelle.

Kruskal-Wallis-Test in R

Wie in Python gibt es auch in R eine eingebaute Funktion. Wir bleiben beim Beispiel mit den Prüfungsergebnissen.

# Exam scores
class_a <- c(78, 85, 90, 72, 88)
class_b <- c(65, 70, 68, 74, 60)
class_c <- c(88, 92, 95, 85, 91)

# Combine
scores <- c(class_a, class_b, class_c)
groups <- factor(rep(c("A", "B", "C"), each = 5))

# Run the test
kruskal.test(scores ~ groups)

R-Ausgabe

R-Ausgabe

Das Ergebnis entspricht dem in Python – gleiche H-Statistik, gleicher p-Wert. Bei p < 0,05 verwerfist du die Nullhypothese und folgerst, dass sich mindestens eine Gruppe unterscheidet.

So interpretierst du Kruskal-Wallis-Ergebnisse

Die Nullhypothese des Kruskal-Wallis-Tests lautet: Alle Gruppen haben die gleiche Verteilung. Der p-Wert zeigt dir, ob du sie verwerfen solltest. So liest du ihn:

  • p < 0,05: Mindestens eine Gruppe unterscheidet sich – Nullhypothese verwerfen
  • p ≥ 0,05: Kein starker Hinweis auf Unterschiede – Nullhypothese nicht verwerfen

Die 0,05-Schwelle ist Konvention. Je nach Fachgebiet oder Tragweite der Analyse kannst du strenger (0,01) oder großzügiger (0,10) wählen.

Beachte: Der Test sagt nicht, welche Gruppe sich unterscheidet. Ein signifikanter Befund heißt nur, dass nicht alle Gruppen gleich sind. Um herauszufinden, welche Paare den Unterschied treiben, brauchst du einen Post-hoc-Test.

Post-hoc-Tests nach Kruskal-Wallis

Der Test zeigt dir, dass mindestens eine Gruppe abweicht, aber nicht welche. Bei drei Gruppen und p < 0,05 kann es A gegen B, A gegen C, B gegen C oder eine Kombination sein. Für diese Paarvergleiche brauchst du einen Post-hoc-Test.

Dunns Test ist die gängigste Wahl. Er führt paarweise Vergleiche für alle Gruppen durch und passt die p-Werte für multiple Tests an – ohne Anpassung steigt die Gefahr von Fehlalarmen. Je mehr Vergleiche du ziehst, desto höher das Risiko, zufällig ein „signifikantes" Ergebnis zu finden.

Dunns Test in Python

Dafür brauchst du die Bibliothek scikit_posthocs. Falls nicht vorhanden, installiere sie mit pip install scikit-posthocs.

Die Berechnung ist dann einfach:

import scikit_posthocs as sp
import pandas as pd

# Same exam scores as before
class_a = [78, 85, 90, 72, 88]
class_b = [65, 70, 68, 74, 60]
class_c = [88, 92, 95, 85, 91]

# Combine
scores = class_a + class_b + class_c
groups = ["A"] * 5 + ["B"] * 5 + ["C"] * 5

df = pd.DataFrame({"score": scores, "group": groups})

# Run the test
result = sp.posthoc_dunn(df, val_col="score", group_col="group", p_adjust="bonferroni")
print(result)

Dunn-Test in Python

Dunn-Test in Python

Jede Zelle zeigt den angepassten p-Wert für das jeweilige Paar. Hier überschreitet nur B gegen C (p = 0,004) die 0,05-Schwelle, diese beiden Gruppen unterscheiden sich also. A gegen B (p = 0,167) und A gegen C (p = 0,607) nicht – Klasse A unterscheidet sich statistisch nicht von den beiden anderen.

Dunns Test in R

Installiere bei Bedarf zunächst das Paket mit dem Befehl install.packages("dunn.test"):

library(dunn.test)

# Same exam scores as before
class_a <- c(78, 85, 90, 72, 88)
class_b <- c(65, 70, 68, 74, 60)
class_c <- c(88, 92, 95, 85, 91)

scores <- c(class_a, class_b, class_c)
groups <- factor(rep(c("A", "B", "C"), each = 5))

# Run the test
dunn.test(scores, groups, method = "bonferroni")

Dunn-Test in R

Dunn-Test in R

Die Ergebnisse decken sich – wie zu erwarten – mit Python. Nur B gegen C ist signifikant, A gegen B und A gegen C nicht. Klasse B und Klasse C treiben den vom Kruskal-Wallis-Test gefundenen Unterschied.

Annahmen des Kruskal-Wallis-Tests

Der Kruskal-Wallis-Test ist flexibler als ANOVA, hat aber drei Voraussetzungen, die du vorab prüfen solltest:

  • Unabhängige Stichproben: Beobachtungen in einer Gruppe beeinflussen nicht die in einer anderen. Bei gepaarten Daten oder Messwiederholungen ist dieser Test ungeeignet
  • Ordinale oder kontinuierliche Daten: Der Test braucht Daten, die sich rängen lassen. Nominale Kategorien (z. B. Farben, Labels) sind ungeeignet
  • Ähnliche Verteilungsformen: Willst du die Ergebnisse als Medianvergleich deuten (statt als Verteilungsvergleich), sollten die Gruppen ähnlich geformte Verteilungen haben. Bei stark unterschiedlichen Formen bleibt der Verteilungsvergleich möglich, aber die Median-Interpretation nicht

Wenn du die ersten beiden Annahmen verletzt, sind die Testergebnisse nicht valide. Die dritte ist weicher – sie betrifft die Interpretation, nicht die Durchführbarkeit.

Wann du den Kruskal-Wallis-Test nicht verwenden solltest

Drei Fälle sprechen für ein anderes Verfahren:

  • Gepaartes Design oder Messwiederholungen: Wenn dieselben Probanden in mehreren Gruppen auftreten, nutze stattdessen den Friedman-Test. Er ist das nichtparametrische Pendant für abhängige Stichproben. Kruskal-Wallis auf gepaarten Daten ignoriert Zusammenhänge und führt zu falschen Schlüssen
  • ANOVA-Annahmen sind erfüllt: Sind deine Daten normalverteilt und die Varianzen ähnlich, ist ANOVA die bessere Wahl. Sie hat mehr Teststärke und erkennt echte Unterschiede zuverlässiger
  • Sehr große Stichproben: Bei großen Stichproben funktionieren parametrische Methoden oft gut, auch ohne perfekte Normalität. Das Gesetz der großen Zahlen wirkt, und ANOVA liefert verlässlichere Ergebnisse als der rangbasierte Ansatz. Arbeitest du mit Hunderten oder Tausenden Beobachtungen pro Gruppe, ist Kruskal-Wallis nicht das passende Werkzeug

Fazit

Der Kruskal-Wallis-Test vergleicht drei oder mehr unabhängige Gruppen, wenn deine Daten nicht der Normalverteilung folgen, die Tests wie ANOVA verlangen. Das gelingt, weil er mit Rängen statt mit Rohwerten arbeitet.

Er ist jedoch kein Ersatz für ANOVA. Wenn deine Daten normalverteilt sind, ist ANOVA wegen höherer Teststärke im Vorteil. Sind deine Daten gepaart, nutze den Friedman-Test. Wie immer hängt die richtige Wahl von deinen Daten ab.

Sind die Voraussetzungen erfüllt, ist der Kruskal-Wallis-Test eine zuverlässige, unkomplizierte Wahl. Führe ihn aus, prüfe den p-Wert und hänge bei Bedarf Dunns Test an, um die Gruppen zu identifizieren, die den Unterschied ausmachen.

Deine Statistik ist etwas eingerostet? Mach unseren Introduction to Statistics Kurs und komm in einem Nachmittag wieder rein.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Senior Data Scientist mit Sitz in Kroatien. Top Tech Writer mit über 700 veröffentlichten Artikeln, die mehr als 10 Millionen Mal aufgerufen wurden. Buchautor von Machine Learning Automation with TPOT.

Kruskal-Wallis-Test: Häufige Fragen

Wofür wird der Kruskal-Wallis-Test verwendet?

Der Kruskal-Wallis-Test wird eingesetzt, um drei oder mehr unabhängige Gruppen zu vergleichen, wenn du nicht von einer Normalverteilung deiner Daten ausgehen kannst. Er ist die nichtparametrische Alternative zu ANOVA und arbeitet mit Rängen statt Rohwerten. Besonders hilfreich ist er bei schiefen Verteilungen oder ordinalen Daten.

Was bedeutet ein signifikantes Kruskal-Wallis-Ergebnis?

Ein signifikantes Ergebnis – typischerweise p < 0,05 – bedeutet, dass sich mindestens eine Gruppe von den anderen unterscheidet. Es verrät nicht, welche Gruppen sich unterscheiden, nur dass nicht alle gleich sind. Um herauszufinden, welche Paare den Unterschied ausmachen, brauchst du einen Post-hoc-Test wie Dunns Test.

Was sind die Annahmen des Kruskal-Wallis-Tests?

Der Test setzt unabhängige Stichproben voraus – Beobachtungen in einer Gruppe dürfen die in einer anderen nicht beeinflussen. Deine Daten müssen ordinal oder kontinuierlich sein, also rängbar. Willst du die Ergebnisse als Medianvergleich deuten, sollten die Verteilungsformen der Gruppen zudem ähnlich sein.

Worin unterscheidet sich der Kruskal-Wallis-Test vom Mann-Whitney-U-Test?

Der Mann-Whitney-U-Test vergleicht zwei unabhängige Gruppen, während der Kruskal-Wallis-Test diesen Ansatz auf drei oder mehr Gruppen ausweitet. Beide arbeiten mit Rängen und setzen keine Normalverteilung voraus. Bei genau zwei Gruppen ist Mann-Whitney U richtig – Kruskal-Wallis ist das Pendant für mehrere Gruppen.

Wann solltest du nach Kruskal-Wallis Dunns Test verwenden?

Führe Dunns Test durch, wenn dein Kruskal-Wallis-Ergebnis signifikant ist und du wissen willst, welche konkreten Gruppenpaare sich unterscheiden. Er liefert paarweise Vergleiche zwischen allen Gruppen und passt die p-Werte an, um Fehlalarme zu reduzieren. In Python erledigt das scikit_posthocs.posthoc_dunn(), in R bietet das Paket dunn.test die gleiche Funktionalität.

Themen

Lerne mit DataCamp

Kurs

Einführung in die Statistik in R

4 Std.
129.2K
In diesem Statistik-Einführungskurs lernst du, wie du Daten mit R erfasst, analysierst und in präzise Schlussfolgerungen transformierst.
Details anzeigenRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Matt Crabtree's photo

Matt Crabtree

Tutorial

Python Datenstrukturen Tutorial

Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Wie man Listen in Python aufteilt: Einfache Beispiele und fortgeschrittene Methoden

Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Allan Ouko's photo

Allan Ouko

Tutorial

Python-Lambda-Funktionen: Ein Leitfaden für Anfänger

Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Mark Pedigo's photo

Mark Pedigo

Tutorial

So kürzt man eine Zeichenfolge in Python: Drei verschiedene Methoden

Lerne die Grundlagen zum Entfernen von führenden und nachfolgenden Zeichen aus einer Zeichenfolge in Python.
Adel Nehme's photo

Adel Nehme

Tutorial

Python-Schleifen-Tutorial

Ein umfassendes Einführungs-Tutorial zu Python-Schleifen. Lerne und übe while- und for-Schleifen, verschachtelte Schleifen, die Schlüsselwörter break und continue, die Range-Funktion und vieles mehr!
Satyabrata Pal's photo

Satyabrata Pal

Mehr anzeigenMehr anzeigen