Korrelation beschreibt den Zusammenhang zwischen zwei Variablen. Sie misst, ob (und wie stark) zwei Grössen miteinander variieren.
Beispiele ohne R:
Der Korrelationskoeffizient \(r\) liegt zwischen:
Wir betrachten drei einfache Beispiele.
library(ggplot2)
## Warning: Paket 'ggplot2' wurde unter R Version 4.4.3 erstellt
library(corrplot)
## Warning: Paket 'corrplot' wurde unter R Version 4.4.3 erstellt
## corrplot 0.95 loaded
library(GGally)
## Warning: Paket 'GGally' wurde unter R Version 4.4.3 erstellt
library(plotly)
## Warning: Paket 'plotly' wurde unter R Version 4.4.3 erstellt
##
## Attache Paket: 'plotly'
## Das folgende Objekt ist maskiert 'package:ggplot2':
##
## last_plot
## Das folgende Objekt ist maskiert 'package:stats':
##
## filter
## Das folgende Objekt ist maskiert 'package:graphics':
##
## layout
library(dplyr)
## Warning: Paket 'dplyr' wurde unter R Version 4.4.3 erstellt
##
## Attache Paket: 'dplyr'
## Die folgenden Objekte sind maskiert von 'package:stats':
##
## filter, lag
## Die folgenden Objekte sind maskiert von 'package:base':
##
## intersect, setdiff, setequal, union
rnorm(5, mean = 170, sd = 10)
## [1] 171.7988 164.0252 163.5445 164.2854 159.8113
# simuliert 5 Körpergrössen um 170 cm herum, Streuung ca. ±10 cm
set.seed(123)
rnorm(5, mean=100, sd=15)
## [1] 91.59287 96.54734 123.38062 101.05763 101.93932
# Wenn du es nochmal mit set.seed(123) ausführst, bekommst du genau dieselben 5 Werte zurück.
# Ohne set.seed() würdest du jedes Mal neue (unterschiedliche) Zufallszahlen sehen.
x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(2,4,5,4,6,7,9,10,9,12)
plot(x, y,
main="Scatterplot Beispiel",
xlab="Variable X",
ylab="Variable Y",
pch=19, col="blue")
# pch=19 = gefüllte Punkte
# col="blue" = blaue Punkte
plot(x, y,
main="Scatterplot mit Regressionslinie",
xlab="X-Werte",
ylab="Y-Werte",
pch=19, col="darkgreen")
abline(lm(y ~ x), col="red", lwd=2) # fügt die Regressionsgerade ein
library(ggplot2)
daten <- data.frame(x, y)
ggplot(daten, aes(x=x, y=y)) +
geom_point(color="blue", size=3) +
geom_smooth(method="lm", se=FALSE, color="red") +
labs(title="Scatterplot mit ggplot2",
x="Variable X",
y="Variable Y")
## `geom_smooth()` using formula = 'y ~ x'
# Zwei Variablen anlegen
groesse <- c(160, 165, 170, 175, 180)
gewicht <- c(55, 60, 65, 72, 80)
# Scatterplot zeichnen
plot(groesse, gewicht,
main="Körpergrösse vs. Gewicht",
xlab="Körpergrösse (cm)",
ylab="Gewicht (kg)",
pch=19, col="blue")
# Korrelationskoeffizient berechnen
cor(groesse, gewicht)
## [1] 0.9938144
# sehr starke positive Korrelation (~0.99).
# Daten
groesse <- c(160, 165, 170, 175, 180)
gewicht <- c(55, 60, 65, 72, 80)
daten <- data.frame(groesse, gewicht)
# Korrelationsmatrix
M <- cor(daten)
M
## groesse gewicht
## groesse 1.0000000 0.9938144
## gewicht 0.9938144 1.0000000
# Korrelationsplot
corrplot(M, method="circle")
# Du bekommst eine 2×2-Matrix:
# Die Diagonale zeigt Korrelation = 1 (eine Variable mit sich selbst).
# Das Feld zwischen groesse und gewicht ist fast voller blauer Kreis → starke positive Korrelation.
ggplot2 ist ein R-Paket zur grafischen Darstellung von Daten. Es basiert auf dem „Grammar of Graphics“-Prinzip, d. h. man baut Plots schrittweise aus verschiedenen Bestandteilen zusammen.
ggplot(daten, aes(x=groesse, y=gewicht)) +
geom_point(color="blue", size=3) + # Punkte (Scatterplot)
geom_smooth(method="lm", se=FALSE, color="red") + # Regressionslinien, Farben, Größen etc.
labs(title="Körpergrösse vs. Gewicht")
## `geom_smooth()` using formula = 'y ~ x'
set.seed(123)
koerpergroesse <- rnorm(30, mean = 170, sd = 10)
koerpergroesse
## [1] 164.3952 167.6982 185.5871 170.7051 171.2929 187.1506 174.6092 157.3494
## [9] 163.1315 165.5434 182.2408 173.5981 174.0077 171.1068 164.4416 187.8691
## [17] 174.9785 150.3338 177.0136 165.2721 159.3218 167.8203 159.7400 162.7111
## [25] 163.7496 153.1331 178.3779 171.5337 158.6186 182.5381
gewicht <- koerpergroesse * 0.6 + rnorm(30, mean = 0, sd = 5)
gewicht
## [1] 100.76947 99.14358 115.82788 106.81372 106.88363 115.73359 107.53509
## [8] 94.10007 96.34907 97.42367 105.87096 103.11930 98.07765 113.50888
## [15] 104.70476 107.10594 102.97268 87.86702 110.10796 98.74641 96.85965
## [22] 100.54942 95.62962 104.46966 97.12091 99.46219 99.28296 105.84331
## [29] 95.79045 110.60260
daten1 <- data.frame(koerpergroesse, gewicht)
# Scatterplot
plot(daten1$koerpergroesse, daten1$gewicht,
xlab="Körpergrösse (cm)", ylab="Gewicht (kg)",
main="Körpergrösse vs. Gewicht")
# Korrelationskoeffizient
cor(daten1$koerpergroesse, daten1$gewicht)
## [1] 0.7852029
Scatterplot: Die Punkte liegen fast auf einer Linie nach oben.
Korrelationskoeffizient: r ≈ 0.99 → sehr starke positive Korrelation.
Interpretation: Grössere Personen haben tendenziell ein höheres Gewicht. Die Beziehung ist fast linear.
lernzeit <- c(2,3,4,5,6,7,8,9,10)
note <- c(5.5,5,4.8,4.5,4,3.8,3.5,3.2,3)
daten2 <- data.frame(lernzeit, note)
# Scatterplot mit Regressionslinie
ggplot(daten2, aes(x=lernzeit, y=note)) +
geom_point(color="blue") +
geom_smooth(method="lm", se=FALSE, color="red") +
labs(title="Lernzeit vs. Prüfungsnote")
## `geom_smooth()` using formula = 'y ~ x'
# Korrelationskoeffizient
cor(daten2$lernzeit, daten2$note)
## [1] -0.9953946
Scatterplot: Mit zunehmender Lernzeit sinken die Noten (in unserem Beispiel: kleinere Noten = bessere Leistung).
Korrelationskoeffizient: r ≈ -0.99 → sehr starke negative Korrelation.
Interpretation: Mehr Lernzeit führt in der Regel zu besseren Noten (niedrigere Werte). Der Zusammenhang ist stark und fast linear.
set.seed(123)
trainingsstunden <- runif(20, 2, 10) # 2 bis 10 Stunden Training
puls <- 200 - trainingsstunden*5 + rnorm(20, 0, 5) # mehr Training -> tieferer Puls
daten_sport <- data.frame(trainingsstunden, puls)
head(daten_sport)
## trainingsstunden puls
## 1 4.300620 184.6173
## 2 8.306441 160.2669
## 3 5.271815 175.6448
## 4 9.064139 155.2327
## 5 9.523738 149.6021
## 6 2.364452 197.1123
plot(daten_sport$trainingsstunden, daten_sport$puls,
xlab="Trainingsstunden pro Woche", ylab="Puls nach 5 km",
main="Sportdaten: Training vs. Puls")
cor(daten_sport$trainingsstunden, daten_sport$puls)
## [1] -0.9532671
Scatterplot: Mit zunehmenden Trainingsstunden sinkt der Puls nach dem Lauf. Die Punkte zeigen einen abfallenden Trend.
Korrelationskoeffizient: z. B. r ≈ -0.80 → starke negative Korrelation.
Interpretation: Mehr Training führt zu besserer Kondition, sodass der Puls nach 5 km niedriger ist. Der negative Zusammenhang zeigt, dass eine Zunahme der Trainingszeit tendenziell eine Abnahme der Pulsfrequenz bewirkt.
set.seed(456)
bmi <- rnorm(20, mean=25, sd=4)
blutdruck <- 100 + bmi*2.5 + rnorm(20, 0, 5)
daten_medizin <- data.frame(bmi, blutdruck)
head(daten_medizin)
## bmi blutdruck
## 1 19.62591 146.6918
## 2 27.48710 160.1312
## 3 28.20350 163.3746
## 4 19.44443 149.6523
## 5 22.14257 155.1773
## 6 23.70376 164.9308
ggplot(daten_medizin, aes(x=bmi, y=blutdruck)) +
geom_point(color="darkred") +
geom_smooth(method="lm", se=FALSE, color="black") +
labs(title="Blutdruck vs. BMI")
## `geom_smooth()` using formula = 'y ~ x'
cor(daten_medizin$bmi, daten_medizin$blutdruck)
## [1] 0.9223714
cor.test(daten_medizin$bmi, daten_medizin$blutdruck)
##
## Pearson's product-moment correlation
##
## data: daten_medizin$bmi and daten_medizin$blutdruck
## t = 10.13, df = 18, p-value = 7.317e-09
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8107894 0.9692677
## sample estimates:
## cor
## 0.9223714
Scatterplot: Mit zunehmendem BMI steigt tendenziell der Blutdruck. Die Punkte liegen in etwa entlang einer steigenden Linie.
Korrelationskoeffizient: z. B. r ≈ 0.85 → starke positive Korrelation.
Interpretation: Personen mit höherem BMI haben oft einen höheren Blutdruck. Der Zusammenhang ist deutlich, aber nicht perfekt linear, weil individuelle Unterschiede bestehen.
set.seed(789)
temperatur <- seq(20, 34, length.out=15)
wachstum <- temperatur*1.5 + rnorm(15, 0, 5)
daten_bio <- data.frame(temperatur, wachstum)
head(daten_bio)
## temperatur wachstum
## 1 20 32.62048
## 2 21 20.19616
## 3 22 32.90160
## 4 23 35.41570
## 5 24 34.19324
## 6 25 35.07758
plot(daten_bio$temperatur, daten_bio$wachstum,
xlab="Temperatur (°C)", ylab="Bakterienwachstum (Einheiten)",
main="Biologie: Temperatur vs. Wachstum")
cor(daten_bio$temperatur, daten_bio$wachstum)
## [1] 0.8894133
Scatterplot: Wachstum steigt mit der Temperatur, Punkte liegen nahe einer steigenden Linie.
Korrelationskoeffizient: r ≈ 0.95 → starke positive Korrelation.
Interpretation: Höhere Temperaturen fördern das Wachstum der Bakterien in diesem Messbereich.