Warnung in R - Chi-Quadrat-Näherung ist möglicherweise falsch


40

Ich habe Daten, die die Ergebnisse der Feuerwehr-Aufnahmeprüfungen zeigen. Ich teste die Hypothese, dass Prüfungsergebnisse und ethnische Zugehörigkeit nicht voneinander unabhängig sind. Um dies zu testen, führte ich einen Pearson-Chi-Quadrat-Test in R durch. Die Ergebnisse zeigen, was ich erwartet hatte, aber es wurde die Warnung " 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

Weiß jemand, warum es eine Warnung gab? Liegt es daran, dass ich eine falsche Methode verwende?


2
Vertrauen Sie niemals einem Ergebnis mit so wenigen Messungen. Wenn Sie in jeder Spalte Hunderte von Personen haben, können Sie ein gewisses Vertrauen in Ihre Ergebnisse haben. Das Ergebnis könnte jedoch eher auf die Nachbarschaft oder den Wohlstand zurückzuführen sein als auf die Rasse selbst.
Rodrigo

Antworten:


41

Es gab die Warnung, weil viele der erwarteten Werte sehr klein sein werden und daher die Approximationen von p möglicherweise nicht richtig sind.

In können RSie verwenden chisq.test(a, simulate.p.value = TRUE), um p-Werte zu simulieren.

Bei solch kleinen Zellengrößen sind jedoch alle Schätzungen schlecht. Es kann hilfreich sein, nur "Bestanden gegen Nicht Bestanden" zu testen ("Nicht Erscheinen" löschen), entweder mit Chi-Quadrat- oder logistischer Regression. Tatsächlich ist die logistische Regression möglicherweise besser, da ziemlich klar ist, dass es sich bei der Pass / Fail-Note um eine abhängige Variable handelt.


Was macht eigentlich simulate.p.value = TRUE, wenn hinzugefügt chisq.test?
Al14


1
Beachten Sie, dass simulate.p.value = TRUEdie Simulation von den Rändern abhängig ist. Es handelt sich also tatsächlich um eine Version des genauen Fisher-Tests.
kjetil b halvorsen

23

Das Problem ist, dass die Chi-Quadrat-Annäherung an die Verteilung der Teststatistik von einer ungefähren Normalverteilung der Zählwerte abhängt. Wenn viele der erwarteten Zählwerte sehr klein sind, ist die Approximation möglicherweise schlecht.

Beachten Sie, dass die tatsächliche Verteilung der Chi-Quadrat-Statistik für die Unabhängigkeit in Kontingenztabellen diskret und nicht kontinuierlich ist.

Die Noshow-Kategorie wird einen großen Beitrag zum Problem leisten. Eine Sache, die zu berücksichtigen ist, ist das Zusammenführen von Noshow und Fail. Die Warnung wird weiterhin angezeigt, wirkt sich jedoch kaum auf die Ergebnisse aus, und die Verteilung sollte angemessen sein (die Regel, die angewendet wird, bevor die Warnung ausgegeben wird, ist zu streng).

Aber auf jeden Fall können Sie das Problem in R sehr leicht lösen, wenn Sie gewillt sind, an den Rändern zu konditionieren (wie Sie es tun, wenn Sie den genauen Test von Fisher ausführen) . setze das simulate.p.valueArgument auf TRUE; Dann sind Sie nicht auf die Chi-Quadrat-Annäherung an die Verteilung der Teststatistik angewiesen.


Können Sie mir bitte erklären, warum "..die Chi-Quadrat-Annäherung an die Verteilung der Teststatistik davon abhängt, dass die Zählwerte grob normal verteilt sind"? Ich verstehe nicht, wie das sein kann, wenn man zum Beispiel eine 2x2-Kontingenztabelle hat. Wie können die Zählungen (ungefähr) normal verteilt werden? Wie können weiße, schwarze, hispanische und asiatische Grafen möglicherweise normal verteilt werden? Meinst du nur etwas gleich? Und wie hängt das mit dieser Frage zusammen? : stats.stackexchange.com/questions/141407/…
Erosennin

Die multivariate Verteilung der Zähl- Zufallsvariablen muss ungefähr normal sein (obwohl sie entartet sein wird). Die Menge der beobachteten Zählungen ist nur eine einzelne Vektorbeobachtung aus dieser multivariaten Normalen - Sie können die Verteilung nicht anhand einer Beobachtung beurteilen. Um die Beurteilung vorzunehmen, über die ich spreche, müssen Sie sich auf die Annahmen verlassen. Es ist ziemlich einfach, dies für die einzelnen Zellen zu tun (dh die Randverteilung für eine gegebene Zelle unter der Null). Sie scheinen die
Anzahl der

Vielen Dank, dass Sie sich die Zeit genommen haben! Sie sagen also, dass die Zählungen "abwärts" in der Kontingenztabelle (degenerativ) multivariat normal sein sollten, wenn wir uns viele Beobachtungen ansehen? Würde dies nicht bedeuten, dass die Zählungen jeder einzelnen Zelle ebenfalls normal sein sollten und auch die Kontingenztabelle "seitwärts" zählen (ich nehme an, das ist, was Sie mit "across" meinen)? B. eine Zelle mit dem erwarteten Wert 5, sollte normalerweise um 5 herum verteilt sein, richtig? Wenn also eine Zelle über den erwarteten Wert 40 verfügt, sollte diese Zelle normalerweise um 40 verteilt sein und zusammen eine multivariate Normalen von Mittelwert 5 und 40, nein?
Erosennin

1
Im allgemeinen Fall von mit festen Rändern (das ist der Fall, an den ich gedacht habe) würden wir alle Variablen in der Tabelle in einen Vektor der Länge stapeln , aber sie liegen in einer Hyperebene der Dimension - das ist die Entartung. Im 2x2-Fall ist das 1 Freiheitsgrad, und die 4 Zellenzahlen liegen entlang einer Linie im 4D-Raum. Aber es gibt nicht wirklich Raum, um die richtigen Details anzugeben. Sie haben es noch nicht ganz verstanden (obwohl Sie näher dran zu sein scheinen). Vielleicht möchten Sie so etwas wie Ihre erste Frage (inwiefern die Werte ungefähr normal sind) als Frage erneut veröffentlichen. r c ( r - 1 ) ( c - 1 )r×crc(r1)(c1)
Glen_b

Das ist schwer und sehr interessant. Wenn Sie jemals die Zeit haben, habe ich meine erste Frage hier erneut gestellt: stats.stackexchange.com/questions/142429/… .
Erosennin

12

Für so kleine Zahlen können Sie den genauen Test von Fisher verwenden:

> fisher.test(a)

        Fisher's Exact Test for Count Data

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

3

Bitte lesen Sie den Abschnitt "Annahmen" in Pearsons Chi-Quadrat-Testartikel .

Kurz gesagt, wenn die Anzahl in einer der Zellen in Ihrer Tabelle unter 5 liegt, ist eine der Annahmen nicht erfüllt. Ich denke, darauf bezieht sich die Fehlermeldung. In dem verlinkten Artikel finden Sie auch Informationen zur Korrektur, die angewendet werden kann.


6
Es gibt zwei Probleme mit Ihrer Faustregel für die Zählung von weniger als fünf. Das erste ist, dass sich die korrekte Aussage auf die erwarteten und nicht auf die tatsächlichen Zählungen bezieht . Das zweite ist, dass es zu streng ist. Die Näherung von funktioniert oft auch dann gut, wenn ein kleiner Teil der erwarteten Zählwerte kleiner als fünf ist. In diesem Fall, in dem alle Spaltenränder fünf oder weniger betragen, ist es offensichtlich, dass jede erwartete Anzahl klein ist, und daher wird empfohlen, vorsichtig zu sein. Auch die im Wikipedia-Artikel erwähnte Korrektur gilt nur für den einen DF-Fall; Dieser Fall hat 6 DF. χ2
Whuber

0

In Ihrer Hauptfrage geht es um die Stichprobengröße, aber ich sehe, dass mehr als zwei Gruppen verglichen werden. Wenn der p-Wert aus dem Test 0,05 oder weniger beträgt, ist es schwierig, die Ergebnisse zu interpretieren. Daher teile ich ein kurzes Skript, das ich in solchen Situationen verwende:

# 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')

Dieser Code generiert sowohl das Pearson-Chi-Quadrat als auch das Fisher-Chi-Quadrat. Es werden sowohl Zählungen als auch Anteile der einzelnen Tabelleneinträge erzeugt. Basierend auf den standardisierten Residuen oder Z-Werten ergibt sich

sresid

Liegt es außerhalb des Bereichs | 1,96 | dh kleiner als -1,96 oder größer als 1,96, dann ist es signifikant p <0,05. Das Vorzeichen würde dann anzeigen, ob es positiv verwandt oder negativ ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.