Zusammenhang zwischen ordinalen Variablen
Darstellung von Zusammenhängen
Rangkorrelation nach Spearman
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
Wir interessieren uns dafür, ob zwischen der Deutschnote zeugnis_deutsch_note und der Mathenote zeugnis_mathe_note ein Zusammenhang besteht. Dafür muss zuerste eine Kreuztabelle mit der Funktion table() erstellt werden. (Mit der Option dnn können die Zeilen- und die Spaltenüberschrift definiert werden.)
tab_deutsch_mathe <- table(dat$zeugnis_deutsch_note,
dat$zeugnis_mathe_note,
dnn = c("Zeugnisnote_Deutsch","Zeugnisnote_Mathe"))
tab_deutsch_mathe
Zeugnisnote_Mathe
Zeugnisnote_Deutsch ausreichend befriedigend gut sehr gut
ausreichend 2 14 8 0
befriedigend 0 15 24 3
gut 0 12 26 3
sehr gut 0 1 9 3
Mit prop.table(, margin=22) werden die relativen Häufigkeiten mit Bezug zur Spaltensumme dargestellt. Dieses Ergebnis kann mit 100 multipiliziert werden, um Prozentwerte zu erhalten:
prop.table(tab_deutsch_mathe, margin=2)*100
Zeugnisnote_Mathe
Zeugnisnote_Deutsch ausreichend befriedigend gut sehr gut
ausreichend 100.000000 33.333333 11.940299 0.000000
befriedigend 0.000000 35.714286 35.820896 33.333333
gut 0.000000 28.571429 38.805970 33.333333
sehr gut 0.000000 2.380952 13.432836 33.333333
Es ist bereits erkennbar, dass ein positiver Zusammenhang zwischen der Mathenote und der Deutschnote besteht: Die Felder der Diagonalen (ausreichend/ausreichend bis sehr gut/sehr gut) sind tendenziell stärker besetzt als die übrigen Felder. Daher vermuten wir den folgenden Zusammenhang: Je besser die Deutschnote, desto besser die Mathenote.
Rangkorrelation nach Spearman
Die Rangkorrelation nach Spearman kann mit der Funktion cor() und dem Argument method="spearman" berechnet werden. Als Argumente x und y müssen der Funktion zwei numerische Variablen übergeben werden.
Die beiden Variablen zeugnis_deutsch_note und zeugnis_mathe_note liegen im Datensatz als factor vor. Wir müssen die Variablen also umwandeln. Um die Rangfolge der ordinalskaliertebn Ausprägungen anzugeben verwenden wir die Funktion factor() mit den Argumenten ordered=TRUE und geben die Rangfolge im Argument levels vor (die möglichen Ausprägungen müssen in der korrekten Reihenfolge als Vektor (mit c()) übergeben werden):
dat$zeugnis_mathe_note <- factor(dat$zeugnis_mathe_note, ordered=T, levels=c("ausreichend", "befriedigend", "gut", "sehr gut"))
dat$zeugnis_deutsch_note <- factor(dat$zeugnis_deutsch_note, ordered=T, levels=c("ausreichend", "befriedigend", "gut", "sehr gut"))
Diese geordnete Fakot-Variable kann nun mit as.numeric() in numerische Werte überführt werden. Wir speichern dabei zwei neue Variablen mathenum und deutsch_num im Datensatz dat ab:
dat$mathe_num <- as.numeric(dat$zeugnis_mathe_note)
dat$deutsch_num <- as.numeric(dat$zeugnis_deutsch_note)
Diese beiden Variablen können nun der cor()-Funktion übergeben werden:
cor(dat$mathe_num, dat$deutsch_num)
[1] 0.3776354
Den Wert von etwa 0,38 interpretieren wir als mittelstarken Zusammenhang zwischen der Deutsch- und der Mathenote.
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
Wir interessieren uns dafür, ob zwischen der Deutschnote zeugnis_deutsch_note und der Mathenote zeugnis_mathe_note ein Zusammenhang besteht. Dafür erstellen wir zuerst mit tabulate eine Kreuztabelle der beiden Variablen:
tabulate zeugnis_deutsch_note zeugnis_mathe_note
zeugnis_deut| zeugnis_mathe_note
sch_note | sehr gut gut befriedig ausreiche | Total
-------------+--------------------------------------------+----------
sehr gut | 2 14 8 0 | 24
gut | 0 15 24 3 | 42
befriedigend | 0 12 26 3 | 41
ausreichend | 0 1 9 3 | 13
-------------+--------------------------------------------+----------
Total | 2 42 67 9 | 120
Spaltenprozente
Mit der Optionen col können Spaltenprozente angefordert werden (row fordert Zeilenprozente an):
. tabulate zeugnis_deutsch_note zeugnis_mathe_note, col
+-------------------+
| Key |
|-------------------|
| frequency |
| column percentage |
+-------------------+
Zeugnisnote |
Deutsch: | Zeugnisnote Mathematik: Schulnoten
Schulnoten | ausreiche befriedig gut sehr gut | Total
-------------+--------------------------------------------+----------
ausreichend | 2 14 8 0 | 24
| 100.00 33.33 11.94 0.00 | 20.00
-------------+--------------------------------------------+----------
befriedigend | 0 15 24 3 | 42
| 0.00 35.71 35.82 33.33 | 35.00
-------------+--------------------------------------------+----------
gut | 0 12 26 3 | 41
| 0.00 28.57 38.81 33.33 | 34.17
-------------+--------------------------------------------+----------
sehr gut | 0 1 9 3 | 13
| 0.00 2.38 13.43 33.33 | 10.83
-------------+--------------------------------------------+----------
Total | 2 42 67 9 | 120
| 100.00 100.00 100.00 100.00 | 100.00
Es ist bereits erkennbar, dass ein positiver Zusammenhang zwischen der Mathenote und der Deutschnote besteht: Die Felder der Diagonalen (ausreichend/ausreichend bis sehr gut/sehr gut) sind tendenziell stärker besetzt als die übrigen Felder. Daher vermuten wir den folgenden Zusammenhang: Je besser die Deutschnote, desto besser die Mathenote.
Rangkorrelation nach Spearman
Der Korrelationskoeffizienten nach Spearman kann dmit der Funktion spearman berechnet werden:
spearman zeugnis_deutsch_note zeugnis_mathe_note
Number of obs = 120
Spearman's rho = 0.3575
Test of Ho: zeugnis_deutsch_note and zeugnis_mathe_note are independent
Prob > |t| = 0.0001
Den Wert von etwa 0,36 interpretieren wir als mittelstarken Zusammenhang zwischen der Deutsch- und der Mathenote.
Beispieldaten herunterladen: dat.sav
Datenbeispiel
Kreuztabellen und Rangkorrelation nach Spearman
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=zeugnis_deutsch_note BY zeugnis_mathe_note
/FORMAT=AVALUE TABLES
/STATISTICS=CORR
/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 zeugnis_deutsch_note 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. CORR führt zur Ausgabe des Korrelationskoeffizienten nach Pearson (Interpretation nur für metrische Variablen sinnvoll) sowie der Rangkorrelation nach Spearman. 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.
Statt über CROSSTABS können wir uns Spearmans Rangkorrelation auch direkt über den Befehl NONPAR CORR anzeigen lassen. Dabei wird allerdings keine Kreuztabelle ausgegeben.
NONPAR CORR
/VARIABLES=zeugnis_mathe_note zeugnis_deutsch_note
/PRINT=SPEARMAN.