In vielen Forschungsprojekten willst Du herausfinden, ob und wie stark zwei Merkmale zusammenhängen – etwa Körpergröße ↔ Gewicht, Lernzeit ↔ Prüfungsnote oder CO₂-Ausstoß ↔ Einkommen. Dafür liefern Korrelationsanalysen einfache, aber wichtige Werkzeuge.
Pearson-Korrelation ($r$)
Die Pearson’sche Produkt-Moment-Korrelation $r$ misst die Stärke und Richtung eines linearen Zusammenhangs zweier metrischer Variablen. Werte liegen zwischen -1 (perfekt negativ), 0 (kein linearer Zusammenhang) und +1 (perfekt positiv).
Die Voraussetzungen für die Durchführung der Pearson-Korrelation ist:
- Metrische Skala (Intervall/Ratio).
- Lineare Beziehung – checke immer per Streudiagramm!
- Keine groben Ausreißer; sie können r massiv verzerren.
- Homoskedastizität und annähernd Normalverteilung sind hilfreich, aber nicht zwingend für die reine Schätzung von r; für Signifikanztests dagegen schon.
Das wäre die Formel (aber die musst du dir nicht unbedinkt merken):
$r=\frac{\sum_{i=1}^{n}(x_i-\bar x)\,(y_i-\bar y)}{\sqrt{\sum_{i=1}^{n}(x_i-\bar )^2}\,\sqrt{\sum_{i=1}^{n}(y_i-\bar y)^2}}$
In R lässt sich das so umsetzen:
# Beispiel: Körpergröße vs. Gewicht
data <- data.frame(
groesse = c(168,172,181,176,169,185,160,178,190,174),
gewicht = c(62, 70, 88, 75, 65, 92, 55, 80, 95, 72)
)
# Visualisierung
plot(data$groesse, data$gewicht,
xlab = "Größe (cm)", ylab = "Gewicht (kg)",
main = "Scatterplot Größe vs. Gewicht")
abline(lm(gewicht ~ groesse, data), lty = 2)
# Pearson-Korrelation + Test
cor(data$groesse, data$gewicht, method = "pearson")
cor.test(data$groesse, data$gewicht, method = "pearson")
Die Funktion cor.test()
gibt Dir neben rr einen t-Wert, das 95 %-Konfidenzintervall und den p-Wert aus.
Für die Interpretation achtest du vor allem auf diese drei Werte:
- Betrag von r zeigt Stärke:
- 0 – 0.3: schwach
- 0.3 – 0.6: moderat
- 0.6 – 1.0: stark
- Vorzeichen zeigt Richtung.
- Signifikanz (p-Wert) sagt, ob der beobachtete Zusammenhang zufällig sein könnte. Doch: Signifikant ≠ praktisch relevant (Stichwort Effektgröße).
Achtung Causality-Trap: “Correlation does not imply causation” (siehe Kausalität)
Rangkorrelation (Spearman $\rho$)
Spearmans $\rho$ (rho) misst die monotone Beziehung zweier Variablen, indem es die Daten in Ränge transformiert und anschließend Pearson-$r$ auf diese Ränge anwendet. Robuster gegenüber Ausreißern & Nicht-Normalität; geeignet für Ordinaldaten.
Du verwendest die Rangkorrelation (gegenüber der Pearson-Korrelation) also wenn…
- Die Daten ordinal skaliert sind oder Ausreißer / Schiefe aufweisen.
- Die Beziehung ist monoton, aber nicht zwingend linear (z. B. saturierender Effekt).
In R setzt du das so um:
# Beispiel: Stress-Rang vs. Prüfungsrang
set.seed(1)
stress <- sample(1:100, 15) # 1 = wenig Stress
note <- sample(1:100, 15) # 1 = beste Note
cor.test(stress, note, method = "spearman",
exact = FALSE) # exact=FALSE für größere n
Ergebnis enthält $/rho$ und p-Wert .
Für die Interpretation könnte man sagen (Angenommen $\rho=-0.72 (p < 0.01)$): Höherer Stress-Rang (mehr Stress) geht monoton mit schlechteren Rängen in der Prüfung einher.
Kendall-Tau ($\tau$)
Kendall’s $\tau$ basiert auf Paar-Weise-Vergleichen (concordant vs. discordant Paare). Es ist besonders robust bei kleinen Stichproben und vielen Bindungen. Werte: $[-1,1]$.
cor.test(stress, note, method = "kendall")
Wann ist Kendall-Tau besser als Spearman?
- Viele Bindungen (gleiche Werte) in den Rängen.
- Sehr kleines n (< 20).
Visualisierung
- Basis-Plot
plot(x, y); abline(lm(y ~ x))
ggplot2
mit glatter Linielibrary(ggplot2) ggplot(data, aes(groesse, gewicht)) + geom_point() + geom_smooth(method = "lm", se = FALSE)
- Korrelationsmatrix als Heatmap
library(reshape2); library(ggplot2) m <- cor(data, method = "spearman") m2 <- melt(m) ggplot(m2, aes(Var1, Var2, fill = value)) + geom_tile() + scale_fill_gradient2(limits = c(-1,1)) + theme_minimal()
Vergleich & Entscheidungshilfe
Kriterium | Pearson $r$ | Spearman $\rho$ | Kendall $\tau$ |
---|---|---|---|
Datenniveau | Metrisch | Ordinal+ | Ordinal+ |
Beziehung | Linear | Monoton | Monoton |
Robust gegen Ausreißer | Nein | Mittel | Hoch |
Kleines n + Bindungen | Mittel | Mittel | Gut |
Test-Statistik | t-Verteilung | t-Approx. | z-Approx. |
Beispielstudie
Du sammelst Daten von 60 Studis: mg Koffein pro Tag vs. Reaktionszeit (ms).
set.seed(42)
koffein <- rpois(60, lambda = 200)
reaktion <- 300 - 0.15*koffein + rnorm(60, 0, 20)
df <- data.frame(koffein, reaktion)
Dann schauen wir uns das ganze mal visuell und analytisch an:
plot(df$koffein, df$reaktion) # Streuplot
cor.test(df$koffein, df$reaktion)
Ergebnis : $r\approx -0.65, p < 0.001$ → höherer Koffein-Konsum geht (linear) mit kürzerer Reaktionszeit einher.
Weil Ausreißer (> 450 mg) auftauchen, vergleichst Du am besten auch mit Spearman:
cor.test(df$koffein, df$reaktion, method="spearman")
Oft ist $\rho$ etwas kleiner (z. B. −0.60), bestätigt aber die monotone Tendenz.
Alles klar?
Ich hoffe, der Beitrag war für dich soweit verständlich. Wenn du weitere Fragen hast, nutze bitte hier die Möglichkeit, eine Frage an mich zu stellen!