Der Begriff der bivariaten Statistik wurde schon früher behandelt. Dabei werden zwei Variablen in Beziehung zueinander gesetzt, um potenzielle statistische Zusammenhänge zu analysieren. Die bivariate Statistik ist somit ein integraler Bestandteil quantitativer Studien. Der besagte Artikel bietet darüber hinaus Hilfe bei der Interpretation der in diesem Zusammenhang erstellten Tabellen.
Der vorliegende Beitrag klärt über die Möglichkeiten der Darstellung bivariater Beziehungen in RStudio auf. Der Text ist zunächst in Abschnitte zur Erstellung von deskriptiven Kreuztabellen und Grafiken unterteilt. Zum Schluss werden inferenzstatistische bivariate Analysen in RStudio behandelt.
Kreuztabellen in RStudio
Kreuztabellen bieten eine grundlegende und leicht verständliche Herangehensweise für bivariate Untersuchungen. Betrachten wir zuerst einen Datensatz, der zwei nominal skalierte Variablen enthält. Die erste Variable erfasst das Geschlecht der befragten Personen („Männlich“ (1), „Weiblich“ (2), „Divers“ (3)), während die zweite Variable Informationen darüber liefert, ob die jeweilige Person ein Haustier hält („Nein“ (0), „Ja“ (1)). Insgesamt wurden 20 Personen befragt.
Der Datensatz wird im oberen linken Bereich der Arbeitsumgebung angezeigt. Hier können wir später auf unser Skript zugreifen, das wir im nächsten Schritt erstellen. Im oberen rechten Bereich werden verfügbare Objekte dargestellt, in diesem Fall nur das Objekt „datensatz“. Die (hier minimierte) Konsole unten links führt den im Skript eingegebenen Code aus und zeigt die Berechnungsergebnisse an. Im unteren rechten Bereich gibt es einen weiteren Bereich, der unter anderem Hilfsfunktionen und mögliche Erweiterungen (Packages) aufführt.
Mit einer Kreuztabelle können wir die Verteilung der Geschlechter in den Gruppen derjenigen, die Haustiere halten, und derjenigen, die keine Haustiere halten, visualisieren. Gleichzeitig lässt sich erkennen, wie gross die Anteile der Haustierhalter:innen innerhalb der verschiedenen Geschlechter sind.
Um Befehle einzugeben, erstellen wir zunächst ein neues Skript, das unsere Arbeitsschritte dokumentiert und transparent für eine unabhängige Überprüfung macht. Dazu klicken wir auf das kleine „+“-Symbol in der oberen linken Ecke und wählen „R Skript“. Alternativ können wir auch die Tastenkombination Strg+Shift+N verwenden. Danach öffnet sich neben dem Datensatz ein zusätzlicher Tab, in den der Code eingegeben werden kann.
Eine einfache Kreuztabelle kann ohne Installation von Paketen mithilfe der Funktion „xtabs()“ erstellt werden. In der Klammer werden die Variablen und die Reihenfolge der Darstellung festgelegt. Mit der Reihenfolge der Variablen im Befehl „xtabs(~datensatz$Geschlecht+datensatz$Haustier)“ legen wir fest, dass die Variable „Geschlecht“ in den Zeilen und die Variable „Haustier“ in den Spalten aufgeführt wird. Nach Ausführung des Befehls durch einen Klick auf „Run“ wird die Kreuztabelle in der Konsole dargestellt.
xtabs(~datensatz$Geschlecht+datensatz$Haustier)
Die ausgegebene Kreuztabelle ist allerdings nicht besonders übersichtlich formatiert und bietet nur begrenzte Möglichkeiten zur Modifikation. Eine Alternative ergibt sich nach der Installation des Pakets „gmodels“ mithilfe der Befehle „install.packages(„gmodels“)“ und „library(gmodels)“.
install.packages(„gmodels“)
library(gmodels)
Anschliessend steht die Funktion „CrossTable“ zur Verfügung, mit der wir nun übersichtlichere Kreuztabellen erstellen können. In der Funktion „CrossTable()“ werden zunächst die beiden interessierenden Variablen definiert, sodass der grundlegende Befehl „CrossTable(datensatz$Geschlecht, datensatz$Haustier)“ lautet.
CrossTable(datensatz$Geschlecht, datensatz$Haustier)
Wenn wir die Optionen des Befehls nicht näher spezifizieren, gibt RStudio nach seiner Ausführung nicht nur absolute Häufigkeiten, sondern auch relative Spalten-, Zeilen- und Gesamttabellenhäufigkeiten sowie einen Chi-Quadrat-Test und erwartete Häufigkeiten aus. Diese Optionen können über die Festlegung mit „TRUE“ oder „FALSE“ aktiviert oder deaktiviert werden. Mit der Option „dnn“ legt man die Beschriftung der Zeilen- und Spaltenvariable fest. Zunächst deaktivieren wir alle Optionen, um uns in den Zellen der Kreuztabelle ausschliesslich absolute Häufigkeiten ausgeben zu lassen. Anschliessend erhalten wir die folgende Ausgabe:
CrossTable(datensatz$Geschlecht, datensatz$Haustier,
prop.c = FALSE, prop.r = FALSE, prop.t = FALSE, prop.chisq = FALSE, expected = FALSE,
dnn = c(„Geschlecht“, „Haustier“))
Die Ausgabe der relativen Spalten-, Zeilen- und Gesamttabellenhäufigkeiten kann aber sinnvoll sein, um z. B. den Anteil der Haustierhalterinnen unter den weiblichen Personen oder das Geschlecht mit dem höchsten Anteil bei der Haustierhaltung zu ermitteln. Entsprechend lassen wir uns mithilfe des folgenden Befehls eine weitere Variante der Kreuztabelle ausgeben:
CrossTable(datensatz$Geschlecht, datensatz$Haustier,
prop.c = TRUE, prop.r = TRUE, prop.t = TRUE, prop.chisq = FALSE, expected = FALSE,
dnn = c(„Geschlecht“, „Haustier“))
Im Ergebnis wurden die Zellen zunächst um relative Zeilen- und anschliessend um Spalten- und Gesamttabellenhäufigkeiten ergänzt.
Die erhaltenen Kreuztabellen ermöglichen eine detaillierte Beschreibung der Beziehungen zwischen den Variablen, was beispielsweise bei der Dokumentation von Umfrageergebnissen in quantitativen Studien nützlich ist. So kann man zum Beispiel feststellen, dass 3 von 5 weiblichen Befragten Haustiere halten. Der entsprechende Prozentsatz innerhalb des Geschlechts beträgt daher 37,5 %. In der Spalte „Ja“ der Variable „Haustier“ zeigt sich, dass der höchste Anteil bei der Haustierhaltung auf das männliche Geschlecht entfällt. Demnach halten 5 männliche Personen Haustiere, während es bei weiblichen Personen nur 3 sind und bei diversen Personen keine. Daraus ergibt sich, dass 62,5 % der Haustierhalter:innen männlich sind.
Ein ähnliches Vorgehen ist auch bei anderen Skalenniveaus möglich, zum Beispiel bei zwei ordinal oder metrisch skalierten Merkmalen. Als Beispiel betrachten wir zwei Variablen, die einerseits die sportliche Aktivität („gar nicht sportlich“ (1) bis „sehr sportlich“ (5)) der Personen abbilden und andererseits ihre Lebenszufriedenheit („gar nicht zufrieden“ (1) bis „vollumfänglich zufrieden“ (5)). Die resultierende Ausgabe wird wie folgt dargestellt:
CrossTable(datensatz2$Aktivität, datensatz2$Lebenszufriedenheit,
prop.c = TRUE, prop.r = TRUE, prop.t = TRUE, prop.chisq = FALSE, expected = FALSE,
dnn = c(„Aktivität“, „Lebenszufriedenheit“))
Bei ordinal oder metrisch skalierten Variablen mit wenigen Ausprägungen sind Kreuztabellen in der Regel übersichtlich. Allerdings kann die Darstellung bei metrischen Variablen mit unendlich vielen Werten schnell unhandlich werden. Wenn zum Beispiel ein Datensatz exakte Gewichtsangaben von 1.000 Personen enthält, könnte eine Kreuztabelle mehrere Hundert Spalten oder Zeilen umfassen. In solchen Fällen ist es sinnvoller, bivariate Zusammenhänge mit grafischen oder inferenzstatistischen Methoden zu beschreiben, die im Folgenden erläutert werden.
Diagramme in RStudio
Für die grafische Darstellung des bivariaten Zusammenhangs zwischen zwei nominal skalierten Variablen greifen wir zunächst auf ein Balkendiagramm zurück. Hierfür nutzen wir das beliebte Paket „ggplot2“, das wir zunächst mit „install.packages(„ggplot2″)“ und „library(ggplot2)“ installieren.
install.packages(„ggplot2“)
library(ggplot2)
Zunächst erzeugen wir ein gruppiertes Balkendiagramm mit der Variable „Geschlecht“ auf der X-Achse. Die Y-Achse soll die Anzahl der Personen anzeigen, die innerhalb der drei Geschlechtergruppen ein Haustier bzw. kein Haustier halten. Dies gelingt mit dem folgenden Befehl, wobei zuvor sicherzustellen ist, dass die Skalenniveaus bei nominalen Variablen als „Factor“ definiert sind. In dem Befehl wird zunächst der Datensatz definiert, um anschliessend nach „aes“ X- und Y-Achse zu spezifizieren. Mit der Option „position = „dodge““ wird ein gruppiertes Diagramm erstellt.
ggplot(datensatz, aes(x = Geschlecht, fill = Haustier)) + geom_bar(position = „dodge“)
Umgekehrt ist es natürlich möglich, die Variable „Haustier“ auf der X-Achse und innerhalb der Ausprägungen von „Haustier“ zwischen den Geschlechtern zu unterscheiden. Hierfür wird lediglich die Position der Variablen im Skript vertauscht:
ggplot(datensatz, aes(x = Haustier, fill = Geschlecht)) + geom_bar(position = „dodge“)
Bei Variablen mit einer grösseren Anzahl von Merkmalsausprägungen kann die Darstellung in einem Balkendiagramm erneut unübersichtlich werden. In solchen Fällen bietet sich stattdessen die Verwendung eines Streudiagramms an. Um ein Streudiagramm zu erstellen, greifen wir erneut auf den Datensatz zurück, der Informationen zur sportlichen Aktivität und Lebenszufriedenheit der Befragten enthält.
In R gibt es zahlreiche Möglichkeiten zur Erstellung von Streudiagrammen. Eine einfache Möglichkeit ohne Zugriff auf Erweiterungen liegt mit der „plot()“-Funktion vor. Es soll die sportliche Aktivität auf der X-Achse und die Lebenszufriedenheit auf der Y-Achse dargestellt werden. Innerhalb der Klammer werden entsprechend X- und Y-Variable definiert, nach „main =“ wird die Beschriftung des Plots und nach „xlab=“ und „ylab=“ die der Achsen festgelegt.
plot(datensatz2$Aktivität, datensatz2$Lebenszufriedenheit, main = „Aktivität * Lebenszufriedenheit“,
xlab=“Aktivität“, ylab=“Lebenszufriedenheit“)
Das erstellte Streudiagramm ermöglicht eine visuelle Einschätzung des bivariaten Zusammenhangs zwischen den beiden Variablen und lässt erste Rückschlüsse auf systematische Beziehungen zu. Die grafische Darstellung legt nahe, dass eine höhere sportliche Aktivität im Allgemeinen mit höheren Werten bei der Lebenszufriedenheit einhergeht.
Weitere Funktionen erlauben es z. B., eine zusätzliche Regressionslinie und die zugehörige Regressionsgleichung hinzuzufügen. Insbesondere das Paket „ggplot2“ bietet viele Varianten der Darstellung.
Eine weitere, anschauliche Möglichkeit zur Darstellung bivariater Beziehungen bei einer grösseren Anzahl von Variablen ist der Korrelationsplot. Ein solcher Plot kann z. B. mithilfe der Funktion „corrplot“ erstellt werden. Als Datenbasis dient entweder der gesamte Datensatz oder ein zuvor definiertes Subset. Dabei kann mit der Option „method =“ festgelegt werden, auf welchem Korrelationskoeffizienten der Plot basiert.
install.packages(„corrplot“)
library(corrplot)
corrplot(cor(datensatz, method = „pearson“), method=“circle“)
Der Korrelationsplot könnte beispielsweise folgendermassen aussehen und bietet einen schnellen Überblick über systematische (positive wie negative) Beziehungen zwischen den ausgewählten Variablen:
Korrelationskoeffizienten
Eine inferenzstatistische Möglichkeit zur Beurteilung bivariater Zusammenhänge besteht in der Berechnung von Assoziationsmassen bzw. Korrelationskoeffizienten. Bereits im Beitrag zur bivariaten Statistik wurde erläutert, dass die Kombination der Skalenniveaus entscheidend für die Wahl des Korrelationsmasses (z. B. nach Spearman, Pearson usw.) ist. Zur Illustration werden erneut die o. g. Datensätze (Geschlecht und Haustierhaltung, sportliche Aktivität und Lebenszufriedenheit) verwendet.
Der Zusammenhang zwischen den nominal skalierten Variablen Geschlecht und Haustierhaltung kann über einen Chi-Quadrat-Test untersucht werden. Praktischerweise erlaubt R die Berechnung dieses Tests im Zuge der Erstellung von Kreuztabellen, wie bereits oben angeschnitten. In den Optionen der „CrossTable“-Funktion deaktiviert man entsprechend die Ausgabe relativer Häufigkeiten mit „FALSE“ und aktiviert „prop.chisq“ und „expected“ mit „TRUE“.
CrossTable(datensatz$Geschlecht, datensatz$Haustier,
prop.c = FALSE, prop.r = FALSE, prop.t = FALSE, prop.chisq = TRUE, expected = TRUE, dnn = c(„Geschlecht“, „Haustier“))
Das Programm gibt anschliessend die Kreuztabelle mit absoluten Zellhäufigkeiten an und ergänzt diese um die Statistiken des Chi-Quadrat-Tests. Nachdem der Test überprüft, ob die erwarteten von den tatsächlichen Zellhäufigkeiten abweichen und ein Signifikanzwert p = 0,04 resultiert, liegen statistisch signifikante bzw. überzufällige Zusammenhänge zwischen den Variablen vor. Weitere Hinweise zur Interpretation des Tests finden sich in unserem Artikel zur bivariaten Statistik.
Bivariate Untersuchungen der metrisch skalierten Variablen Aktivität und Lebenszufriedenheit können mithilfe des Korrelationskoeffizienten nach Pearson erfolgen. Eine einfache Möglichkeit zur Berechnung des Korrelationskoeffizienten nach Pearson liegt mit der Funktion „cor()“ vor, die die Pearson-Korrelation als Standardeinstellung berechnet. Die Korrelationen können entweder für den gesamten Datensatz oder für ausgewählte Variablen berechnet werden. Der Nachteil der Funktion ist allerdings, dass sie keine Signifikanzwerte ausgibt.
cor(datensatz2)
cor(datensatz2$Aktivität, datensatz2$Lebenszufriedenheit)
Möchte man in Abhängigkeit der Skalenniveaus andere Korrelationskoeffizienten verwenden, können diese mit der Option „method“ festgelegt werden, sodass sich z. B. folgende Befehle ergeben könnten:
cor(datensatz2, method = „pearson“)
cor(datensatz2, method = „Kendall“)
cor(datensatz2, method = „spearman“)
Für die Ausgabe von Signifikanzwerten können wir auf eine Erweiterung zurückgreifen. Das Paket „correlation“ beinhaltet eine solche Funktionalität und wird zunächst mit „install.packages(„correlation“)“ und „library(correlation)“ installiert.
install.packages(„correlation“)
library(correlation)
Anschliessend kann der Befehl erneut nach dem bereits genannten Muster eingesetzt werden. Im Ergebnis werden nicht nur Korrelationskoeffizient, sondern auch Konfidenzintervall, t-Statistik und Signifikanzwert ausgegeben. Mit der Funktion können Korrelationskoeffizienten für den gesamten Datensatz oder Subsets des Datensatzes berechnet werden, die zuvor mithilfe der Funktion „subset()“ definiert werden müssen.
correlation(datensatz2)
Weiterführende Literatur:
Fahrmeir, L., Heumann, C., Künstler, R., Pigeot, I. & Tutz, G. (2016). Einführung in R. Berlin, Heidelberg: Springer.
Hedderich, J., Sachs, L. (2020). Angewandte Statistik. Berlin, Heidelberg: Springer.