1 Ziel des Chi-Quadrat-Test in R
Der Chi-Quadrat-Unabhängigkeitstest prüft, zwei Variablen auf (Un-)Abhängigkeit.
Nullhypothese: Unabhängigkeit der Merkmale (Variablen).
Alternativhypothese: Keine Unabhängigkeit der Merkmale (Variablen).
Technisch ausgedrückt: Zur Prüfung verwendet dieser Test die quadrierten Abweichungen der tatsächlichen Häufigkeiten von den erwarteten Häufigkeiten unter Annahme von Unabhängigkeit. Anschließend werden diese quadrierten Abweichungen durch die erwarteten Häufigkeiten geteilt. Der Chi-Quadrat-Test wird auch als Korrelationsersatz verwendet und nutzt Kreuztabellen bzw. Kontingenztabellen als Grundlage.
2 Voraussetzungen des Chi-Quadrat-Test in R
- Zwei Variablen mit ordinaler oder nominaler Skalierung (metrisch wäre auch möglich, aufgrund der möglichen Menge an Ausprägungen muss die Stichprobe hier aber deutlich höher sein.
- Zwei oder mehr Ausprägungen dieser Variablen.
3 Beobachtete und erwartete Häufigkeiten
3.1 Beobachtete Häufigkeiten
Nach dem Einlesen der Daten startet man zunächst mit dem Erstellen einer Kreuztabelle. Der Zweck dessen ist die übersichtliche Darstellung der vorkommenden Häufigkeiten der verschiedenen Ausprägungskombinationen.
Beispiel: Ich möchte die Schulnote im Sportunterricht und das Geschlecht auf statistische Unabhängigkeit prüfen.
- Die eine Variable kommt mit ihren Ausprägungen in die Zeilen (im Beispiel: Geschlecht)
- Die andere Variable kommt mit ihren Ausprägungen in die Spalten (im Beispiel: Sportnote)
Hierzu verwendet man den Befehl xtabs(). Mit ihm wird die Kreuztabelle erstellt. Da ich die Daten nicht attached habe und im Dataframe df belasse, verwende ich „df$“ zur Variablenreferenzierung. Der Code hierfür sieht wie folgt aus:
kreuztabelle <- xtabs (~ df$Geschlecht + df$Sportnote)
kreuztabelle
Hiermit wird in einem Dataframe namens „kreuztabelle“ die Kreuztabelle aus Geschlecht und Sportnote erstellt. Lässt man sich diese ausgeben, sieht das in meinem Beispiel wie folgt aus:
df$Sportnote
df$Geschlecht 1 2 3 4 5 6
0 2 7 4 7 4 2
1 4 7 7 4 3 0
Die Häufigkeiten habe ich fett markiert.
Die Kreuztabelle ist wie folgt zu lesen: Für das Geschlecht 1 (weiblich) kommt die Note 5 dreimal vor. Das Geschlecht 0 (männlich) hat zweimal die Note 6.
3.2 Erwartete Häufigkeiten
Die erwarteten Häufigkeiten bei statistischer Unabhängigkeit (auch: „Nichtkorrelation“) kann man sich außerdem ausgeben lassen. Allerdings muss man hier noch etwas manuell rechnen, was in R aber kein Problem darstellt. Hierzu werden zunächst mit der sum()-Funktion alle Fälle aufsummiert. In meinem Fall sind es 51.
Danach definiere ich mir einen neuen Dataframe mit dem Namen „erwartete_häufigkeiten“ und bilde mit der Verknüpfung der outer()-Funktion und rowSums() sowie ColSums() die Zeilen bzw. Spaltensumme. Das ist wichtig, weil für die erwarteten Häufigkeiten die jeweiligen Zeilen- und Spaltensummen addiert und durch die Gesamtzahl der Beobachtungen geteilt werden. Im Detail muss diese Rechnung aber nicht nachvollzogen werden. Der Code hierfür lautet:
n
Lässt man sich die Tabelle mit den erwarteten Häufigkeiten ausgeben, erhält man folgenden Output:
1 2 3 4 5 6
0 3.058824 7.137255 5.607843 5.607843 3.568627 1.0196078
1 2.941176 6.862745 5.392157 5.392157 3.431373 0.9803922
Die Lesart ist analog zu den beobachteten Häufigkeiten. Für das Geschlecht 1 ist die erwartete Häufigkeit bei der Note 5: 3,43. Zur Erinnerung: sie wurde 3-mal beobachtet. Die Note 6 beim Geschlecht 0 wurde 1,02-mal erwartet. Oben wurde sie zweimal beobachtet.
So kann man jetzt zellenweise vorgehen und sich einen Eindruck verschaffen, wo erwartete und beobachtete Häufigkeiten mehr oder weniger stark voneinander abweichen. Eine Faustregel, was eine große Abweichung gibt, existiert nicht. Dies ist immer in Relation zum Stichprobenumfang zu sehen.
3.3 Übersichtstabelle
Wer es gerne etwas einfacher und übersichtlicher hat, kann auch eine vollständige Übersichtstabelle mit beobachtten sowie erwarteten Häufigkeiten in R erstellen lassen. Hierzu dient uns die CrossTable()-Funktion des "gmodels"-Pakets.
Ich habe im Gegensatz zu oben für eine etwas übersichtlichere Darstellung die Spalten und Zeilen getauscht, also Sportnote und Geschlecht in der xtabs()-Funktion getauscht. Die prop = FALSE-Argumente blenden unnötige Prozentwerte (Spaltenweise, Zeilenweise, Gesamt sowie Chi-Quadrat-Beitrag) aus. Wesentlich ist das Argument expected = TRUE.
kt expected = TRUE)
Im Ergebnis erhält man folgende Tabelle:
Cell Contents
|-------------------------|
| N |
| Expected N |
|-------------------------|
Total Observations in Table: 51
| df$Geschlecht
df$Sportnote | 0 | 1 | Row Total |
-------------|-----------|-----------|-----------|
1 | 2 | 4 | 6 |
| 3.059 | 2.941 | |
-------------|-----------|-----------|-----------|
2 | 7 | 7 | 14 |
| 7.137 | 6.863 | |
-------------|-----------|-----------|-----------|
3 | 4 | 7 | 11 |
| 5.608 | 5.392 | |
-------------|-----------|-----------|-----------|
4 | 7 | 4 | 11 |
| 5.608 | 5.392 | |
-------------|-----------|-----------|-----------|
5 | 4 | 3 | 7 |
| 3.569 | 3.431 | |
-------------|-----------|-----------|-----------|
6 | 2 | 0 | 2 |
| 1.020 | 0.980 | |
-------------|-----------|-----------|-----------|
Column Total | 26 | 25 | 51 |
-------------|-----------|-----------|-----------|
4 Durchführung des Chi-Quadrat-Tests in R
4.2 Chi-Quadrat-Test
Den Chi-Quadrat-Test kann man prinzipiell auch ohne die erwarteten und beobachteten Häufigkeiten berechnen. Allerdings werden wir gleich noch sehen, dass zumindest die beobachteten Häufigkeiten (Abschnitt 3.1) sehr sinnvoll sein können.
Der Chi-Quadrat-Test wird mit der Funktion chisq.test() berechnet. Hierfür sind die beiden auf statistische Unabhängigkeit zu testenden Variablen einfach per Komma getrennt, als Argumente hinzuzufügen.
chisq.test(df$Geschlecht, df$Sportnote)
Führt man den Chi-Quadrat-Test für mein Beispiel durch, erhält man folgenden Output:
Pearson's Chi-squared test
data: df$Geschlecht and df$Sportnote
X-squared = 4.428, df = 5, p-value = 0.4896
Grundlegendes Interesse besteht am p-Wert. Der beträgt hier 0,4896 und ist nicht in der Lage, die Nullhypothese zu verwerfen. Zur Erinnerung, die Nullhypothese lautet: zwischen den Variablen besteht statistische Unabhängigkeit. Oder salopp formuliert: sie korrelieren nicht statistisch miteinander.
Die Freiheitsgrade sind das Produkt aus der Anzahl Spalten - 1 und Anzahl Zeilen - 1. Im Beispiel (6-1) * (2-1) = 5.
4.2 Exakter Fisher-Test
Wer sich bereits mit dem Chi-Quadrat-Test auseinandergesetzt hat, wird vermutlich schon mal etwas vom Fisher-Test oder dem exakten Fisher-Test gehört haben. Der wird immer dann angewandt, wenn wenigstens eine der erwarteten Zellhäufigkeiten unter 5 liegt. Warum? Die approximative Berechnung des p-Wertes über die Chi-Quadrat-Verteilung ist verzerrt. Da ich in meinem Beispiel mehrfach erwartete Zellhäufigkeiten < 5 habe (siehe Abschnitt 3.2), ist der Fisher-Test zu rechnen - daher auch die Erstellung der Kreuztabelle mit den erwarteten Häufigkeiten.
Demzufolge wird der exakte Fisher-Test gerechnet, was mit fisher.test() gelingt:
fisher.test(df$Geschlecht, df$Sportnote)
Für den Fisher-Test erhält man folgenden Output:
Fisher's Exact Test for Count Data
data: df$Geschlecht and df$Sportnote
p-value = 0.5736
alternative hypothesis: two.sided
Hier kann man recht gut erkennen, dass der p-Wert mit 0,5736 einen deutlich anderen Wert annimmt, als mit dem einfachen Chi-Quadrat-Test (p = 0,4896).
Zugegeben, in meinem Beispiel ändert sich mit der Beibehaltung der Nullhypothese (statistische Unabhängigkeit zwischen den Merkmalen) nichts. Man kann sich aber sicher vorstellen, dass sich bei p-Werten um die typisch gewählte Verwerfungsgrenze von 0,05 herum, durchaus höhere oder niedrigere Signifikanzen ergeben können und es zu einer nachträglichen Verwerfung oder Beibehaltung der Nullhypothese kommen kann.
Der zusätzliche Schritt mit exaktem Test nach Fisher ist demnach vor allem zur Begrenzung des Fehlers 1. Art und des Fehlers 2. Art notwendig.
5 Interpretation der Ergebnisse des Chi-Quadrat-Test in R
Die Nullhypothese statistischer Unabhängigkeit zwischen Sportnote und dem Geschlecht konnte im Beispiel aufgrund eines zu hohen p-Wertes nicht verworfen werden. Wenn man so will, kann man von keinem Zusammenhang, also keiner Korrelation sprechen.
Demzufolge würde ich nicht davon ausgehen, dass eines der beiden Geschlechter überhäufig eine bestimmte Note erzielt. Oder ganz plump: ich kann nicht zeigen, dass Männer bessere Sportnoten erzielen als Frauen oder umgekehrt.
6 Ermittlung der Effektstärke des Chi-Quadrat-Tests
Im Falle beobachtbarer Abhängigkeit sollte eine Effektstärke berechnet werden. In einigen Disziplinen wird die Effektstärke unabhängig davon gefordert. Es ist also auf fachspezifische Anforderungen zu achten.
Für den Chi-Quadrat-Unabhängigkeitstest ist die entsprechende Effektstärke Cohen's ω (Griechischer Buchstabe Omega). Aufgrund der Ähnlichkeit von ω und w, findet sich häufig auch Cohen's w. Cohen's ω kann mittels der cohenW()-Funktion des rcompanion-Pakets ermittelt werden:
library(rcompanion)
cohenW(df$Geschlecht, df$Sportnote)
[1] Cohen w
0.2947
Das Ergebnis ist ein Cohen‘s ω von 0.295.
Zur Einordnung sollten a) vergleichbare Studien, b) fachspezifischen Grenzen oder, sofern beides nicht vorhanden, c) Cohen(1992), S. 157 verwendet werden.
- Nach Cohen (1992) ist ein ω zwischen 0,1 und 0,3 ein schwacher/kleiner Effekt,
- ein ω zwischen 0,3 und 0,5 ein mittlerer Effekt und
- ab 0,5 ist es ein starker/großer Effekt.
7 Post-hoc-Tests
Mit posthoc-Tests möchte man herausfinden, welche Abweichung zwischen erwarteten und beobachteten Häufigkeiten besonders groß ("statistisch signifikant") sind (Haberman (1973))..
Zunächst muss ein adjustiertes Alpha festgelegt werden, indem man mit der Bonferroni-Korrektur arbeitet. Hierbei wird das ursprüngliche Alpha durch die Anzahl der Zellen geteilt. In meinem Beispiel habe ich Alpha auf das typische Niveau von 5%, also 0,05 festgelegt. Ich muss es im Rahmen der Bonferroni-Korrektur folglich durch 12 teilen, weil ich zwei Geschlechter mit sechs Schulnoten habe (2*6=12). In R kann man das auch mit nrow() und ncol() bequem lösen und die Anzahl der Zeilen und Spalten der Kreuztabelle (kt) zählen lassen und miteinander multiplizieren.
Mit der qnorm()-Funktion können wir den adjustierten p-Wert in einen kritischen Wert umwandeln, welcher dann mit den standardisierten Residuen verglichen wird.
Die standardisierten Residuen kann man sich über die chisq.test()-Funktion mit $stdres ausgeben lassen.
# Alpha adjustieren
alpha = 0.05
alpha_adj # Kritischen Wert aus Alpha ermitteln (analog zu Field (2012), S. 665
qnorm(alpha_adj/2)
# Standardisierte Residuen ausgeben lassen
chisq.test(kt)$stdres
Aus obigem Code entsteht folgende Ausgabe:
> qnorm(alpha_adj/2)
[1] -2.86526
> chisq.test(kt)$stdres
df$Geschlecht
df$Sportnote 0 1
1 -0.92053496 0.92053496
2 -0.08615125 0.08615125
3 -1.09500455 1.09500455
4 0.94811370 -0.94811370
5 0.35113630 -0.35113630
6 1.41476848 -1.41476848
Der ermittelte kritische Wert ist im Beispiel -2.86526
Standardisierte Residuen die kleiner als -2.865 sind, repräsentieren "statistisch signifikante" Abweichungen der beobachteten von den erwarteten Häufigkeiten.
Sollte der kritische Wert positiv sein, müssen die standardisierten Residuen größer als der kritische Wert sein.
In meinem Beispiel gibt es keine standardisierten Residuen, die kleiner als -2.865 sind. Das war auch zu erwarten, weil bereits der Chi-Quadrat-Test bzw. Fisher-Test keinen hinreichend kleinen p-Wert hatten.
8 Videotutorials
https://www.youtube.com/watch?v=YJUuyaC0x48/ https://www.youtube.com/watch?v=7B6NbQAlSZw/ https://www.youtube.com/watch?v=rYNYlfWYle8/
9 Reporting
Fachspezifische Anforderungen sind in jedem Fall zu beachten! Häufig wird folgendes berichtet: Der Chi-Quadrat-Wert (X² = 4.428), die Anzahl der Beobachtungen (N = 51), die Freiheitsgrade (df = 5) sowie der p-Wert (0.4896) sind zu berichten. Im Falle von erwarteten Häufigkeiten < 5 ist allerdings der exakte p-Wert nach Fisher zu berichten (p = 0.5736). Im Falle eines hinreichend kleinen p-Wertes werden zudem die Merkmalskombinationen berichtet, deren standardisiertes Residuum über dem positiven kritischen Wert bzw. unter dem negativen kritischen Wert liegen.
Beispielformulierung: Der Chi-Quadrat-Test zeigte Unabhängigkeit der Merkmale Geschlecht und Sportnote mit X² (5, N = 51) = 4.428, p = 0.57.
Sollte der p-Wert hinreichend klein sein und die Nullhypothese verworfen werden, werden zusätzlich die Merkmalskombinationen angegeben, bei denen erwartete und beobachtete Häufigkeiten statistisch voneinander abweichen. Die jeweiligen Häufigkeiten können hinzugefügt werden.
10 Quellen
- Cohen, J. (1992). A power primer. Psychological bulletin, 112(1), 155-159.
- Field, A., Miles, J., Field, Z. (2012). Discovering Statistics Using R. Vereinigtes Königreich: SAGE Publications.
- Fisher-Test: Fisher, R. A. (1925). Statistical methods for research workers. Edinburgh: Oliver and Boyd.
- Haberman, S. J. (1973). The analysis of residuals in cross-classified tables. Biometrics, 205-220.
11 Datensatz zum Download
