Avvertenza in R - L'approssimazione Chi-quadrata potrebbe essere errata


40

Ho dei dati che mostrano i risultati degli esami di ammissione dei vigili del fuoco. Sto testando l'ipotesi che i risultati degli esami e l'etnia non si escludano a vicenda. Per provare questo, ho eseguito un test chi-quadrato di Pearson in R. I risultati mostrano ciò che mi aspettavo, ma ha dato un avvertimento che " In chisq.test(a) : Chi-squared approximation may be incorrect."

> a
       white black asian hispanic
pass       5     2     2        0
noShow     0     1     0        0
fail       0     2     3        4
> chisq.test(a)

    Pearson's Chi-squared test

data:  a
X-squared = 12.6667, df = 6, p-value = 0.04865

Warning message:
In chisq.test(a) : Chi-squared approximation may be incorrect

Qualcuno sa perché ha dato un avvertimento? È perché sto usando un metodo sbagliato?


2
Non fidarti mai di un risultato con così poche misurazioni. Quando hai centinaia di persone in ogni colonna, potresti avere una certa fiducia nei risultati. Tuttavia, il risultato potrebbe essere più dovuto al vicinato o alla ricchezza che alla razza stessa.
Rodrigo,

Risposte:


41

Ha dato l'avvertimento perché molti dei valori previsti saranno molto piccoli e quindi le approssimazioni di p potrebbero non essere corrette.

In Rpuoi usare chisq.test(a, simulate.p.value = TRUE)per usare simula i valori p.

Tuttavia, con celle di dimensioni così ridotte, tutte le stime saranno scarse. Potrebbe essere utile testare semplicemente pass o fail (eliminando "no show") con regressione chi-quadro o logistica. Infatti, poiché è abbastanza chiaro che il grado di superamento / fallimento è una variabile dipendente, la regressione logistica potrebbe essere migliore.


Cosa simulate.p.value = TRUEfa effettivamente quando aggiunto a chisq.test?
Al14

1
Usa simulazioni per trovare il valore p
Peter Flom - Ripristina Monica

1
Si noti che simulate.p.value = TRUEutilizza la simulazione condizionata ai margini , quindi è davvero una versione del test esatto di Fisher.
kjetil b halvorsen,

23

Il problema è che l'approssimazione chi-quadro alla distribuzione della statistica test si basa sul fatto che i conteggi siano distribuiti approssimativamente normalmente. Se molti dei conteggi previsti sono molto piccoli, l'approssimazione potrebbe essere scarsa.

Si noti che la distribuzione effettiva della statistica chi-quadro per l'indipendenza nelle tabelle di contingenza è discreta, non continua.

La categoria noshow contribuirà notevolmente al problema; una cosa da considerare è fondere noshow e fallire. Riceverai comunque l'avviso, ma ciò non influirà sui risultati e la distribuzione dovrebbe essere abbastanza ragionevole (la regola che viene applicata prima che venga dato l'avviso è troppo rigida).

Ma in ogni caso, se sei disposto a condizionare i margini (come fai quando esegui il test esatto di Fisher), puoi affrontare il problema molto facilmente in R; impostare l' simulate.p.valueargomento su TRUE; quindi non fai affidamento sull'approssimazione del chi quadro alla distribuzione della statistica del test.


puoi spiegarmi perché ".. l'approssimazione del chi quadro alla distribuzione della statistica del test si basa sul fatto che i conteggi siano distribuiti approssimativamente normalmente"? Non capisco come questo possa essere vero se uno, ad esempio, ha una tabella di contingenza 2x2. In che modo i conteggi possono essere (approssimativamente) normalmente distribuiti? Come possono essere normalmente distribuiti i conteggi bianchi, neri, ispanici e asiatici? Vuoi dire solo leggermente uguale? E come si collega questo a questa domanda? : stats.stackexchange.com/questions/141407/…
Erosennin,

La distribuzione multivariata delle variabili casuali di conteggio deve essere approssimativamente normale (anche se sarà degenerata). L'insieme dei conteggi osservati è solo una singola osservazione vettoriale da questa normale multivariata: non è possibile giudicare la distribuzione da un'unica osservazione. Per fare la valutazione di cui sto parlando, devi fare affidamento sulle ipotesi; è ragionevolmente facile farlo per le singole celle (ovvero la distribuzione marginale per una data cella, sotto il valore null). Sembra che tu stia combinando i conteggi tra le celle, ma non ha senso perché provengono tutti da diverse distribuzioni
Glen_b -Reinstate Monica

Innanzitutto, grazie per aver dedicato del tempo! Quindi stai dicendo che i conteggi "verso il basso" della tabella di contingenza dovrebbero essere (degeneratamente) multivariati normali, se guardassimo a molte osservazioni? Ciò non significherebbe che anche i conteggi di ogni singola cella dovrebbero essere normali, e conta anche "lateralmente" la tabella di contingenza (suppongo che questo sia ciò che intendi con "across")? F.ex una cella con valore atteso 5, dovrebbe essere normalmente distribuita intorno a 5, giusto? Quindi se una cella attraverso ha un valore atteso di 40, questa cella dovrebbe essere normalmente distribuita intorno a 40 e insieme una normale multivariata di media 5 e 40, no?
Erosennin,

1
Nel caso generale con margini fissi (che è quello che ho avuto in mente), dovremmo impilare tutte le variabili all'interno della tabella in un vettore di lunghezza , ma si trovano in un iperpiano di dimensione - questa è la degenerazione. Nel caso 2x2 questo è 1 grado di libertà e i 4 conteggi delle cellule si trovano lungo una linea nello spazio 4D. Ma non c'è davvero spazio per fornire dettagli adeguati. Non hai ancora capito (anche se sembra che tu sia più vicino). Potresti ripubblicare qualcosa come la tua prima domanda (sul senso in cui i valori sono approssimativamente normali) come una domanda. r c ( r - 1 ) ( c - 1 )r×crc(r-1)(c-1)
Glen_b

Questo è pesante e molto interessante. Se hai mai tempo, ho ripubblicato la mia prima domanda qui: stats.stackexchange.com/questions/142429/… .
Erosennin,

12

Per conteggi così piccoli, puoi usare il test esatto di Fisher:

> fisher.test(a)

        Fisher's Exact Test for Count Data

data:  a 
p-value = 0.02618
alternative hypothesis: two.sided 

3

Si prega di consultare la sezione "Presupposti" dell'articolo del test chi-quadrato di Pearson .

In breve, quando i conteggi in una qualsiasi delle celle della tabella sono inferiori a 5, una delle ipotesi viene interrotta. Penso che sia a questo che si riferisce il messaggio di errore. Nell'articolo collegato puoi anche trovare la correzione che può essere applicata.


6
Esistono due problemi con la regola empirica con meno di cinque conteggi. Il primo è che l'istruzione corretta si riferisce ai conteggi previsti piuttosto che ai conteggi effettivi. Il secondo è che è troppo grave. L' approssimazione spesso funziona bene anche quando una piccola parte dei conteggi previsti è inferiore a cinque. In questo caso, dove tutti i margini della colonna sono cinque o meno, è ovvio che ogni conteggio previsto è piccolo e quindi ci viene consigliato di essere prudenti. Inoltre, la correzione menzionata nell'articolo di Wikipedia si applica solo nel caso di DF; questo caso ha 6 DF. χ2
whuber

0

La tua domanda principale parla della dimensione del campione, ma vedo che vengono confrontati più di due gruppi. Se il valore p del test è 0,05 o inferiore, sarebbe difficile interpretare i risultati. Pertanto, sto condividendo un breve script che utilizzo in tali situazioni:

# Load the required packages:
library(MASS) # for chisq
library(descr) # for crosstable

CrossTable(a$exam_result, a$ethnicity
       fisher = T, chisq = T, expected = T,
       prop.c = F, prop.t = F, prop.chisq = F, 
       sresid = T, format = 'SPSS')

Questo codice genererà sia Chi-quadrato di Pearson che Chi-quadrato di Fisher. Produce conteggi e proporzioni di ciascuna voce della tabella. Sulla base dei residui standardizzati o dei punteggi dei valori z, ad es.

sresid

Se è al di fuori dell'intervallo | 1,96 | cioè, meno di -1,96 o maggiore di 1,96, allora è significativo p <0,05. Il segno indicherebbe quindi se correlato positivamente o negativamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.