Test de Kruskal-Wallis

en langage python

ou : comment identifier si au moins une catégorie diffère des autres

L'essentiel de cette page

Le test de Kruskal-Wallis est un test robuste non paramétrique. Pas besoin de conditions préalables pour l'appliquer. Il permet de savoir, pour une variable pour laquelle on dispose de plusieurs catégories, si au moins une catégorie diffère.

Comme il s'applique à la médiane, il peut passer en force même si les valeurs ne se répartissent pas selon la loi normale.

1- Appliquer un Kruskal pour 2 catégories

Cette approche n'est pas recommandée. Si l'on a que 2 catégories, autant faire un test de Wilcoxon.

import seaborn as sns

# Charger le jeu de données iris

iris = sns.load_dataset('iris')

print(iris.columns.values)

from scipy import stats

x = iris.sepal_length[iris.species=="setosa"]

y = iris.sepal_length[iris.species=="virginica"]

kstat, pval = stats.kruskal(x, y)

print(pval) # Si pval petit (au moins inférieure à 0.05, alors on peut parler de différence significative

2- Appliquer un Kruskal pour n catégories en partant d'une variable numérique et d'une variable catégorielle (approche classique)

import seaborn as sns

# Charger le jeu de données iris

iris = sns.load_dataset('iris')

print(iris.columns.values)

from scipy import stats

# Faire le test

kstat, pval = scipy.stats.kruskal(*[group["sepal_length"].values for name, group in iris.groupby("species")])

# Récupérer la p-value

print(pval) # Si pval petit (au moins inférieure à 0.05, alors on peut parler de différence significative)

Dans cet exemple, la p-value est très basse, on peut donc supposer qu'au moins une des 3 espèces d'iris diffère des autres pour la tailles des sépales.