Indice
Test del chi quadrato
Con il test del chi quadrato di Pearson, si intende controllare se l’associazione fra due variabili, eventualmente evidenziata da una tabella di contingenza, sia statisticamente significativa. Si tratta di un test di verifica di ipotesi che attribuisce un valore di probabilità all’ipotesi nulla (cioè all’ipotesi di assenza di associazione).
In R, è possibile calcolare il test del chi quadrato per una tabella a doppia entrata in diversi modi.
La funzione utilizzata è chisq.test, che può essere applicata solo a tabelle a doppia entrata.
Per tabelle a tre variabili (fattori), bisogna ricorrere al test di Cochran–Mantel–Haenszel.
Il test
Consideriamo i seguenti dati1):
# costruiamo la tabella M <- as.table(rbind(c(484, 762), c(239, 327), c(477, 468))) dimnames(M) <- list(Partito = c("Democr.", "Ind.", "Rep."), Genere = c("Uomini", "Donne")) M
## Genere ## Partito Uomini Donne ## Democr. 484 762 ## Ind. 239 327 ## Rep. 477 468 round(prop.table(M, margin = 2)*100, 1) ## Genere ## Partito Uomini Donne ## Democr. 40.3 48.9 ## Ind. 19.9 21.0 ## Rep. 39.8 30.1
Significatività statistica
Applichiamo alla tabella la funzione del chi quadrato, costruendo un oggetto con i risultati:
res <- chisq.test(M) res
## Pearson's Chi-squared test ## ## data: M ## X-squared = 30.07, df = 2, p-value = 2.954e-07
Gli elementi informativi dell’output sono:
- X-squared = valore del chi quadrato;
- df = gradi di libertà della tabella = $(N_{righe} - 1)(N_{colonne} - 1)$
- p-value: probabilità dell’ipotesi nulla.
Il valore p è pari a 0,0000002954 (2,954e-07): le probabilità che l’associazione sia dovuta al caso è pari 0, l’ipotesi nulla può essere respinta, e la relazione è statisticamente significativa.
Frequenze attesi e residui
La formula del chi quadrato è:
$$\chi^2=\sum_{i=1}^{k}\frac{\left(f\ osservate-f\ attese\right)^2}{f\ attese}$$
Possiamo visualizzare la matrice delle frequenze attese:
res$expected ## Genere ## Partito Uomini Donne ## Democr. 542.3286 703.6714 ## Ind. 246.3547 319.6453 ## Rep. 411.3166 533.6834
E la matrice dei residui di Pearson, la cui formula è: $$\frac{\left(freq\ oss-freq\ att\right)}{\sqrt{freq\ att}}$$
Equivalenti in valore assoluto ai valori che compongono il chi quadrato, ma con il segno:
res$residuals ## Genere ## Partito Uomini Donne ## Democr. -2.5046695 2.1988558 ## Ind. -0.4685829 0.4113702 ## Rep. 3.2386734 -2.8432397
Questi valori possono essere utilizzati per scomporre il chi quadrato e valutare il contributo delle singole celle al suo valore.
Ad esempio, osserveremo come la modalità “Indipendente” abbia inciso molto poco sul valore del chi quadrato, e che uomini e donne si differenziano soprattutto rispetto all’identificazione con i due partiti principali.
Effetti della numerosità del campione
È importante infine ricordare che il valore del chi quadrato risente della numerosità del campione e delle frequenze nelle celle. Ripetiamo il test su un terzo dei casi della tabella M (dividendo per 3 la tabella stessa: M/3), e confrontiamo i risultati:
chisq.test(M/3) ## Pearson's Chi-squared test ## ## data: M/3 ## X-squared = 10.023, df = 2, p-value = 0.00666
Il valore del chi quadrato è pari ad un terzo del chi quadrato calcolato per la tabella M:
30.07/3 ## [1] 10.02333
Il calcolo del chi quadrato richiede che le frequenze attese siano tutte maggiori di 5, e che la tabella non abbia celle vuote (con frequenze pari a 0). Diversamente, il risultato potrebbe essere non affidabile. Si avrebbe in questo caso un messaggio di avviso come quello che segue:
## AVVERTIMENTO: Warning in chisq.test(.Table, correct = FALSE) : Chi-squared approximation may be incorrect ## AVVERTIMENTO: 2 le frequenze attese sono inferiori a 5
Per ovviare al problema, è possibile, anche considerando la matrice dei residui, aggregare o eliminare le modalità meno numerose (che danno luogo alle celle vuote o alle frequenze attese inferiori a 5).
Indicando due variabili
Possiamo applicare la funzione anche a due variabili :
library(car) # dati chisq.test(SLID$language, SLID$sex) ## Pearson's Chi-squared test ## ## data: SLID$language and SLID$sex ## X-squared = 0.24422, df = 2, p-value = 0.8851
Argomenti della funzione
| x | una variabile (fattore) o una tabella (matrix) |
| y | una variabile (fattore); non serve se x è una tabella |
| correct | correzione per tabelle 2 × 2. Le opzioni sono TRUE / FALSE. Se simulate.p.value = TRUE La correzione non verrà applicata. |
| p | un vettore indicante le probabilità, che deve essere della stessa lunghezza di x. Se contiene valori negativi, verrà riportato un messaggio di errore. |
| rescale.p | se TRUE p sarà scalato (dove necessario) a 1. Se FALSE, e la somma di p non è uguale a 1, verrà riportato un messaggio di errore. |
| simulate.p.value | calcolo dei valori di p con il metodo Monte Carlo. Le opzioni sono TRUE / FALSE. |
| B | Numero delle ripetizioni da applicare per il test di Monte Carlo. |
Script di esempio (download)
- Test chiq.R
# dati M <- as.table(rbind(c(484, 762), c(239, 327), c(477, 468))) dimnames(M) <- list(Partito = c("Democr.", "Ind.", "Rep."), Genere = c("Uomini", "Donne")) M round(prop.table(M, margin = 2)*100, 1) # test del chi quadrato res <- chisq.test(M) res res$expected res$residuals # effetti della numerosita chisq.test(M/3) 30.07/3 # con due variabili library(car) # dati chisq.test(SLID$language, SLID$sex)
