Häufigkeiten und Kreuztabellen in R
Dieser Abschnitt beschreibt die Erstellung von Häufigkeits- und Kontingenztabellen aus kategorialen Variablen sowie Unabhängigkeitstests, Assoziationsmaße und Methoden zur grafischen Darstellung der Ergebnisse.
Frequenztabellen erstellen
R bietet viele Methoden, um Häufigkeits- und Kontingenztabellen zu erstellen. Drei davon werden im Folgenden beschrieben. In den folgenden Beispielen gehen wir davon aus, dass A, B und C kategoriale Variablen sind.
Tabelle
Du kannst Häufigkeitstabellen mit der Funktion table( ), Tabellen mit Proportionen mit der Funktion prop.table( ) und Grenzhäufigkeiten mit margin.table( ) erstellen.
# 2-Way Frequency Table
attach(mydata)
mytable <- table(A,B) # A will be rows, B will be columns
mytable # print table
margin.table(mytable, 1) # A frequencies (summed over B)
margin.table(mytable, 2) # B frequencies (summed over A)
prop.table(mytable) # cell percentages
prop.table(mytable, 1) # row percentages
prop.table(mytable, 2) # column percentages
table( ) kann auch mehrdimensionale Tabellen erstellen, die auf 3 oder mehr kategorialen Variablen basieren. In diesem Fall kannst du die Funktion ftable( ) verwenden, um die Ergebnisse ansprechender zu drucken.
# 3-Way Frequency Table
mytable <- table(A, B, C)
ftable(mytable)
Die Tabelle ignoriert fehlende Werte. Um NA als Kategorie in die Zählungen aufzunehmen, füge die Tabellenoption exclude=NULL ein, wenn die Variable ein Vektor ist. Wenn die Variable ein Faktor ist, musst du mit newfactor <- factor(oldfactor, exclude=NULL) einen neuen Faktor erstellen.
xtabs
Mit der Funktion xtabs ( ) kannst du Kreuztabellen mit formelähnlichen Eingaben erstellen.
# 3-Way Frequency Table
mytable <- xtabs(~A+B+c, data=mydata)
ftable(mytable) # print table
summary(mytable) # chi-square test of indepedence
Wenn eine Variable auf der linken Seite der Formel steht, wird davon ausgegangen, dass es sich um einen Vektor von Häufigkeiten handelt (nützlich, wenn die Daten bereits tabellarisch erfasst wurden).
Crosstable
Die Funktion CrossTable( ) im Paket gmodels erstellt Kreuztabellen nach dem Muster von PROC FREQ in SAS oder CROSSTABS in SPSS. Es hat eine Fülle von Optionen.
# 2-Way Cross Tabulation
library(gmodels)
CrossTable(mydata$myrowvar, mydata$mycolvar)
Es gibt Optionen zur Angabe von Prozentsätzen (Zeile, Spalte, Zelle), zur Angabe von Dezimalstellen, zur Erstellung von Chi-Quadrat-, Fisher- und McNemar-Unabhängigkeitstests, zur Angabe von erwarteten Werten und Restwerten (Pearson, standardisiert, angepasst standardisiert), zur Angabe von fehlenden Werten als gültig, zur Angabe von Zeilen- und Spaltentiteln und zur Formatierung als SAS- oder SPSS-Ausgabe (siehe help(CrossTable) ).
Tests der Unabhängigkeit
Chi-Quadrat-Test
Bei 2-Wege-Tabellen kannst du chisq.test(mytable) verwenden, um die Unabhängigkeit der Zeilen- und Spaltenvariablen zu testen. Standardmäßig wird der p-Wert anhand der asymptotischen Chi-Quadrat-Verteilung der Teststatistik berechnet. Optional kann der p-Wert über eine Monte-Carlo-Simultanrechnung ermittelt werden.
Exakter Fisher-Test
fisher.test(x) liefert einen exakten Test auf Unabhängigkeit. x ist eine zweidimensionale Kontingenztabelle in Matrixform.
Mantel-Haenszel-Test
Verwende die Funktion mantelhaen.test(x), um einen Cochran-Mantel-Haenszel-Chi-Quadrat-Test auf die Nullhypothese durchzuführen, dass zwei nominale Variablen in jeder Schicht bedingt unabhängig sind, unter der Annahme, dass es keine dreifache Wechselwirkung gibt. x ist eine 3-dimensionale Kontingenztabelle, wobei die letzte Dimension die Schichten bezeichnet.
Loglineare Modelle
Du kannst die Funktion loglm( ) aus dem MASS-Paket verwenden, um log-lineare Modelle zu erstellen. Nehmen wir zum Beispiel an, wir haben eine 3-fache Kontingenztabelle mit den Variablen A, B und C.
library(MASS)
mytable <- xtabs(~A+B+C, data=mydata)
Wir können die folgenden Tests durchführen:
Gegenseitige Unabhängigkeit: A, B und C sind paarweise unabhängig. ```R loglm(~A+B+C, mytable)
**Teilweise Selbstständigkeit** : A ist teilweise unabhängig von B und C (d.h. A ist unabhängig von der zusammengesetzten Variable BC). ```R loglin(~A+B+C+B*C, mytable)
Bedingte Unabhängigkeit: A ist unabhängig von B, wenn C gegeben ist. ```R loglm(~A+B+C+AC+BC, mytable)
**Keine Drei-Wege-Interaktion** ```R loglm(~A+B+C+A*B+A*C+B*C, mytable)
Martin Theus und Stephan Lauer haben einen hervorragenden Artikel über die Visualisierung loglinearer Modelle mithilfe von Mosaikdiagrammen geschrieben.
Maßnahmen der Assoziation
Die Funktion assocstats(mytable) im vcd-Paket berechnet den Phi-Koeffizienten, den Kontingenzkoeffizienten und das Cramer's V für eine rxc-Tabelle. Die Funktion kappa(mytable) im vcd-Paket berechnet Cohens kappa und gewichtetes kappa für eine Konfusionsmatrix. Im Artikel von Richard Darlington über Assoziationsmaße in Kreuztabellen findest du eine hervorragende Übersicht über diese Statistiken.
Ergebnisse visualisieren
Verwende Balken- und Kreisdiagramme, um Häufigkeiten in einer Dimension zu visualisieren.
Verwende das vcd-Paket zur Visualisierung von Beziehungen zwischen kategorialen Daten (z.B. Mosaik- und Assoziationsdiagramme).
Verwende das ca-Paket für die Korrespondenzanalyse (visuelle Untersuchung der Beziehungen zwischen Zeilen und Spalten in Kontingenztabellen).
Um die Erstellung dieser Diagramme zu üben, kannst du den Datenvisualisierungskurs im DataCamp besuchen.
Umwandlung von Häufigkeitstabellen in eine "Original"-Flachdatei
Schließlich kann es vorkommen, dass du statt der Häufigkeitstabelle den ursprünglichen "Flat File"-Datenrahmen benötigst. Marc Schwartz hat auf der Rhelp-Mailingliste Code bereitgestellt, mit dem du eine Tabelle wieder in einen Datenrahmen umwandeln kannst.