1. Was ist Korrelation?

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:

2. Korrelation mit R: Anwendungsbeispiele

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

Erklerungen

1) rnorm()

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

2) set.seed()

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.

3) Scatterplot in R (Basisfunktionen)

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

4) Scatterplot mit Regressionslinie

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

5) Scatterplot mit ggplot2

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'

6) Korrelation

# 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).

7) Korrelationsplot (mit corrplot)

# 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.

8) ggplot

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.

Grundaufbau

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'

Beispiel 1: Körpergrösse und Gewicht

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.

Beispiel 2: Lernzeit und Prüfungsnote

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.

Beispiel 3: Sport (Trainingsstunden & Pulsfrequenz)

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.

Beispiel 4: Medizin (Blutdruck & BMI)

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.

Beispiel 5: Biologie (Temperatur & Bakterienwachstum)

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.