Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


Il Laboratorio di Analisi dei Dati con R, dell'Università di Teramo su piattaforma Meet, inizia il 9 aprile 2021 - Iscrizione - email
r:analisi_bivariata:test_chi_quadrato

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)

1) tratti da: Agresti, A. (2007). An introduction to categorical data analysis (2nd ed). Hoboken, NJ: Wiley-Interscience, p. 39
r/analisi_bivariata/test_chi_quadrato.txt · Ultima modifica: 26/09/2021 08:50 da admin