.. siamo d'accordo che per fare un test t di Student innanzitutto devo sapere se i miei dati sono "normali", nel senso che provengono da una popolazione gaussiana. Ma come faccio a sapere, appunto, se i miei dati sono normali?

Innanzitutto, abbiamo un metodo grafico molto efficace da utilizzare con R. Supponiamo ad esempio di avere questi dati, relativi a un certo parametro misurato su un campione di 9 pazienti (per semplicità, abbiamo messo i valori in ordine crescente):

7.05, 7.41, 7.61, 7.90, 8.10, 8.21, 8.37, 8.67, 9.06

L'idea formidabile è questa: paragonare questi dati con i "quantili della normale standard". Se i dati fossero normali, allora vorrebbe dire che con un'operazione lineare (in senso matematico, ossia moltiplicandoli per qualcosa ed aggiungendoci qualcosa altro) potremmo passare dall'uno all'altro - ovvero, disegnandoli uno scatterplot, essi sarebbero allineati su una retta.

Proviamo dunque a creare un "vettore" di nome dati e facciamo fare ad R il grafico "quantile - quantile", con il comando qqnorm.

dati <- c(7.05, 7.41, 7.61, 7.90, 8.10, 8.21, 8.37, 8.67, 9.06)
qqnorm(dati)
qqline(dati)

Copiate tutto il blocco di istruzioni rosse scritte qui sopra, e incollatelo nella finestra bianca che trovate in questo webclient offerto dall'Università di Palermo, e premete il pulsante Send, lì in basso. Vedrete che approssimativamente i punti del grafico seguono la retta diagonale.

Ripetete di nuovo l'operazione con questi altri dati:


datiaformadiS <- c(1, 1, 1, 2, 2, 3, 4, 4, 5, 5, 5)
qqnorm(
datiaformadiS)
qqline(
datiaformadiS)

e poi con questi:


datibanana <- c(1,1,1,1,1,1,1,2,2,2,2,3,3,4,7,8,12)
qqnorm(datibanana)
qqline(datibanana)

vedrete che i punti si allineano lungo una "S", oppure sono a forma di "banana": non va bene!


Se invece volete affidarvi al rigore di un test, la procedura di Kolmogorov e Smirnov vi permette di rifiutare o meno l'ipotesi nulla che i dati provengano da una particolare distribuzione. Calcoliamo innanzitutto la media e la deviazione standard dei dati:

dati <- c(7.05, 7.41, 7.61, 7.90, 8.10, 8.21, 8.37, 8.67, 9.06)
mean(dati)
sd(dati)

utilizzando il server dell'università di Palermo, e scopriamo che essi sono approssimativamente 8 e 0.6. A questo punto, testiamo se possiamo rifiutare l'ipotesi che questi dati provengano da una normale di media 8 e deviazione standard 0.6:

dati <- c(7.05, 7.41, 7.61, 7.90, 8.10, 8.21, 8.37, 8.67, 9.06)
ks.test(dati, "pnorm", 8, 0.6)

Vedrete che
il p-value è praticamente uguale ad 1: non possiamo rifiutare con nessuna significatività ragionevole l'ipotesi nulla (ossia, sospettiamo con una quasi certezza che si tratti di dati normali).