• Tidak ada hasil yang ditemukan

Metodi non parametrici

Dalam dokumen DellOmodarme esercitazioni R (Halaman 106-110)

1.0 1.5 2.0 2.5

0.00.20.40.60.81.0

ecdf(masse)

x

Fn(x)

Figura 5.1: Test di Kolmogorov-Smirnov per l’uniformit`a.

5.1.2 Test di Kolmogorov-Smirnov per due campioni

Se si vogliono confrontare due campioni A e B per stabilire se possano provenire da una stessa distribuzione si usa il test di Kolmogorov-Smirnov nel modo seguente:

> ks.test(A, B)

Esempio

Si confrontino le distribuzioni di dei valori contenuti nei vettori A e B.

> A <- rnorm(30)

> B <- rnorm(20, m=0, sd=1.2)

> ks.test(A, B)

Two-sample Kolmogorov-Smirnov test data: A and B

D = 0.4333, p-value = 0.01693 alternative hypothesis: two.sided

Si conclude che le due distribuzioni differiscono in maniera significativa. Per confrontarle graficamente si usano i comandi:

> plot(ecdf(B), do.points=FALSE, verticals=TRUE)

> lines(ecdf(A), do.points=FALSE, verticals=TRUE, col.vert="red", col.hor="red") che producono il grafico in Fig. 5.2.

5.2 Metodi non parametrici 99

−3 −2 −1 0 1 2 3

0.00.20.40.60.81.0

ECDF

x

Fn(x)

Figura 5.2: Test di Kolmogorov-Smirnov per il confronto di due serie osservate dell’esempio 5.1.2.

5.2.1 Test di Wilcoxon

Questo test `e disponibile nelle due varianti di test di Wilcoxon dei ranghi con segno (equivalente al test t per dati appaiati) e test di Wilcoxon della somma dei ranghi (equivalente al test t per campioni indipendenti).

Si considerino per cominciare due campioni A e B appaiati. Se non `e possibile utilizzare il test t per verificare se vi sia una differenza significativa fra le loro medie si ricorre al test di Wilcoxon dei ranghi con segno.

Esempio

Si vuole stabilire l’efficacia di un farmaco. Su un campione di 8 pazienti si misura su una scala da 1 a 5 la gravit`a delle lesioni prima della cura (A). Gli stessi pazienti vengono valutati a trattamento concluso (B). I dati suggeriscono che la cura ha avuto un effetto significativo?

Il test di Wilcoxon, appropriato per una situazione di questo genere si esegue con le chiamate:

> A <- c(2,2,3,4,4,2,3,5)

> B <- c(3,1,3,5,4,3,4,4)

> wilcox.test(A, B, paired=TRUE, correct=FALSE) Wilcoxon signed rank test

data: A and B

V = 7, p-value = 0.4142

alternative hypothesis: true mu is not equal to 0

Si conclude che non vi `e evidenza di effetto significativo del farmaco. L’opzione paired = T RU E specifica che i campioni vanno trattati come dati appaiati, mentre correct = F ALSE specifica di non utilizzare la correzione di continuit`a nell’approssimazione normale alla distribuzione di Wilcoxon, usata per calcolare il valore p. Per quanto riguarda questo calcolo, per campioni di taglia inferiore a 50 e in assenza di ties il valore p viene calcolato in modo esatto, altrimenti R ricorre all’approssimazione

normale. 

Nel caso di campioni indipendenti si ricorre al test di Wilcoxon della somma dei ranghi (equivalente al test U di Mann-Whitney). Usando i dati dell’esempio precedente la chiamata sar`a semplicemente:

[...]

> wilcox.test(A, B, correct=FALSE) Wilcoxon rank sum test

data: A and B

W = 26.5, p-value = 0.55

alternative hypothesis: true mu is not equal to 0

5.2.2 Test di Kruskal-Wallis

Nel caso di pi`u di due serie di dati indipendenti, se non `e possibile ricorrere ad una ANOVA, si utilizza il test di Kruskal-Wallis, che nel caso di due sole serie di dati fornisce un risultato analogo a quello del test di Wilcoxon della somma dei ranghi. In questo caso `e necessario unire tutti i dati in un unico vettore e utilizzare un vettore complementare in cui tenere traccia del gruppo di provenienza:

> A <- c(2,2,3,4,4,2,3,5)

> B <- c(3,1,3,5,4,3,4,4)

> dati <- c(A, B)

> g <- rep(1:2, each=8)

o in alternativa riunirli in una lista:

> dati2 <- list(g1=A, g2=B)

Quest’ultima chiamata crea un oggetto di tipo lista (l’equivalente di una struttura C) che contiene due variabili: la prima, chiamata “g1”, contenente il vettore A e la seconda, di nome “g2”, contenente il vettore B.

Si procede quindi con il test:

> kruskal.test(dati, g) # usando i vettori

> kruskal.test(dati2) # usando la lista Kruskal-Wallis rank sum test

data: dati2

Kruskal-Wallis chi-squared = 0.3573, df = 1, p-value = 0.55

Come si vede il valore p `e identico a quello ottenuto nel caso di test di Wilcoxon della somma dei ranghi.

5.2.3 Test di Friedman

Questo test `e l’analogo non parametrico dell’analisi della varianza a due fattori a blocchi randomizzati.

Esempio

A 6 psicologi vengono richieste le valutazioni (con un punteggio da 0 a 5 in ordine crescente di validit`a) di 4 terapie. Si stabilisca se vi sono delle differenze di valutazione fra le 4 diverse terapie.

Il modo pi`u rapido di procedere `e inserire i dati relativi alle valutazioni dei 6 medici e unirli in una matrice:

> c1 <- c(4, 3, 0, 2)

> c2 <- c(4, 2, 2, 2)

> c3 <- c(3, 2, 2, 1)

> c4 <- c(5, 1, 2, 2)

> c5 <- c(3, 4, 1, 2)

5.2 Metodi non parametrici 101

> c6 <- c(5, 4, 3, 3)

> mat <- rbind(c1, c2, c3, c4, c5, c6)

La funzione rbind unisce i vettori in una matrice disponendoli per riga. Il test si esegue semplicemente con la chiamata:

> friedman.test(mat)

Friedman rank sum test data: mat

Friedman chi-squared = 11.3774, df = 3, p-value = 0.00985

Si evidenzia una differenza altamente significativa fra i 4 tipi terapia.  In alternativa `e sempre possibile trasformare i dati all’interno di ciascun blocco in ranghi ed eseguire una ANOVA a due vie sui dati trasformati. Il processo risulta pi`u lungo e macchinoso:

> dati <- c(c1, c2, c3, c4, c5, c6)

> gruppo <- factor(rep(1:4, 6))

> blocco <- factor(rep(1:6, each=4))

> rg <- tapply(dati, blocco, rank) # calcolo i ranghi nei blocchi

> ranghi <- stack(rg)[[1]] # concateno la lista ed estraggo la prima colonna

> anova(aov(ranghi ~ gruppo + blocco)) Analysis of Variance Table

Response: ranghi

Df Sum Sq Mean Sq F value Pr(>F) gruppo 3 16.7500 5.5833 8.5897 0.001474 **

blocco 5 5.017e-30 1.003e-30 1.544e-30 1.000000 Residuals 15 9.7500 0.6500

Si noti che il valore di significativit`a `e diverso dalla tecnica precedente.

5.2.4 Correlazione non parametrica

Per valutare l’associazione fra due serie di dati, in R sono disponibili due misure non parametriche:

ρ di Spearman e τ di Kendall. Entrambe sono accessibili dalla funzione cor.test (vedi Sezione 2.3) specificando l’opzione method appropriata.

Esempio

Si studia la correlazione non parametrica tra i valori degli indici di soddisfazione IS degli abitanti di sette citt`a (espressi in una scala da 1 a 10) e l’area media (in km2) di zone verdi disponibili nel centro urbano.

Si inseriscono i dati:

> IS <- c(1, 2, 3, 4, 5, 6, 8, 10)

> ZV <- c(0.7, 0.4, 1.0, 1.0, 1.1, 1.2, 1.2, 1.2) Per eseguire il test di Spearman si usa la chiamata:

> cor.test(IS, ZV, method="spearman") Spearman’s rank correlation rho

data: IS and ZV S = 4, p-value = 0.002171 alternative hypothesis: true rho is not equal to 0 sample estimates:

rho 0.94523

Per il test di Kendall la sintassi `e:

> cor.test(IS, ZV, method="kendall") Kendall’s rank correlation tau data: IS and ZV

z.tau = 2.9399, p-value = 0.003283

alternative hypothesis: true tau is not equal to 0 sample estimates:

tau 0.8486684

La conclusione in entrambi i casi `e che esiste evidenza di associazione altamente significativa fra i due indici considerati.

Dalam dokumen DellOmodarme esercitazioni R (Halaman 106-110)