Zusammenhang zwischen kategorialen Variablen
Darstellung von Zusammenhängen
Cramérs V
Herleitung von Cramérs V
Zusammenfassung
Praktische Umsetzung mit Statistiksoftware
Beispieldaten herunterladen: dat.csv
Datenbeispiel
Unser Beispieldatensatz (hypothetisches Datenbeispiel) liegt als CSV-Datei vor. Die Daten können mit der read.csv-Funktion eingelesen werden (der korrekte Pfad zum Speicherort muss angegeben werden):
dat <- read.csv("C:/... Pfad .../dat.csv")
Die Funktion erzeugt ein Objekt vom Typ data.frame, dem wir links vom Zuweisungspfeil (<-) den Namen "dat" geben.
Der Datensatz enthält u.a. die Variablen punkte (erzielte Punktzahl in einem Test), schlafdauer (Schlafdauer in der Nacht vor dem Test in Std.), lernzeit (insgesamt für den Test aufgewendete Lernzeit in Std.) und lsport (Lieblingssportart). Einzelne Variablen können als Datensatzname$Variablenname angesprochen werden, z.B.:
dat$punkte
[1] 93.0 76.5 79.5 85.0 66.5 71.0 56.5 77.0 59.0 63.5 72.0 70.0 96.0 72.0 62.5 76.5 86.0 57.5
[19] 60.0 73.5 64.5 54.0 85.0 64.0 57.5 54.0 76.5 41.0 58.5 87.5 62.5 62.5 100.5 86.0 66.5 79.5
[37] 77.0 67.5 58.5 92.5 94.5 77.0 76.0 67.0 44.5 86.5 70.0 81.5 90.5 78.0 80.5 74.0 56.5 60.0
[55] 83.0 70.0 49.0 57.0 48.0 70.5 96.5 106.0 65.5 86.5 87.5 89.5 64.0 86.0 62.0 94.5 52.0 73.5
[73] 77.0 83.5 62.5 52.5 51.5 86.5 70.5 57.5 68.0 103.0 79.0 75.0 113.5 78.0 104.5 84.5 63.5 46.0
[91] 102.5 77.0 73.5 71.0 106.0 79.0 77.5 87.0 92.5 11.5 83.5 86.5 78.5 67.5 71.0 61.5 31.0 50.5
[109] 87.5 66.5 67.0 60.5 61.5 83.5 66.0 97.0 79.5 83.5 82.0 63.0
Die Ausgabe zeigt die 120 beobachteten Werte der Variable punkte.
Kreuztabellen und Cramérs V
In diesem Beispiel interessieren wir uns dafür, ob zwischen der Variable nachhilfe und der Mathenote zeugnis_mathe_note ein Zusammenhang besteht.
Um dies zu überprüfen, erstellen wir aus den beiden Variablen eine Kreuztabelle mit der Funktion table(). Wir speichern die Tabelle in einem Objekt mit dem Namen tab_mathe_nh.
Insgesamt haben die Schüler*innen vier verschiedene Mathenoten auf ihren Zeugnissen erreicht. Für jede Schüler*in kann angegeben werden, ob sie*er regelmäßig Nachhilfe in Anspruch genommen ("1") hat oder nicht ("0"):
tab_mathe_nh <- table(dat$zeugnis_mathe_note, dat$nachhilfe)
tab_mathe_nh
0 1
ausreichend 0 2
befriedigend 27 15
gut 37 30
sehr gut 5 4
Die absoluten Häufigkeiten der acht möglichen Ausprägungen können zusammen mit den Zeilen- und Spaltenhäufigkeiten und der Gesamtsumme mit addmargins() dargestellt werden:
addmargins(tab_mathe_nh)
0 1 Sum
ausreichend 0 2 2
befriedigend 27 15 42
gut 37 30 67
sehr gut 5 4 9
Sum 69 51 120
Es ist ebenfalls möglich mit rowSums() nur die Zeilensumme und mit colSums() nur die Spaltensumme zu betrachten:
rowSums(tab_mathe_nh)
ausreichend befriedigend gut sehr gut
2 42 67 9
colSums(tab_mathe_nh)
0 1
69 51
Relative Häufigkeiten
Mit prop.table() wird die relative Häufigkeit der Ausprägungen im Verhältnis zur Gesamthäufigkeit dargestellt. Wenn hier wieder addmargins() verwendet wird, liefert R zusätzlich auch die Zeilen- und Spaltenhäufigkeit, sowie die Häufigkeit der Gesamtsumme (diese muss 1 betragen):
prop.table(tab_mathe_nh)
0 1
ausreichend 0.00000000 0.01666667
befriedigend 0.22500000 0.12500000
gut 0.30833333 0.25000000
sehr gut 0.04166667 0.03333333
addmargins(prop.table(tab_mathe_nh))
0 1 Sum
ausreichend 0.00000000 0.01666667 0.01666667
befriedigend 0.22500000 0.12500000 0.35000000
gut 0.30833333 0.25000000 0.55833333
sehr gut 0.04166667 0.03333333 0.07500000
Sum 0.57500000 0.42500000 1.00000000
Diesselbe Tabelle kann mit prozentualen Häufigkeiten ausgegeben werden, indem die relativen Häufigkeiten mit 100 multipliziert werden. Um eine angemessene Darstellunf zu erhalten, kann das Ergebnis mit digits = 2 auf zwei Nachkommastellen gerundet werden:
addmargins(prop.table(tab_mathe_nh))*100
0 1 Sum
ausreichend 0.000000 1.666667 1.666667
befriedigend 22.500000 12.500000 35.000000
gut 30.833333 25.000000 55.833333
sehr gut 4.166667 3.333333 7.500000
Sum 57.500000 42.500000 100.000000
round(addmargins(prop.table(tab_mathe_nh))*100, digits = 2)
0 1 Sum
ausreichend 0.00 1.67 1.67
befriedigend 22.50 12.50 35.00
gut 30.83 25.00 55.83
sehr gut 4.17 3.33 7.50
Sum 57.50 42.50 100.00
Zeilen- und Spaltenprozente
Zeilenprozente können in der Funktion prop.table() mit dem Argument margin=1 angefordert werden. Für Spaltenprozente wird *margin=2 angegeben:
prop.table(tab_mathe_nh, margin=1)
0 1
ausreichend 0.0000000 1.0000000
befriedigend 0.6428571 0.3571429
gut 0.5522388 0.4477612
sehr gut 0.5555556 0.4444444
prop.table(tab_mathe_nh, margin=2)
0 1
ausreichend 0.00000000 0.03921569
befriedigend 0.39130435 0.29411765
gut 0.53623188 0.58823529
sehr gut 0.07246377 0.07843137
<!-- AN, 08.04.2020: Es ist durchaus möglich das für eine noch bessere Darstellung der Ergebnisse die Befehle rowPercents() und colPercents() zu verwenden. Ich musste dafür allerdings 6 verschiedene Pakete installieren (abind, Rcmdr,RcmdrMisc, car, glue, backports). Ich weiß nicht, inwiefern diese Befehle nicht eher verwirren, statt helfen. -->
Cramérs V
Cramérs V kann am einfachsten mit der Funktion cramersV() aus dem Paket lsr berechnet werden. Dafür muss das Paket nur vorher installiert (install.packages()) und geladen (library()) werden:
install.packages("lsr")
library(lsr)
cramersV(tab_mathe_nh)
[1] 0.1744807
Mit einem Cramérs V von ca. 0.174 besteht nur ein schwacher Zusammenhang zwischen der Zeugnisnote im Fach Mathematik und der regelmäßigen Teilnahme an einem Nachhilfeunterrricht.
Beispieldaten herunterladen: daten_stata.dta
Daten einlesen
Der Datensatz wird mit dem Befehl use geöffnet (der Pfad zum Speicherort muss entsprechend angepasst werden):
use "C:\... Pfad ...\daten_stata.dta"
Kreuztabellen
In diesem Beispiel interessieren wir uns dafür, ob zwischen der Variable nachhilfe und der Mathenote zeugnis_mathe_note ein Zusammenhang besteht.
Eine Kreuztabelle der beiden Variablen kann mit der Funktion tabulate berechnet werden. Randsummen, also die univariaten Verteilungen der beiden Variablen werden mit ausgegeben:
tabulate zeugnis_mathe_note nachhilfe
>zeugnis_math | nachhilfe
e_note | 0 1 | Total
-------------+----------------------+----------
sehr gut | 0 2 | 2
gut | 27 15 | 42
befriedigend | 37 30 | 67
ausreichend | 5 4 | 9
-------------+----------------------+----------
Total | 69 51 | 120
In dieser Kreuztabelle sind die absoluten Häufigkeiten der acht möglichen Ausprägungen dargestellt. Für jede erreichte Zeugnisnote im Fach Mathematik wird in dieser Tabelle angegeben, wie viele Schüler*\innen regelmäßig Nachhilfe in Anspruch genommen ("1") haben und wie viele nicht ("0"). Zusätzlich werden unter "Total" jeweils die Zeilenhäufigkeiten (2, 42, 67, 9), die Spaltenhäufigkeiten (69, 51) und die Anzahl aller Beobachtungen (120) ausgegeben.
<!-- AN, 13.05.2020: Mit Stata können die Zeilen- und Spaltenhäufigkeiten nicht separat ermittelt werden, oder? -->Mit der Option cell können relative Häufigkeiten in Bezug zur Gesamtsumme ausgegeben werden:
. tabulate zeugnis_mathe_note nachhilfe, cell
+-----------------+
| Key |
|-----------------|
| frequency |
| cell percentage |
+-----------------+
Zeugnisnote | Nachhilfe in
Mathematik: | Mathematik
Schulnoten | 0 1 | Total
-------------+----------------------+----------
ausreichend | 0 2 | 2
| 0.00 1.67 | 1.67
-------------+----------------------+----------
befriedigend | 27 15 | 42
| 22.50 12.50 | 35.00
-------------+----------------------+----------
gut | 37 30 | 67
| 30.83 25.00 | 55.83
-------------+----------------------+----------
sehr gut | 5 4 | 9
| 4.17 3.33 | 7.50
-------------+----------------------+----------
Total | 69 51 | 120
| 57.50 42.50 | 100.00
Zeilen- und Spaltenprozente
Zeilen und Spaltenprozente werden entsprechend mit den Optionen row und col angefordert:
. tabulate zeugnis_mathe_note nachhilfe, row
+----------------+
| Key |
|----------------|
| frequency |
| row percentage |
+----------------+
Zeugnisnote | Nachhilfe in
Mathematik: | Mathematik
Schulnoten | 0 1 | Total
-------------+----------------------+----------
ausreichend | 0 2 | 2
| 0.00 100.00 | 100.00
-------------+----------------------+----------
befriedigend | 27 15 | 42
| 64.29 35.71 | 100.00
-------------+----------------------+----------
gut | 37 30 | 67
| 55.22 44.78 | 100.00
-------------+----------------------+----------
sehr gut | 5 4 | 9
| 55.56 44.44 | 100.00
-------------+----------------------+----------
Total | 69 51 | 120
| 57.50 42.50 | 100.00
. tabulate zeugnis_mathe_note nachhilfe, col
+-------------------+
| Key |
|-------------------|
| frequency |
| column percentage |
+-------------------+
Zeugnisnote | Nachhilfe in
Mathematik: | Mathematik
Schulnoten | 0 1 | Total
-------------+----------------------+----------
ausreichend | 0 2 | 2
| 0.00 3.92 | 1.67
-------------+----------------------+----------
befriedigend | 27 15 | 42
| 39.13 29.41 | 35.00
-------------+----------------------+----------
gut | 37 30 | 67
| 53.62 58.82 | 55.83
-------------+----------------------+----------
sehr gut | 5 4 | 9
| 7.25 7.84 | 7.50
-------------+----------------------+----------
Total | 69 51 | 120
| 100.00 100.00 | 100.00
Die Optionen dürfen kombiniert werden:
. tabulate zeugnis_mathe_note nachhilfe, cell row col
+-------------------+
| Key |
|-------------------|
| frequency |
| row percentage |
| column percentage |
| cell percentage |
+-------------------+
Zeugnisnote | Nachhilfe in
Mathematik: | Mathematik
Schulnoten | 0 1 | Total
-------------+----------------------+----------
ausreichend | 0 2 | 2
| 0.00 100.00 | 100.00
| 0.00 3.92 | 1.67
| 0.00 1.67 | 1.67
-------------+----------------------+----------
befriedigend | 27 15 | 42
| 64.29 35.71 | 100.00
| 39.13 29.41 | 35.00
| 22.50 12.50 | 35.00
-------------+----------------------+----------
gut | 37 30 | 67
| 55.22 44.78 | 100.00
| 53.62 58.82 | 55.83
| 30.83 25.00 | 55.83
-------------+----------------------+----------
sehr gut | 5 4 | 9
| 55.56 44.44 | 100.00
| 7.25 7.84 | 7.50
| 4.17 3.33 | 7.50
-------------+----------------------+----------
Total | 69 51 | 120
| 57.50 42.50 | 100.00
| 100.00 100.00 | 100.00
| 57.50 42.50 | 100.00
<!-- Es ist ebenfalls möglich, die relativen Häufigkeiten nur mit Bezug zur Zeilensumme oder Spaltensumme auszuwerten der Kreuztabelle auszuwerten. Bezogen auf unser Beispiel können wir uns also Fragen, wie viel Prozent der Schüler\*innen, die Nachhilfe in Anspruch genommen haben, haben ein "gut" als Zeugnisnote in Mathematik erhalten? -->
<!-- Um solche Fragestellungen in Stata beantworten zu können, müssen wir mit tabulate eine univariate Tabellen der Variabel *zeugnis_mathe_note* erzeugen. Diese Tabelle soll jedoch sortiert werden—wir wollen eine Häufigkeitstabelle mit den Zeugnisnoten der Schüler\*innen, die Nachhilfe genommen haben und eine Häufigkeitstabelle für die Schüler*\innen, die keine Nachhilfe in Anspruch genommen haben. Dies erreichen wir mit der Funktion bysort: -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ stata -->
<!-- bysort nachhilfe : tabulate zeugnis_mathe_note -->
<!-- > -->
<!-- --------------------------------------------------------------------------------------------------------------------------- -->
<!-- -> nachhilfe = 0 -->
<!-- >zeugnis_math | -->
<!-- e_note | Freq. Percent Cum. -->
<!-- -------------+----------------------------------- -->
<!-- gut | 27 39.13 39.13 -->
<!-- befriedigend | 37 53.62 92.75 -->
<!-- ausreichend | 5 7.25 100.00 -->
<!-- -------------+----------------------------------- -->
<!-- Total | 69 100.00 -->
<!-- > -->
<!-- --------------------------------------------------------------------------------------------------------------------------- -->
<!-- -> nachhilfe = 1 -->
<!-- >zeugnis_math | -->
<!-- e_note | Freq. Percent Cum. -->
<!-- -------------+----------------------------------- -->
<!-- sehr gut | 2 3.92 3.92 -->
<!-- gut | 15 29.41 33.33 -->
<!-- befriedigend | 30 58.82 92.16 -->
<!-- ausreichend | 4 7.84 100.00 -->
<!-- -------------+----------------------------------- -->
<!-- Total | 51 100.00 -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Mit Hilfe der so erstellten Tabellen kann folgende Aussage getroffen werden: 15 Prozent der Schüler\*innen, die Nachhilfe in Anspruch genommen haben, haben ein "gut" als Zeugnisnote in Mathematik erhalten. -->
<!-- Mit der gleichen Funktions-Logik ist es ebenfalls möglich die Häufigkeitsverteilung jeder Ausprägung von *zeugnis_mathe_note* in Bezug auf die Variable *nachhilfe* darzustellen: -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ stata -->
<!-- bysort zeugnis_mathe_note : tabulate nachhilfe -->
<!-- > -->
<!-- --------------------------------------------------------------------------------------------------------------------------- -->
<!-- -> zeugnis_mathe_note = sehr gut -->
<!-- > nachhilfe | Freq. Percent Cum. -->
<!-- ------------+----------------------------------- -->
<!-- 1 | 2 100.00 100.00 -->
<!-- ------------+----------------------------------- -->
<!-- Total | 2 100.00 -->
<!-- > -->
<!-- --------------------------------------------------------------------------------------------------------------------------- -->
<!-- -> zeugnis_mathe_note = gut -->
<!-- > nachhilfe | Freq. Percent Cum. -->
<!-- ------------+----------------------------------- -->
<!-- 0 | 27 64.29 64.29 -->
<!-- 1 | 15 35.71 100.00 -->
<!-- ------------+----------------------------------- -->
<!-- Total | 42 100.00 -->
<!-- > -->
<!-- --------------------------------------------------------------------------------------------------------------------------- -->
<!-- -> zeugnis_mathe_note = befriedig -->
<!-- > nachhilfe | Freq. Percent Cum. -->
<!-- ------------+----------------------------------- -->
<!-- 0 | 37 55.22 55.22 -->
<!-- 1 | 30 44.78 100.00 -->
<!-- ------------+----------------------------------- -->
<!-- Total | 67 100.00 -->
<!-- > -->
<!-- --------------------------------------------------------------------------------------------------------------------------- -->
<!-- -> zeugnis_mathe_note = ausreiche -->
<!-- > nachhilfe | Freq. Percent Cum. -->
<!-- ------------+----------------------------------- -->
<!-- 0 | 5 55.56 55.56 -->
<!-- 1 | 4 44.44 100.00 -->
<!-- ------------+----------------------------------- -->
<!-- Total | 9 100.00 -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Durch die Betrachtung dieser Tabellen kann gesagt werden, dass 64,29 Prozent der Schüler*\innen, die ein "gut" als Zeugnisnote in Mathe erhalten haben, keine Nachhilfe bekommen haben. -->
<!-- Cramérs V kann am einfachsten mit der Funktion tabulate berechnet werden. Dafür wird die Option V genutzt und mit nofreq die Erstellung einer Kreuztabelle unterbunden: -->
Cramérs V
Das Zusammenhangsmaß Cramérs V kann ebenfalls als Option bei der Berechnung einer Kreuztabelle mit tabulate angefordert werden.
. tabulate zeugnis_mathe_note nachhilfe, row V
+----------------+ | Key |
---|---|
frequency | |
row percentage |
+----------------+
Zeugnisnote | Nachhilfe in
Mathematik: | Mathematik
Schulnoten | 0 1 | Total
-------------+----------------------+----------
ausreichend | 0 2 | 2
| 0.00 100.00 | 100.00
-------------+----------------------+----------
befriedigend | 27 15 | 42
| 64.29 35.71 | 100.00
-------------+----------------------+----------
gut | 37 30 | 67
| 55.22 44.78 | 100.00
-------------+----------------------+----------
sehr gut | 5 4 | 9
| 55.56 44.44 | 100.00
-------------+----------------------+----------
Total | 69 51 | 120
| 57.50 42.50 | 100.00
Cramér's V = 0.1745
Die Ausgabe der Tabelle kann mit der Option nofreq unterdrückt werden. Da die "Art" des Zusammenhangs allerdings nur aus der Betrachtung der Tabelle erkennbar wird ist es in der Regel sinnvoller, diese mit ausgeben zu lassen.
tabulate zeugnis_mathe_note nachhilfe, V nofreq
>Cramér's V = 0.1745
Cramérs V ist 0.1745, und zeigt damit einen nur schwachem Zusammenhang zwischen der Zeugnisnote im Fach Mathematik und der regelmäßigen Teilnahme an einem Nachhilfeunterricht aus.
Beispieldaten herunterladen: dat.sav
Datenbeispiel
Kreuztabellen und Cramérs V
Statt durch Klicken durch das Menü können wir uns die Ergebnisse auch über die Syntax ausgeben lassen. Dazu verwenden wir den folgenden Code:
CROSSTABS
/TABLES=nachhilfe BY zeugnis_mathe_note
/FORMAT=AVALUE TABLES
/STATISTICS=PHI
/CELLS=COUNT COLUMN
/COUNT ROUND CELL.
Wir verwenden den Befehl CROSSTABS, um eine Kreuztabelle zu erhalten. Mit TABLES= geben wir die beiden Variablen getrennt mit einem BY an. In diesem Fall ist nachhilfe die Zeilenvariable (und steht vor dem BY) und zeugnis_mathe_note die Spaltenvariable (und steht nach dem BY). Um zusätzlich zu den Tabellen auch Zusammenhangsmaße angezeigt zu bekommen, verwenden wir den Unterbefehl STATISTICS. PHI führt neben dem Phi-Koeffizienten zu einer Ausgabe von Cramérs V. Mit CELLS=COUNT definieren wird, dass absolute Häufigkeiten in der Tabelle ausgegeben werden. CELLS= COLUMN führt zu der zusätzlichen Ausgabe von Spaltenprozenten. ROW würde entsprechend zu Zeilenprozenten führen.