Wie kann ich dieselbe kategoriale Variable in zwei Populationen testen?


8

Ich habe Daten, die ungefähr so ​​aussehen:

ID         Status
01         A
02         G
03         E
...        ...
100        G

Sie haben die Idee, denke ich. Ich habe diese Daten aus zwei verschiedenen Populationen (Kohorten) und möchte die Verteilung der Statusvariablen in einer Population mit der Verteilung in einer anderen vergleichen. Die Frage, die ich beantworte, lautet ungefähr so: Wenn Sie es nicht besser wüssten, könnten diese aus derselben Bevölkerung stammen? Ich denke, dies bedeutet, dass ich das Chi einer Person im Quadrat ausführen sollte, obwohl ich nicht sicher bin. Ich bin mir auch nicht sicher, wie die Variable so transformiert werden soll, dass Sie den Test ausführen können. (Ich würde besonders gerne wissen, wie man das in R macht.)

Antworten:


10

Lassen Sie mich (a) zunächst die zugrunde liegende Idee und nicht die Mechanik erläutern - sie werden im Nachhinein offensichtlicher. Dann (b) werde ich über das Chi-Quadrat sprechen (und ob es angemessen ist - es kann nicht sein!), Und dann (c) werde ich darüber sprechen, wie es in R gemacht wird.

(a) Unter der Null sind die Populationen gleich. Stellen Sie sich vor, Sie fügen Ihre beiden Kohorten in einen großen Datensatz ein, fügen jedoch eine Spalte hinzu, die die Kohortenbezeichnungen enthält. Dann ist das Kohortenlabel unter der Null praktisch nur ein zufälliges Label, das Ihnen nichts mehr über die Verteilung sagt, aus der die Beobachtung stammt.

Bei der Alternative sind natürlich die Kohortenbezeichnungen von Bedeutung - wenn Sie die Kohortenbezeichnung kennen, wissen Sie mehr als nicht, weil die Verteilungen unter den beiden Bezeichnungen unterschiedlich sind.

(Dies deutet sofort auf eine Art Permutationstest / Randomisierungstest hin, bei dem eine Statistik - eine für die Alternative empfindliche -, die für die Stichprobe berechnet wurde, mit der Verteilung derselben Statistik verglichen wird, wobei die Kohortenbezeichnungen den Zeilen zufällig neu zugewiesen werden. Wenn Sie alles getan haben Mögliche Neuzuweisungen sind ein Permutationstest. Wenn Sie sie nur abtasten, handelt es sich um einen Randomisierungstest.)

(b) Wie macht man nun ein Chi-Quadrat?

Sie berechnen erwartete Werte unter der Null. Da die Kohortenbezeichnungen unter der Null keine Rolle spielen, berechnen Sie die erwartete Anzahl in jeder Zelle basierend auf der Gesamtverteilung:

                       Status
                 A   B   ...  E   ...  G ...      Total
  Cohort 1:     10  15       18                    84
  Cohort 2:      9   7       25                    78

  Total:        19  22   ... 43 ...               162

Wenn also die Verteilung gleich wäre, gäbe es keine Assoziation zwischen Kohorte und Status, und (abhängig von den Zeilensummen sowie den Spaltensummen) ist die erwartete Anzahl in Zelle Zeilensumme-i Spalte-Summe-j / Gesamtsumme×(i,j)×

Sie erhalten also nur einen gewöhnlichen Chi-Quadrat-Test der Unabhängigkeit .

JEDOCH!

Wenn die Statusbezeichnungen eine geordnete Kategorie bilden, wirft dieser Chi-Quadrat-Test viele Informationen weg - er hat eine geringe Leistung gegenüber interessanten Alternativen (z. B. eine leichte Verschiebung zu höheren oder niedrigeren Kategorien). Sie sollten in dieser Situation etwas passenderes tun - das heißt, das diese Bestellung berücksichtigt. Es gibt viele Möglichkeiten.

- -

(c) Nun, wie es in R gemacht wird - es hängt davon ab, wie Ihre Daten derzeit in R eingerichtet sind - es wäre wirklich hilfreich, ein reproduzierbares Beispiel wie eine Teilmenge Ihrer Daten zu haben!

Ich gehe davon aus, dass Sie es in einem Datenrahmen mit zwei Spalten haben, eine mit dem Status (ein Faktor) und eine mit der Kohorte (ein zweiter Faktor).

Wie so:

  status  cohort
1      B Cohort1
2      B Cohort1
3      D Cohort1
4      B Cohort1
5      C Cohort1
6      D Cohort1
. 
.
. 
25      G Cohort2
26      E Cohort2
27      E Cohort2
28      D Cohort2
29      C Cohort2
30      G Cohort2

Wenn das dann ein Datenrahmen namens statusresultswäre, würden Sie eine Tabelle erhalten, wie ich sie zuvor gemacht habe:

> with(statusresults,table(cohort,status))
         status
cohort    A B C D E F G
  Cohort1 2 6 7 3 0 0 0
  Cohort2 0 0 2 2 4 1 3

Und für den Chisquadrat-Test würden Sie einfach gehen:

> with(statusresults, chisq.test(status, cohort))

    Pearson's Chi-squared test

data:  status and cohort 
X-squared = 18.5185, df = 6, p-value = 0.005059

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

(Die Warnung ist, dass die erwarteten Zahlen in einigen Zellen niedrig sind, da ich eine sehr kleine Stichprobe verwendet habe.)

Wenn Sie Kategorien für den Status bestellt haben, sollten Sie dies sagen, damit wir andere Möglichkeiten für die Analyse als das einfache Chisquadrat diskutieren können.


Danke für das Chi-2 Beispiel! Was würden Sie empfehlen, wenn die Anzahl der Zellen tatsächlich so niedrig ist wie in Ihrem Beispiel? Dh die Voraussetzungen für einen Chi-Quadrat-Test sind verletzt?
Mark Heckmann

@ MarkHeckmann Es gibt wirklich keine "Voraussetzungen" als solche. Die Chi-Quadrat-Verteilung ist immer eine Annäherung an die wahre Nullverteilung des Chi-Quadrats, und es kommt darauf an, wie grob eine Annäherung toleriert werden kann (z. B. wie viel Ungenauigkeit bei p-Werten Sie in welchen Teilen der tolerieren können Verteilung). Die häufigste Faustregel ist zu streng, wie zahlreiche Artikel diskutieren. Wenn die erwarteten Zahlen jedoch einfach zu klein wären, würde ich eine Simulation aus der Nullverteilung des Chi-Quadrat-Tests verwenden oder eine geeignete Statistik auswählen und den in (a) beschriebenen Permutationsansatz verwenden.
Glen_b -State Monica

1

Sie haben Recht mit der Idee, einen Chi-Quadrat-Test durchzuführen. Hier ist es also:

#Create two data sets (id, outcome and group label)
Dat1 <- as.data.frame(cbind(1:999,sample(c("A","G","E"),999,replace=T,prob=c(.2,.4,.4)),"group1"))
Dat2 <- as.data.frame(cbind(1:500,sample(c("A","G","E"),500,replace=T,prob=c(.4,.2,.4)),"group2"))

#Combine data sets
Dat  <- rbind(Dat1,Dat2)

#Receive descriptive statistics and compute Chi-Square
attach(Dat)
table(V3,V2)
chisq.test(table(V3,V2))
detach(Dat)

Wenn es richtig ist, ist Ihr Chi-Quadrat signifikant, daher gibt es einen signifikanten Unterschied zwischen den Verteilungen der beiden Gruppen. Eine Referenz für den Anfang finden Sie unter: http://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test http://www.statmethods.net/stats/frequitudes.html


0

Dieses Papier könnte Sie interessieren [1]. Auszug aus der Zusammenfassung:
Das Ziel des Zwei-Stichproben-Tests (auch bekannt als Homogenitätstest) besteht darin, anhand von zwei Stichproben zu beurteilen, ob die Wahrscheinlichkeitsverteilungen hinter den Stichproben gleich sind oder nicht. In diesem Artikel schlagen wir eine neuartige nichtparametrische Methode für einen Test mit zwei Stichproben vor, die auf einem Schätzer für das Dichteverhältnis der kleinsten Quadrate basiert. Durch verschiedene Experimente zeigen wir, dass das vorgeschlagene Verfahren insgesamt einen kleineren Typ-II-Fehler erzeugt (dh die Wahrscheinlichkeit, die beiden Verteilungen als gleich zu beurteilen, wenn sie tatsächlich unterschiedlich sind) als ein Verfahren nach dem Stand der Technik mit geringfügig größerer Typ-I-Fehler (dh die Wahrscheinlichkeit, die beiden Verteilungen als unterschiedlich zu beurteilen, wenn sie tatsächlich gleich sind).

Die Autoren stellen auch Matlab-Code für denselben bereit [2].

[1] http://www.ms.ku-tokyo.ac.jp/2011/LSTT.pdf
[2] http://www.ms.ku-tokyo.ac.jp/software.html#uLSIF

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.