R Anleitungen

R: Häufigkeiten und Kreuztabellen

Um eine einzelne kategoriale Variable zu beschreiben, verwenden wir Häufigkeitstabellen. Um die Beziehung zwischen zwei kategorialen Variablen zu beschreiben, verwenden wir eine spezielle Art von Tabelle, die Kreuztabelle genannt wird (auch Kontingenztabelle oder Kontingenztafel genannt). Bei einer Kreuztabelle bestimmen die Kategorien der einen Variablen die Zeilen der Tabelle, und die Kategorien der anderen Variablen bestimmen die Spalten. Die Zellen der Tabelle enthalten die Anzahl, wie oft eine bestimmte Kombination von Kategorien vorgekommen ist. Die Ränder der Tabelle enthalten in der Regel die Gesamtzahl der Beobachtungen für diese Kategorie.

R Code
kreuztabelle <- table(Daten$A, Daten$B) # A werden Zeilen sein, B die Spalten
 
print(kreuztabelle)    # Häufigkeiten anzeigen
summary(kreuztabelle)  # Chi² Inferenzstatistik berechnen

margin.table(kreuztabelle, 1)  # Summiert die Häufigkeiten der Zeilen
margin.table(kreuztabelle, 2)  # Summiert die Häufigkeiten der Spalten

prop.table(kreuztabelle)     # Prozente
table() ignoriert standardmäßig fehlende Werte (NAs). Um fehlende Werte dennoch als eigenständige Kategorie anzeigen zu lassen, kann table mit dem parameter exclude=NULL aufgerufen werden.

Kreuztabellen mit mehr als 3 Ebenen

Natürlich ist es auch möglich, mehr als zwei Ebenen in der Kreuztabelle zu haben. Mit jeder zusätzlichen Ebene wird die Visualisierung allerdings schwieriger. Standardmäßig gibt uns R für jede Stufe der Dritten Variable (bzw. für jede Stufenkombination, wenn es mehr als drei Variablen sind) eine eigene Kreuztabelle aus. Die Funktion ftable() flacht diese Struktur ab und gibt uns eine übersichtliche Kreuztabelle aus.

R Code
kreuztabelle <- table(A, B, C)
ftable(kreuztabelle)

Formel für Kreuztabellen

Oft ist es einfacher, die Struktur einer Kreuztabelle mit einer Formel zu definieren, vor allem, wenn man Effekte selbst definieren möchte. xtabs() nimmt als erstes Argument eine Formel, die wie in dem Beispiel unten aufgebaut sein kann. A, B und C sind Spalten in dem Datensatz und sollten mit einem Pluszeichen voneinander getrennt werden. xtabs kann dabei auch mit den anderen Funktionen verwendet werden, die wir hier gezeigt haben.

R Code
kreuztabelle <- xtabs(~ A + B + C, data=Daten)
ftable(kreuztabelle)
prop.table(kreuztabelle)

Inferenzstatistik

Nachdem wir unsere Kreuztabelle definiert haben, wollen wir in der Regel auch noch irgendeine Form von statistischen Verfahren berechnen, dass uns sagt, ob die einzelnen Variablen der Kreuztabelle voneinander unabhängig sind.

Chi²-Test für Unabhängigkeit

Das verbreitetste Verfahren zur statistischen Analyse von Kreuztabellen ist der Chi²-Test. Er überprüft, ob die Variablen der Kreuztabelle von einander unabhängig sind. In R kann er für eine Kreuztabelle mit zwei Variablen mit beliebig vielen Kategorien (n×m) einfach mit der Funktion chisq.test() aufgerufen werden. Für größere Tabellen mit mehr als zwei Variablen, liefert die Funktion summary() ebenfalls die Chi²-Statistik.

chisq.test() erlaubt es über die Parameter simulate.p.value = TRUE und B = 5000 eine Monte-Carlo Simulation durchzuführen. Dies ist vor allem dann von Vorteil, wenn Zellhäufigkeiten unter 5 sind oder wenn robustere Ergebnisse gefragt sind.

Exakter Test nach Fisher

Wie der Name schon sagt, ist der Test von Fisher ein exaktes Verfahren. Es kann für Kreuztabellen mit Zwei Variablen, also n×m, wie auch der Chi²-Test. Er gehört zu einer Klasse von exakten Tests, die so genannt werden, weil die Signifikanz (d.h. der p-Wert) exakt berechnet werden kann, anstatt sich auf eine Annäherung zu verlassen, die im erst Grenzwert exakt wird, wenn der Stichprobenumfang ins Unendliche ansteigt, wie es bei vielen statistischen Tests der Fall ist. Auch wenn er in der Praxis vor allem bei kleinen Stichprobengrößen eingesetzt wird, ist er für alle Stichprobengrößen gültig.

Der exakte Test nach Fisher kann in R mit der Funktion fisher.test() aufgerufen werden. Wie auch chisq.test() kann der p-Wert durch eine Monte-Carlo Simulation berechnet werden.

Cochran-Mantel-Haenszel-Test

Der Cochran-Mantel-Haenszel-Test ist ein Assoziationstest für Daten aus verschiedenen Quellen oder aus geschichteten Daten aus einer Quelle. Es handelt sich um eine Verallgemeinerung des McNemar-Tests, der sich für jedes experimentelle Design einschließlich Fallkontrollstudien und prospektive Studien eignet. Während der McNemar-Test nur Datenpaare (d.h. eine 2×2 Kreuztabelle) behandeln kann, erlaubt der Cochran-Mantel-Haenszel-Test die Analyse von mehreren 2×2×k-Tabellen aus geschichteten Stichproben bzw. die verallgemeinerte Version in R Kreuztabellen beliebiger Größe. Damit wird der Cochran-Mantel-Haenszel-Test dann verwendet, um die bedingte Assoziation zweier nominaler Variablen bei Vorhandensein einer dritten kategorialen Variablen zu testen.

Der Cochran-Mantel-Haenszel-Test kann einfach durch die Funktion mantelhaen.test() aufgerufen werden. Im Fall einer 2×2×k-Tabelle empfiehlt es sich noch zusätzlich den Parameter exact=TRUE zu definieren, um eine exakte Statistik zu erhalten.

Ergebnisse visuell darstellen

Für zwei Variablen kann beispielsweise ein geschichtetes Balkendiagramm zur Visualisierung verwendet werden.

Das Paket vcd erlaubt es auch komplexe Tabellenstrukturen zu visualisieren, beispielsweise mit einem Mosaik-Plot oder einem Assoziationsplot.

Das Paket ca enthält zahlreiche Funktionen, um eine Korrespondenzanalyse durchzuführen, bei die Beziehungen der Variablen geometrisch untersucht werden.