Test di Kruskal-Wallis

Questo metodo è il corrispondente non parametrico dell'ANOVA

Il test di Mann-Whitney è utile per verificare che i due gruppi provengano da una stessa popolazione. Quando i k gruppi sono più di due il metodo non parametrico per verificare l’uguaglianza delle mediane prende il nome dai suoi autori William Kruskal e W. Allen Wallis. Questo metodo è il corrispondente non parametrico dell’analisi di varianza (ANOVA) in cui i dati sono sostituiti dal loro rango, ed è solitamente usato quando non può essere assunta una distribuzione normale della popolazione. Il test di Kruskal-Wallis utilizzato per due campioni è equivalente al test di Mann-Whitney.

Ipotesi nulla

L’ipotesi nulla del test di Kruskal-Wallis è che i ranghi medi dei gruppi sono uguali. Il valore atteso del rango medio dipende solo dal numero totale di osservazioni (per n osservazioni, il valore atteso del rango medio in ciascun gruppo è (n + 1) / 2). Ciò equivale che i k campioni provengono dalla stessa popolazione. Spesso l’ipotesi nulla del test di Kruskal-Wallis è riportata come uguaglianza delle mediane nei diversi gruppi, ma ciò è vero solo se si assume che la forma della distribuzione in ciascun gruppo è la stessa. Se le distribuzioni sono differenti, attraverso il test di Kruskal-Wallis si può rifiutare l’ipotesi nulla anche se le mediane sono uguali[1].

Per approfondimenti —> Statistica Medica: metodi non parametrici

libro statistica medica

Assunti

  • Campioni indipendenti
  • Livello di misurazione almeno ordinale
  • Anche se il test di Kruskal-Wallis non richiede che i dati siano distribuiti normalmente, assume che i diversi gruppi abbiano la stessa Quindi rispetto alle tre assunzioni dell’ANOVA di indipendenza delle osservazioni, normalità della distribuzione delle popolazioni di partenza e omogeneità delle varianze (omoschedasticità) non è richiesta solo la normalità. Se l’omoschedasticità è violata, il test di Kruskal-Wallis non produce risultati migliori del test ANOVA classica.

Applicazione del test:

I dati vengono trasformati in ranghi, non considerando il gruppo di appartenenza, usando il seguente criterio:

  • rango 1 all’osservazione più piccola
  • rango N all’osservazione più grande (dove N è il numero totale di osservazioni)

In caso di pareggio si assegna il rango medio fra quelli che le osservazioni avrebbero avuto se non ci fossero stati pareggi. I ranghi corrispondenti vengono poi ricollocati nel gruppo corrispondente e si calcola la statistica test:

Dove:

  • nk è il numero di osservazioni all’interno del gruppo k
  • rij è il rango dell’osservazione j all’interno del gruppo i
  • N è il numero totale di osservazioni in tutti i gruppi

Si noti che  e  sono rispettivamente media e varianza di una variabile casuale uniforme definita dai primi N interi, quindi possiamo vedere la statistica scrivere la statistica test come:

A questo punto è facile verificare la somiglianza di H con la distribuzione χ2 che ottenuta dalla somma dei quadrati di variabili aleatorie indipendenti normalizzate.

Infatti il p-value per il test di Kruskal-Wallis, con ni sufficientemente grandi, può essere ottenuto con 2k-1 > H). Se i campioni non hanno una numerosità sufficientemente elevata allora la distribuzione di H è tabulata.

Il test di Kruskal-Wallis con R

Supponiamo di avere tre gruppi, vogliamo sapere se ci sono differenze significative per i valori della variabile:

Gruppo A: 10, 15, 18, 17, 13
Gruppo B: 22, 21, 15, 34, 43
Gruppo C: 23, 24, 33, 17, 29

a = c(10, 15, 18, 17, 13)
b = c(22, 21, 15, 34, 43)
c = c(23, 24, 33, 17, 29)

dati = list(g1=a, g2=b, g3=c)

ora possiamo applicare la funzione kruskal.test() :

kruskal.test(dati)

Kruskal-Wallis rank sum test

data: dati
Kruskal-Wallis chi-squared = 6.6588, df = 2,
p-value = 0.03581

Il p-value è inferiore a 0.05 quindi c’è evidenza che i gruppi presentano differenze significative.

Se invece abbiamo un dataframe come il seguente:

head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
…..

Per effettuare il test di Kruskal-Wallis con R, richiamiamo la funzione kruskal.test() mettendo il nome della variabile oggetto di studio seguita dal simbolo ~ e dalla variabile per cui si vuole stratificare (se ci sono in memoria più dataframe, specificare quello desiderato).

kruskal.test(Ozone ~ Month, data = airquality)

        KruskalWallis rank sum test

data:  Ozone by Month
KruskalWallis chisquared = 29.267, df = 4, pvalue = 6.901e06

[1] McDonald, John H. Handbook of biological statistics. Vol. 2. Baltimore, MD: Sparky House Publishing, 2009.

Per approfondimenti —> Statistica Medica: metodi non parametrici

libro statistica medica

 

Rispondi