Streudiagramme mit R / ggplot2

Arndt Regorz, Dipl. Kfm. & M.Sc. Psychologie, 12.12.2023


Im Rahmen einer Regressionsanalyse betrachtet man häufig auch Streudiagramme (Scatterplots) zwischen Prädiktoren und Kriteriumsvariablen. In diesem Tutorial finden Sie R-Code basierend auf dem Package ggplot2 zur Erstellung von Streudiagrammen.

Sie müssen hierfür einmalig das Package ggplot2 installieren (hier nicht aufgeführt).

install.packages("ggplot2")

Und dann jeweils mit der library() Funktion laden.

library(ggplot2)

Für die Beispiele im Folgenden wird ein in R eingebauter Datensatz genutzt, mtcars.

autos <- mtcars
head(autos)

Streudiagramme ohne und mit Regressionsgerade

Die Grundeinstellung für ein Streudiagramm mit ggplot2 ist jeweils gleich:

  • Es wird der Dataframe angegeben, in dem sich die Variablen befinden.
  • Es wird im Rahmen der aes() Funktion angegeben, welche Variable auf die x-Achse und welche auf die y-Achse geschrieben werden soll.
  • Es wird das geom_point() hinzugefügt.

Wichtig ist noch bei der Eingabe, dass das Pluszeichen jeweils am Ende der Zeile steht, damit das Programm weiß, dass der Befehl noch auf der nächsten Zeile weitergeht.

# Streudiagramm
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point()

# Mit Regressionsgerade
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
geom_smooth(method=lm)

# Mit Regressionsgerade ohne Standardfehler
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
geom_smooth(method=lm, se=F)

Streudiagramme zur Linearitätsprüfung (Loess)

Um die Linearität des Zusammenhangs zwischen zwei Variablen zu prüfen (als Regressionsvoraussetzung), verwendet man in der Regel die Loess-Methode, eine nicht-parametrische graphische Regression.

# Mit Loess-Smoothing (Linearitätsprüfung)
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
geom_smooth(method=loess)

Streudiagramme pro Gruppe (z.B. bei Mehrebenenanalyse)

Häufig möchte man sich Zusammenhänge nicht nur für die Gesamtstichprobe ansehen, sondern auch für Teilstichproben. Das könnte beispielsweise eine gesonderte Betrachtung nach Geschlecht sein. Oder im Rahmen einer Mehrebenenanalyse eine gesonderte Betrachtung je Level 2 Einheit (im Querschnitt je Gruppe, im Längsschnitt je Person).

Wichtig ist dabei, dafür zu sorgen, dass die Gruppierungsvariable als Faktorvariable definiert ist.

# Farben je Kategorie
# Umwandeln der Gruppe in Faktorvariable
autos$gear <- factor(autos$gear)

ggplot(data=autos,
aes(x=hp, y=mpg, color=gear)) +
geom_point()

# Farbige Linie je Kategorie
ggplot(data=autos,
aes(x=hp, y=mpg, color=gear)) +
geom_point() +
geom_smooth(method=lm, se = F)

# Beschriftung nach Kategorie
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_text(label=autos$gear)

# Gesondertes Streudiagramm je Kategorie
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
geom_smooth(method=lm, se = F) +
facet_grid(rows=vars(gear))
# oder: (cols=...)

Streudiagramme bei Single Items mit Jittering

Wenn Sie ein Streudigramm erstellen wollen, bei dem ein oder beide Variablen Single-Items mit einer nur geringen Anzahl an möglichen Stufen sind, dann stehen Sie vor einem Problem. Häufig kann man dann aus dem Streudiagramm nicht viel sehen, es wird nur ein Gitter von Punkten angezeigt. Das kann man lösen, indem man Jittering verwendet. Dabei wird jeder Punkt zufällig etwas horizontal und vertikal verschoben. Im folgenden Beispiel können Sie sehen, wie viel das ausmacht.

# Mit Jittering (z.B. bei zwei Single-Items)

# Beispieldaten
a <- c(1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4)
b <- c(1,2,3,4,2,3,4,1, 3,4,1,2,4, 1,2,3, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4, 1,2,3,4,1,2,3,4)
df <- data.frame(a,b)

# Ohne Jittering
ggplot(data=df,
aes(x=a, y=b)) +
geom_point()

Für das Jittering ergänzen Sie einfach noch das Element geom_jitter. Bei einer Skala mit einem Punkt Abstand zwischen den Items bevorzuge ich dabei die Einstellungen height = 0.5 und width = 0.5.

# Mit Jittering
ggplot(data=df,
aes(x=a, y=b)) +
geom_point() +
geom_jitter(height = 0.5, width = 0.5)

Beschriftung und verschiedene Themes (Gestaltungsoptionen)

Man kann die Achsenbeschriftungen ändern und auch einen Titel hinzufügen.

# Änderung/Ergänzung Beschriftungen
ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
geom_smooth(method=lm, se = F) +
labs(x = "PS",
y = "Meilen pro Gallone",
title = "Energieeffizienz PKW")

ggplot2 hat verschiedene eingebaute Themen, die die optische Gestaltung der Grafik steuern. Neben der Voreinstellung kommen für mich vor allem in Fragen theme_bw und theme_classic.

# Verschiedene Themes

ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point()

ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
theme_bw()

ggplot(data=autos,
aes(x=hp, y=mpg)) +
geom_point() +
theme_classic()