Il
test chi-quadrato può essere nella sua forma più generale esteso a n righe · n colonne. Il problema è che più sono le
righe e le colonne e più è difficile individuare il valore (o i
valori) che contribuiscono a rendere eventualmente significative le
differenze. Per questa ragione in genere le tabelle con più righe e
più colonne sono scomposte in tabelle più piccole al fine di
valutare meglio i contributi dei valori osservati: per questo tipo di
analisi, piuttosto delicata, si rimanda ai testi di statistica.
Qui
riporto un esempio di una tabella di 2 righe per 5 colonne tratto da
Marubini [1] nella quale si riesce a individuare senza troppe complicazioni il risultato che contribuisce a rendere significativa la differenza
tra le frequenze osservate.
Si
trattava di valutare l'efficacia di cinque differenti vaccini
influenzali. I vaccini vennero inoculati a novembre in 1080 soggetti
sani volontari e nel mese di marzo dell'anno successivo vennero
contati i casi di influenza tra i vaccinati.
Questi
erano stati i risultati della sperimentazione. Da notare che viene
riportato il numero dei casi cioè il conteggio dei soggetti affetti
da influenza e non affetti da influenza, come richiesto dal test
chi-quadrato, nel quale invece
non devono mai essere riportati i dati espressi in
percentuale:
Esito
|
Vaccino_1
|
Vaccino_2
|
Vaccino_3
|
Vaccino_4
|
Vaccino_5
|
Influenza_si
|
39
|
44
|
20
|
41
|
42
|
Influenza_no
|
177
|
166
|
200
|
183
|
168
|
Questo
script prevede di inserire i dati manualmente. Copiatelo e
incollatelo nella Console di R e
premete ↵ Invio:
#
TEST CHI-QUADRATO - n righe ·
n colonne
#
cells
<- c(39, 44, 20, 41, 42, 177, 166, 200, 183, 168) # genera
l'array cells con il numero dei casi
rnames
<- c("Influenza_si", "Influenza_no")
# genera l'array rnames con i nomi delle righe
cnames
<- c("Vaccino_1", "Vaccino_2", "Vaccino_3",
"Vaccino_4", "Vaccino_5") # genera
l'array cnames con i nomi delle colonne
mydata
<- matrix(cells, nrow=2, ncol=5, byrow=TRUE, dimnames=list(rnames,
cnames)) # genera la matrice dati
mydata
# mostra i dati
chisq.test(mydata)
# calcola il chi-quadrato
#
Nelle
prime tre righe sono generati con la funzione c():
→
il
vettore che contiene i quattro dati (che come si vede devono essere
inseriti in sequenza leggendoli da sinistra a destra e dall'alto in
basso) che sono salvati nell'oggetto cells;
→
il
vettore che contiene i nomi delle righe, salvato nell'oggetto rnames;
→
il
vettore che contiene i nomi delle colonne, salvato nell'oggetto
cnames.
I
tre vettori sono combinati a formare la matrice dei dati mediante la
funzione matrix() che impiega gli
argomenti che indicano:
→
l'oggetto/vettore
contenente i dati (cells);
→
il
numero di righe (nrow)
e il numero di colonne (ncol)
della matrice;
→
la
modalità di riempimento della matrice, che deve essere riempita per
righe (byrow=TRUE)
quindi da sinistra a destra e dall'alto in basso;
→
i
nomi da assegnare alle righe e alle colonne (dimnames=list(rnames,
cnames)).
La
matrice viene salvata nell'oggetto mydata,
che viene mostrato per un ovvio controllo della corretta immissione e
strutturazione dei dati.
Infine
con la funzione chisq.test() [2]
viene effettuato il calcolo del test.
Questi
sono i risultati:
> mydata # mostra i dati
Vaccino_1 Vaccino_2 Vaccino_3 Vaccino_4 Vaccino_5
Influenza_si 39 44 20 41 42
Influenza_no 177 166 200 183 168
> chisq.test(mydata) # calcola il chi-quadrato
Pearson's Chi-squared test
data: mydata
X-squared = 13.678, df = 4, p-value = 0.008395
Il
test chi-quadrato riporta un valore elevato della statistica
chi-quadrato (13.678)
cui corrisponde un valore di probabilità
p = 0.008395 che
conferma quindi la presenza di una differenza significativa
nell'efficacia dei vaccini.
In
alternativa potete anche copiare le tre righe riportate qui sotto aggiungendo un ↵ Invio al termine dell'ultima riga e
salvarle in C:\Rdati\ nel
file di testo denominato
chi_rxc.csv (attenzione
all'estensione al momento del salvataggio del file).
Esito;Vaccino_1;Vaccino_2;Vaccino_3;Vaccino_4;Vaccino_5
Influenza_si;39;44;20;41;42
Influenza_no;177;166;200;183;168
Questo
script prevede di eseguire il test chi-quadrato sui dati letti dal
file chi_rxc.csv.
Copiatelo e incollatelo nella Console
di R e premete
↵ Invio:
#
TEST CHI-QUADRATO - n righe ·
n colonne
#
mydata
<- read.table("C:/Rdati/chi_rxc.csv", header=TRUE,
sep=";", row.names="Esito")
# importa i dati
mydata
# mostra i dati
chisq.test(mydata)
# calcola il chi-quadrato
#
Come
vedete lo script è più compatto del precedente, le uniche cose da
notare sono gli argomenti della funzione read.table():
→
"C:/Rdati/chi_rxc.csv"
che
specifica nome e posizione del file dal quale importare i dati;
→
header=TRUE
che
indica che nella prima riga del file sono contenuti i nomi delle
variabili;
→
sep=";"
che
specifica il separatore di campo impiegato nel file;
→
row.names="Esito"
che
indica che i nomi delle righe sono contenuti nel campo “Esito”.
Anche
se ovviamente i risultati sono sempre gli stessi, il senso di queste
due alternative è semplice. Se vi va bene intervenire ogni volta
sullo script per adattarlo a nuovi dati, potete impiegare la prima.
Potete invece impiegare la seconda se volete evitare di mettere mano
ogni volta allo script, e preferite intervenire solamente sul file di
dati. A voi la scelta, magari dopo averle sperimentate entrambe.
Se
riprendiamo i casi osservati (Influenza_si
/
Influenza_no)
e li trasformiamo in percentuale
Esito
|
Vaccino_1
|
Vaccino_2
|
Vaccino_3
|
Vaccino_4
|
Vaccino_5
|
Influenza_si
|
18.1
|
21.0
|
9.1
|
18.3
|
20.0
|
Influenza_no
|
81.9
|
79.0
|
90.8
|
81.7
|
80.0
|
vediamo
che l'eterogeneità dei risultati evidenziata dal test chi-quadrato è
da attribuire al vaccino 3, con il quale si è avuto nei vaccinati un
tasso di malattia del 9.1%, a fronte di un tasso di malattia
omogeneo e praticamente doppio, che va dal 18.1% al 21.0%, che si è
avuto nei soggetti vaccinati con gli altri quattro vaccini.
Un utile complemento all'analisi dei dati può essere realizzato mediante la loro rappresentazione grafica dei dati sotto forma di grafico a barre affiancate e grafico a barre sovrapposte.
----------
[1]
Bossi A, Cortinovis I, Duca PG, Marubini E. Introduzione
alla statistica medica.
La Nuova Italia Scientifica, Roma, 1994, ISBN 88-430-0284-8, pp.
290-291.
[2]
Digitate help(chisq.test)
nella Console di R per
la documentazione della funzione chisq.test().
[3]
Digitate help(barplot)
nella Console di R per
la documentazione della funzione barplot().
Nessun commento:
Posta un commento