lunedì 6 gennaio 2020

Test parametrici e non parametrici per più campioni indipendenti

Per confrontare due campioni indipendenti [1] è necessario impiegare:
→ un metodo parametrico, il test t di Student, quando i dati sono distribuiti in modo gaussiano;
→ metodi non parametrici, come il test di Wilcoxon per campioni indipendenti (in genere meglio noto come test U di Mann-Whitney) e il test di Kruskall-Wallis, quando i dati non sono distribuiti in modo gaussiano.

Tuttavia per confrontare più di due campioni indipendenti non è corretto applicare un test per due campioni indipendenti ripetitivamente a tutte le diverse possibili coppie di campioni: così, ad esempio, nel caso più semplice, quello di tre campioni, non è corretto confrontare mediante l'ordinario test t di Student (assumendo che si tratti di distribuzioni gaussiane) il primo campione con il secondo campione, il primo campione con il terzo e il secondo campione con il terzo. Questo perché la probabilità di commettere un errore di primo tipo [2], cioè la probabilità di considerare la differenza tra le medie di due campioni significativa quando invece non è significativa (probabilità di un falso positivo), nel caso di confronti multipli viene moltiplicata per il numero di confronti effettuati.

In altre parole un valore del test t di Student che nel caso di due campioni (per i quali un solo confronto è possibile) corrisponde a una probabilità di commettere un errore di primo tipo del 5%:
→ nel caso di tre campioni (essendo 3 il numero di confronti possibili) corrisponde a una probabilità di commettere un errore di primo tipo del 3 x 5% = 15%;
→ nel caso di quattro campioni (essendo 6 il numero di confronti possibili) corrisponde a una probabilità di commettere un errore di primo tipo del 6 x 5% = 30%;
→ nel caso di cinque campioni (essendo 10 il numero di confronti possibili) corrisponde a una probabilità di commettere un errore di primo tipo del 10 x 5% = 50%;
e così via.

Reciprocamente se nel confronto tra due campioni si assume come valore soglia per la significatività il classico p = 0.05 è indispensabile ricordarsi che questo valore:
→ quando si confrontano tre campioni deve essere sostituito con p = 0.017 (cioè 0.05/3);
→ quando si confrontano quattro campioni deve essere sostituito con p = 0.008 (cioè 0.05/6);
→ quando si confrontano cinque campioni deve essere sostituito con p = 0.005 (cioè 0.05/10);
e così via.

Anche se si potrebbe procedere seguendo queste semplici regole, di fatto sono disponibili 
test che, nel caso di confronti multipli, applicano automaticamente le correzioni necessarie per controbilanciare l'aumento dei falsi positivi, cioè l'aumento della probabilità di considerare la differenza tra le medie di due campioni significativa quando invece non è significativa.

I principali test per il confronto tra più di due campioni indipendenti li vediamo ora, applicati ai valori di concentrazione dell'emoglobina nel sangue rilevata in 202 atleti australiani e riportata nella variabile hg della tabella ais inclusa nel pacchetto DAAG. Accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [3].

Copiate lo script che segue, incollatelo nella Console di R e premete ↵ Invio:

# CONFRONTARE TRA DI LORO PIU' CAMPIONI con un metodo parametrico
test t di Student con la correzione di Bonferroni per confronti multipli
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
#
boxplot(hg~sport, data=ais, horizontal=FALSE, notch=FALSE, col="green", las=2, xlab="Sport praticato", ylab="Emoglobina nel sangue (g/dL)") # boxplot della concentrazione di emoglobina per sport praticato
#
pairwise.t.test(ais$hg, ais$sport, p.adjust.method="bonferroni") # test t di Student per campioni indipendenti con la correzione di Bonferroni per confronti multipli
#

Realizziamo un grafico a scatola con i baffi per la concentrazione hg dell'emoglobina nel sangue (espressa in g/dL) aggregando i valori in base allo sport praticato (hg~sport).


Ora, per avere un riscontro quantitativo e oggettivo delle differenze rilevate nel grafico, impiegando la funzione pairwise.t.test() impieghiamo il più classico test parametrico, con la più tradizionale correzione per confronti multipli, il test t di Student con la correzione di Bonferroni (method=”bonferroni”):

       Pairwise comparisons using t tests with pooled SD 

data:  ais$hg and ais$sport 

        B_Ball Field   Gym    Netball Row    Swim   T_400m T_Sprnt Tennis
Field   0.0023 -       -      -       -      -      -      -       -     
Gym     1.0000 0.1012  -      -       -      -      -      -       -     
Netball 0.0050 2.4e-11 1.0000 -       -      -      -      -       -     
Row     1.0000 0.1676  1.0000 6.5e-07 -      -      -      -       -     
Swim    1.0000 1.0000  1.0000 2.3e-06 1.0000 -      -      -       -     
T_400m  1.0000 0.8321  1.0000 2.7e-07 1.0000 1.0000 -      -       -     
T_Sprnt 0.0015 1.0000  0.0606 5.1e-11 0.0928 0.5925 0.4455 -       -     
Tennis  1.0000 0.2188  1.0000 0.0178  1.0000 1.0000 1.0000 0.1213  -     
W_Polo  0.0036 1.0000  0.1078 8.8e-11 0.2180 1.0000 0.9715 1.0000  0.2490

P value adjustment method: bonferroni 

Il test t di Student con la correzione di Bonferroni conferma che le atlete (sono solo donne) che praticano Netball hanno in comune una bassa concentrazione dell'emoglobina, e che la concentrazione media di questo gruppo si discosta significativamente dalle concentrazioni medie dei rimanenti gruppi di atleti, con la sola eccezione (p = 1.0000) del gruppo delle atlete che pratica la ginnastica (Gym). Questo è il dato certamente più rilevante, con poche altre differenze significative che sono evidenziate nella tabella.

Da notare che la funzione pairwise.t.test() prevede le seguenti correzioni alternative meno conservative [4] di quella di Bonferroni: secondo Holm (1979) (method="holm"), Hochberg (1988) (method="hochberg"), Hommel (1988) (method="hommel"), Benjamini & Hochberg (1995) (method="BH" o method="fdr"), Benjamini & Yekutieli (2001) (method="BY"), e method="none" per nessuna correzione (ovviamente sconsigliato).

Vediamo ora alcuni metodi non parametrici, contenuti nel pacchetto PMCMRplus [5], che è necessario scaricare e installare dal CRAN. Copiate lo script che segue, incollatelo nella Console di R e premete ↵ Invio:

# CONFRONTARE TRA DI LORO PIU' CAMPIONI con metodi non parametrici
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
#
boxplot(hg~sport, data=ais, horizontal=FALSE, notch=FALSE, col="green", las=2, xlab="Sport praticato", ylab="Emoglobina nel sangue (g/dL)") # boxplot della concentrazione di emoglobina per sport praticato
#
library(PMCMRplus) # carica il pacchetto
spearmanTest(hg~sport, data=ais) # rho di Spearman (test omnibus, non parametrico)
kwAllPairsConoverTest(hg~sport, data=ais) # test di Conover (non parametrico)
kwAllPairsDunnTest(hg~sport, data=ais) # test di Dunn (non parametrico)
kwAllPairsNemenyiTest(hg~sport, data=ais) # test di Nemenyi (non parametrico)
#

Quelli che qui impieghiamo sono tutti test non parametrici che quindi non prevedono che i dati siano distribuiti in modo gaussiano e che sono eseguiti mediante:
la funzione spearmanTest(), per il test ρ (rho) di Spearman [6],  un test non parametrico che riporta un risultato unico per tutte le coppie di campioni (test omnibus);
la funzione kwAllPairsConoverTest() per il test di Conover, un test non parametrico basato sui ranghi di tipo Kruskal, che riporta un risultato per ogni coppia di campioni;
→ la funzione kwAllPairsDunnTest() per il test di Dunn, un test non parametrico basato sui ranghi di tipo Kruskal, che riporta un risultato per ogni coppia di campioni;
la funzione kwAllPairsNemenyiTest() per il test di Nemenyi, un test non parametrico basato sul confronto tra i ranghi, che riporta un risultato per ogni coppia di campioni.

I test di Conover, di Dunn e di Nemenyi, che riportano un risultato per ogni coppia di campioni, forniscono risultati sostanzialmente sovrapponibili, qui riporto per semplicità solamente i risultati dell'ultimo di questi.

> kwAllPairsNemenyiTest(hg~sport, data=ais) # test di Nemenyi (non parametrico)

        Pairwise comparisons using Tukey-Kramer-Nemenyi all-pairs test with Tukey-Dist approximation

data: hg by sport

        B_Ball Field   Gym   Netball Row   Swim  T_400m T_Sprnt Tennis
Field   0.023  -       -     -       -     -     -      -       -     
Gym     0.997  0.152   -     -       -     -     -      -       -     
Netball 0.028  4.3e-09 0.996 -       -     -     -      -       -     
Row     0.981  0.201   0.905 8.6e-05 -     -     -      -       -     
Swim    0.867  0.697   0.785 7.8e-05 1.000 -     -      -       -     
T_400m  0.844  0.578   0.785 2.0e-05 1.000 1.000 -      -       -     
T_Sprnt 0.133  1.000   0.279 5.9e-07 0.573 0.934 0.891  -       -     
Tennis  1.000  0.196   0.997 0.158   0.999 0.981 0.981  0.441   -     
W_Polo  0.018  1.000   0.126 5.0e-09 0.160 0.614 0.494  1.000   0.158 

P value adjustment method: single-step
alternative hypothesis: two.sided
Messaggio di avvertimento:
In kwAllPairsNemenyiTest.default(c(12.3, 12.7, 11.6, 12.6, 14, 12.5,  :
  Ties are present, p-values are not corrected.

Il pacchetto PMCMRplus include tra le molte altre anche la funzione tukeyTest() per il test di Tukey, un test parametrico,per il confronto di campioni con distribuzione gaussiana e con uguale varianza, che riporta un risultato per ogni coppia di campioni, un test sovrapponibile per applicazione e conclusioni al test t di Student con la correzione di Bonferroni, anche se meno conservativo. La sintassi è sempre la stessa, per visualizzarne i risultati copiate e incollate nella Console di R questa riga di codice e premete ↵ Invio:

tukeyTest(hg~sport, data=ais) # test di Tukey (parametrico)

Questo test fornisce risultati quasi identici a quelli del test t di Student con la correzione di Bonferroni:

        Pairwise comparisons using Tukey's test

data: hg by sport

        B_Ball Field   Gym    Netball Row    Swim   T_400m T_Sprnt Tennis
Field   0.0020 -       -      -       -      -      -      -       -     
Gym     0.9982 0.0671  -      -       -      -      -      -       -     
Netball 0.0043 2.4e-11 0.9553 -       -      -      -      -       -     
Row     0.8104 0.1028  0.8151 6.4e-07 -      -      -      -       -     
Swim    0.6798 0.4141  0.7173 2.3e-06 1.0000 -      -      -       -     
T_400m  0.5633 0.3463  0.6829 2.7e-07 1.0000 1.0000 -      -       -     
T_Sprnt 0.0013 1.0000  0.0429 5.1e-11 0.0623 0.2739 0.2224 -       -     
Tennis  1.0000 0.1278  0.9871 0.0142  0.9993 0.9920 0.9872 0.0784  -     
W_Polo  0.0031 1.0000  0.0709 8.8e-11 0.1275 0.4467 0.3833 1.0000  0.1418

P value adjustment method: single-step
alternative hypothesis: two.sided

In conclusionenel nostro caso i risultati dei due classici test parametrici per il confronto tra medie, il test t di Student con la correzione di Bonferroni e il test di Tukey, sono molto simili a quelli dei principali test non parametrici per il confronto tra mediane (test ρ di Spearman, test di Conover, di Dunn, di Nemenyi). Questo supporta il fatto che i dati originali sono distribuiti in modo gaussiano: per definizione in distribuzioni perfettamente gaussiane i risultati dei test parametrici e dei test non parametrici coincidono, e coincidono medie e mediane. Tuttavia va sottolineato che un approccio rigoroso e puntuale deve prevedere una verifica preliminare della gaussianità dei dati che in questo caso viene lasciata come esercizio rimandando ai metodi che trovate descritti in altri post [7]. 


----------


[2] Wikipedia. Type I and type II errors. URL consultato il 10/01/2020: http://bit.ly/2R1VdyF

[3] Vedere il post Il set di dati ais. La concentrazione dell'emoglobina viene espressa in grammi per decilitro di sangue (g/dL). Nel post trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG

[4] Un metodo statistico “meno conservativo” a parità di condizioni riporta più frequentemente differenze significative. Personalmente preferisco in ogni caso impiegare i metodi più conservativi, in quanto riducono la probabilità di considerare significativa una differenza che invece non è significativa (ovvero riducono la probabilità di un falso positivo).

[5] PMCMR è l'acronimo di Calculate Pairwise Multiple Comparisons of Mean Rank Sums Extended. Si tratta di un pacchetto che include una serie molto ampia sia di test omnibus (che forniscono un solo risultato per tutti i confronti effettuati), sia per il confronto tra tutte le coppie di campioni, sia parametrici, sia non parametrici. Vedere sul CRAN il reference manual PMCMRplus: Calculate Pairwise Multiple Comparisons of Mean Rank Sums Extended. URL consultato il 18/12/2019: http://bit.ly/2EwRymI

[6] Per 
il test ρ (rho) di Spearman vedere anche il post Coefficienti di correlazione parametrici e non parametrici.

[7] Vedere:

Nessun commento:

Posta un commento