Beispiele aus verschiedenen Bereichen:
In allen Fällen liegt ein ungefähr linearer Zusammenhang vor, den man mit einer Geraden beschreiben kann.
Lineare Regression:
Die lineare Regression ist ein statistisches
Verfahren, mit dem wir den Zusammenhang zwischen zwei Grössen
untersuchen.
Wir wollen also herausfinden: Wie stark hängt eine Variable (z. B.
Gewicht) von einer anderen (z. B. Grösse) ab?
Das Ziel ist es, eine gerade Linie zu finden, die die Datenpunkte bestmöglich beschreibt.
\[ y = a x + b \]
Die Abweichungen der Datenpunkte von der Regressionsgeraden heissen Residuen.
Zur Einführung ein Beispiel mit einer Regressionsgeraden und sichtbaren Residuen (Abständen der Punkte von der Geraden):
# Beispieldaten
x <- c(1,2,3,4,5)
y <- c(2,2.5,3.7,3.2,5)
# Modell
model <- lm(y ~ x)
# Plot mit Regressionsgerade
plot(x, y, pch=16, col="blue", main="Lineare Regression mit Residuen",
xlab="x", ylab="y")
abline(model, col="red", lwd=2)
# Residuen einzeichnen
for(i in 1:length(x)){
segments(x[i], y[i], x[i], predict(model)[i], col="darkgreen", lty=2)
}
Dieser Graph zeigt:
Blaue Punkte = Beobachtungen
Rote Linie = Regressionsgerade
Grüne Striche = Residuen (Abweichungen der Punkte von der Geraden)
\[
y = a x + b
\]
\[ a = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2} \]
\[ b = \bar{y} - a \bar{x} \]
mit den Mittelwerten
\[ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i, \quad \bar{y} = \frac{1}{n}\sum_{i=1}^n y_i \]
Abhängige Variable y : Die Variable, die wir vorhersagen oder erklären möchten.
Unabhängige Variable(n) x : Die Variable(n), die verwendet werden, um die abhängige Variable vorherzusagen.
Regressionsgerade: Eine Linie, die die Beziehung zwischen den Variablen beschreibt. Sie hat die Form \(y=a+b \cdot x\), wobei \(a\) der Achsenabschnitt und \(b\) die Steigung ist.
Residuen (Fehlerterme) : Der Unterschied zwischen den tatsächlichen Werten und den vorhergesagten Werten der abhängigen Variable.
Die lineare Regression wird häufig in verschiedenen Bereichen wie Wirtschaft, Biologie und Sozialwissenschaften verwendet, um Trends zu analysieren und Vorhersagen zu treffen.
Körpergrösse und Gewicht
| x (Grösse in cm) | y (Gewicht in kg) |
|---|---|
| 160 | 55 |
| 165 | 60 |
| 170 | 65 |
| 175 | 68 |
| 180 | 72 |
Berechnung:
Regressionsgerade (ungefähr):
\[ y = 0.7x - 52 \]
Interpretation von Koeffizienten
Pro zusätzlichem
Zentimeter Körpergrösse steigt das Gewicht im Schnitt um etwa 0.7
kg.
# Daten
x <- c(160,165,170,175,180)
y <- c(55,60,65,68,72)
# Lineare Regression
model <- lm(y ~ x)
summary(model)
# Plot
plot(x,y, pch=16, col="blue", main="Lineare Regression", xlab="Koerpergroesse (cm)", ylab="Gewicht (kg)")
abline(model, col="red", lwd=2)
Bedeutung und Interpretation von
Bedeutung und
Interpretation \(R^2\)
Das Bestimmtheitsmass gibt an, wie gut die Regressionsgerade die Daten erklärt.
Formel: \[ R^2 = 1 - \frac{SS_{res}}{SS_{tot}} \]
par(mfrow=c(1,2))
# Sehr gute Anpassung
set.seed(1)
x1 <- seq(150,190,length.out=20)
y1 <- 0.7*x1 + 10 + rnorm(20,0,2)
model1 <- lm(y1~x1)
plot(x1,y1,pch=16,col="blue",main="Hohe Anpassung",xlab="Groesse",ylab="Gewicht")
abline(model1,col="red",lwd=2)
text(155, max(y1), paste0("R² = ", round(summary(model1)$r.squared,2)))
# Schlechte Anpassung
x2 <- seq(150,190,length.out=20)
y2 <- 0.7*x2 + 10 + rnorm(20,0,25)
model2 <- lm(y2~x2)
plot(x2,y2,pch=16,col="blue",main="Niedrige Anpassung",xlab="Groesse",ylab="Gewicht")
abline(model2,col="red",lwd=2)
text(155, max(y2), paste0("R² = ", round(summary(model2)$r.squared,2)))
👉 1. Diagramm \(R^2 = 0.96\) bedeutet, dass 96 % der Unterschiede in Gewicht durch Unterschiede in Grösse erklärt werden. Die restlichen 4 % hängen von anderen Faktoren oder Zufall ab.
👉 2. Diagramm \(R^2 = 0.17\) bedeutet, dass 17 % der Unterschiede in Gewicht durch Unterschiede in Grösse erklärt werden. Die restlichen 83 % hängen von anderen Faktoren oder Zufall ab.
summary(model)$r.squared
Schlafdauer und Konzentration in der 1. Lektion
schlaf <- c(4,5,6,7,8,9,10)
konz1 <- c(35,45,55,65,72,74,73)
model_schlaf <- lm(konz1 ~ schlaf)
plot(schlaf, konz1, pch=16, col="blue",
main="Schlafdauer und Konzentration in der 1. Lektion",
xlab="Schlafdauer (h)", ylab="Konzentrationspunkte")
abline(model_schlaf, col="red", lwd=2)
summary(model_schlaf)$r.squared
„ca 91 % der Unterschiede in der Konzentration lassen sich durch die Schlafdauer erklären.Nur 9 % hängen von anderen Faktoren ab.“
Aufgaben mit Lösungen
Schlafdauer und Konzentration
| Schlafdauer (h) | Konzentration (Punkte) |
|---|---|
| 4 | 35 |
| 5 | 45 |
| 6 | 55 |
| 7 | 65 |
| 8 | 72 |
| 9 | 74 |
| 10 | 73 |
schlaf <- c(4,5,6,7,8,9,10)
konz1 <- c(35,45,55,65,72,74,73)
model_schlaf <- lm(konz1 ~ schlaf)
summary(model_schlaf)
plot(schlaf, konz1, pch=16, col="blue",
main="Schlafdauer und Konzentration in der 1. Lektion",
xlab="Schlafdauer (h)", ylab="Konzentrationspunkte")
abline(model_schlaf, col="red", lwd=2)
summary(model_schlaf)$r.squared
Interpretation:
- Steigung ≈ 6.75, Achsenabschnitt ≈ 12.61.
- \(R^2 \approx 0.91\) → 91 % der
Unterschiede in der Konzentration werden durch die Schlafdauer
erklärt.
Trainingsstunden und 1000-m-Laufzeit
| Trainingsstunden (h/Woche) | 1000-m-Zeit (s) |
|---|---|
| 1 | 220 |
| 2 | 210 |
| 3 | 200 |
| 4 | 195 |
| 5 | 190 |
| 6 | 185 |
| 7 | 183 |
train <- c(1,2,3,4,5,6,7)
time1000 <- c(220,210,200,195,190,185,183)
model_train <- lm(time1000 ~ train)
summary(model_train)
plot(train, time1000, pch=16, col="blue",
main="Trainingsstunden vs. 1000-m-Zeit",
xlab="Trainingsstunden pro Woche", ylab="1000-m-Zeit (s)")
abline(model_train, col="red", lwd=2)
summary(model_train)$r.squared
Interpretation:
- Steigung ≈ –6.11, Achsenabschnitt ≈ 222.00.
- \(R^2 \approx 0.95\) → 95 % der
Unterschiede in den Laufzeiten werden durch die Trainingsstunden
erklärt.
Schlafdauer und Laune (1–10 Skala)
| Schlafdauer (h) | Laune (1–10) |
|---|---|
| 4 | 3 |
| 5 | 4 |
| 6 | 5 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | 9 |
schlaf2 <- c(4,5,6,7,8,9,10)
laune <- c(3,4,5,7,8,9,9)
model_laune <- lm(laune ~ schlaf2)
summary(model_laune)
plot(schlaf2, laune, pch=16, col="darkgreen",
main="Schlafdauer und Laune",
xlab="Schlafdauer (h)", ylab="Laune (1–10)")
abline(model_laune, col="red", lwd=2)
summary(model_laune)$r.squared
Interpretation:
- Steigung ≈ 0.9, Achsenabschnitt ≈ –0.1.
- \(R^2 \approx 0.95\) → ca. 95 % der
Unterschiede in der Laune werden durch die Schlafdauer erklärt.
Trainingseinheiten pro Woche und Trefferquote im Basketball
| Trainingseinheiten (pro Woche) | Trefferquote (%) |
|---|---|
| 1 | 40 |
| 2 | 45 |
| 3 | 50 |
| 4 | 60 |
| 5 | 65 |
| 6 | 70 |
| 7 | 72 |
training <- c(1,2,3,4,5,6,7)
treffer <- c(40,45,50,60,65,70,72)
model_basket <- lm(treffer ~ training)
summary(model_basket)
plot(training, treffer, pch=16, col="purple",
main="Trainingseinheiten und Trefferquote im Basketball",
xlab="Trainingseinheiten pro Woche", ylab="Trefferquote (%)")
abline(model_basket, col="red", lwd=2)
summary(model_basket)$r.squared
Interpretation:
- Bedeutung der Zahlen
Achsenabschnitt (≈ 35.0): Ohne Training hätte die Person laut Modell im Schnitt eine Trefferquote von 35 %.
Steigung (≈ 5.2): Jede zusätzliche Trainingseinheit pro Woche verbessert die Trefferquote im Schnitt um 5.2 Prozentpunkte.
\(R^2 \approx 0.97\): 97 % der Unterschiede in der Trefferquote werden durch die Trainingshäufigkeit erklärt.
Stell dir vor, du möchtest wissen, ob es einen Zusammenhang zwischen der Anzahl der Stunden, die du lernst, und deinen Noten gibt. Du könntest eine Linie zeichnen, die zeigt, wie deine Noten steigen, wenn du mehr Stunden lernst.
Die Formel für diese Linie ist: \[ \text { Note }=b+a \times \text { Stunden } \]
b ist der Punkt, an dem die Linie die y-Achse schneidet (deine Note, wenn du gar nicht lernst).
a ist die Steigung der Linie (wie viel deine Note steigt, wenn du eine Stunde mehr lernst).
Lineare Regression hilft uns, Vorhersagen zu treffen und Zusammenhänge zu verstehen.
Angenommen, wir haben die folgenden Daten zu den Lernzeiten (in Stunden) und den entsprechenden Prüfungsnoten (auf einer Skala von 0 bis 100) von Schülern:
Erstelle einen Scatterplot der Daten und berechne den Pearson-Korrelationskoeffizienten zwischen der Lernzeit und den Prüfungsnoten.
Interpretiere das Ergebnis des Pearson-Korrelationskoeffizienten.
Führe eine lineare Regression durch, um die Beziehung zwischen Lernzeit und Prüfungsnote zu modellieren.
Erstelle einen Scatterplot der Daten und füge die Regressionslinie hinzu.
Interpretiere die Ergebnisse der linearen Regression und des Plots.
Daten erstellen
lernzeit <- c(5, 10, 15, 20, 25)
pruefungsnote <- c(60, 70, 80, 90, 95)
Scatterplot der Daten
plot(lernzeit, pruefungsnote, main = "Scatterplot von Lernzeit und Prüfungsnote",
xlab = "Lernzeit (in Stunden)", ylab = "Prüfungsnote", pch = 19, col = "blue")
Pearson-Korrelation berechnen
pearson_correlation <- cor(lernzeit, pruefungsnote, method = "pearson")
print(paste("Pearson-Korrelationskoeffizient:", pearson_correlation))
Pearson-Korrelationskoeffizient: Der berechnete Pearson-Korrelationskoeffizient beträgt 1, was auf eine perfekte positive lineare Beziehung zwischen Lernzeit und Prüfungsnote hinweist. Das bedeutet, dass eine Zunahme der Lernzeit mit einer proportionalen Zunahme der Prüfungsnote verbunden ist.
Lineare Regression durchführen
model <- lm(pruefungsnote ~ lernzeit)
summary(model)
Der Koeffizient der Lernzeit (2) zeigt, dass jede zusätzliche Stunde Lernzeit die Prüfungsnote um 2 Punkte erhöht. Der Intercept (50) ist der geschätzte Prüfungswert, wenn die Lernzeit 0 Stunden beträgt.
Scatterplot erstellen und Regressionslinie hinzufügen
plot(lernzeit, pruefungsnote, main = "Scatterplot von Lernzeit und Prüfungsnote",
xlab = "Lernzeit (in Stunden)", ylab = "Prüfungsnote", pch = 19, col = "blue")
abline(model, col = "red")
Scatterplot und Regressionslinie: Der Scatterplot zeigt die Datenpunkte der Lernzeit und Prüfungsnote. Die rote Linie ist die Regressionslinie, die die beste lineare Anpassung der Daten darstellt. Eine steile positive Steigung der Linie zeigt eine starke positive Beziehung zwischen Lernzeit und Prüfungsnote.
Nehmen wir an, ein Kinderpsychologe vermutet, dass sich häufiges Fernsehen negativ auf das Schlafverhalten von Kindern auswirkt. Um dieser Frage nachzugehen, wurde bei neun zufällig ausgewählten Kindern gleichen Alters die Dauer (Y ) der Tiefschlafphasen einer Nacht in Stunden gemessen. Ausserdem wurde ebenfalls in Stunden angegeben, wie lange das Kind am Tag ferngesehen (X) hat. Es ergeben sich folgende Beobachtungen:
Erstelle einen Scatterplot der Daten und berechne den Pearson-Korrelationskoeffizienten zwischen der Fernsehzeit und der Dauer der Tiefschlafphase.
Interpretiere das Ergebnis des Pearson-Korrelationskoeffizienten.
Führe eine lineare Regression durch, um die Beziehung zwischen Fernsehzeit und der Dauer der Tiefschlafphase zu modellieren.
Erstelle einen Scatterplot der Daten und füge die Regressionslinie hinzu.
Interpretiere die Ergebnisse der linearen Regression und des Plots.
Nun bist du dran! Die Lösungen sind analog zum vorherigen Beispiel.
Hier ist eine Interpretation für das Regressionsmodell:
Regressionsgerade \[ \text{Tiefschlafphase} =6.16-0.45 \cdot \ \text{Fernsehzeit} \]
Aufgrund Regressionsgeraden würde man also bei einer Fernsehzeit von einer Stunde eine Tiefschlafphase von \(6.16-0.45 \cdot 1=5.71\) Stunden vorhersagen. Tatsächlich beobachtet wurde eine Tiefschlafphase von 5.6 Stunden bei einstündiger Fernsehzeit. Der tatsächlich beobachtete und der vorhergesagte Wert liegen also dicht beieinander. Bei einer Fernsehzeit von 2.2 Stunden erhalten wir aufgrund des Regressionsmodells eine prognostizierte Tiefschlafphase von 5.17 Stunden.
Man hat 12 Proben von panzlichem Gewebe untersucht und dabei das Gewicht der trockenen Substanz und den Wassergehalt bestimmt. Nach einigen Umrechnungen hat man zur Charakterisierung von Gewicht (xi) und Wassergehalt (yi) folgende Werte erhalten:
Man berechne die Gleichungen der beiden Regressionsgeraden und zeichne sie mit der durch die Wertepaare gegebenen Punktwolke. Anschliessend berechne man den Korrelationskoefizienten.
Nun bist du dran! Die Lösungen sind analog zum vorherigen Übungen.
Man hat bei 10 Sportlern Leistungsmessungen zu Beginn und am Ende einer längeren Trainingszeit durchgeführt und folgende Punktzahlen erhalten:
Man berechne zunächst die Gleichung der ersten Regressionsgeraden. Sie gestattet also, aus der Leistung zu Beginn der Trainingszeit einen ausgeglichenen Wert für die Leistung am Ende der Trainingszeit zu berechnen. Dann beurteile man die Güte dieses linearen Zusammenhanges durch Berechnung des Korrelationskoefizienten.
Nun bist du dran! Die Lösungen sind analog zum vorherigen Übungen.
Wir arbeiten mit dem Datensatz “blood_pressure.csv”. Für diese Übung werden nur die folgenden drei Variablen verwendet:
bp1: Blutdruck vor der Therapie
bp2: Blutdruck nach der Therapie
drug: Medikament, ja oder nein.
Die Frage lautet: Besteht ein Zusammenhang zwischen dem Blutdruck vor der Therapie und dem Blutdruck nach der Therapie bei Personen, welche ein Medikament erhalten haben?
Laden Sie den Datensatz in RStudio.
Formulieren Sie Ihre Hypothesen.
Erstellen Sie einen entsprechenden Teildatensatz, um die Frage beantworten zu können.
Überlegen Sie welches die abhängige und die unabhängige Variable ist und erstellen Sie ein Punktediagramm.
Berechnen Sie den passenden Korrelationskoeffizienten.
Erstellen Sie ein einfaches lineares Regressionsmodell und notieren Sie die Regressionsgleichung. Lassen Sie sich die 95% Konfidenzintervalle der Regressionskoeffizienten anzeigen.
Überprüfen Sie, ob die Residuen ungefähr normalverteilt sind.
Überprüfen Sie, ob Heteroskedastizität vorliegt. Erstellen Sie eine entsprechende Grafik.
Formulieren Sie Ihre Resultate.
install.packages("rio") # für Datei importieren
## Warning: Paket 'rio' wird gerade benutzt und deshab nicht installiert
library(rio)
bp<-import("C:/Users/arar/OneDrive - Kt. SG BLD/Dokumente/Rkurs24/RPubsN/Re_ Statistik mir R/blood_pressure.csv")
bp
Formulieren Sie Ihre Hypothesen. \(H_0\) : Es besteht kein Zusammenhang zwischen dem Blutdruck vor der Therapie und dem Blutdruck nach der Therapie bei Personen, welche ein Medikament erhalten haben. \(H_A\) : Es besteht ein Zusammenhang zwischen dem Blutdruck vor der Therapie und dem Blutdruck nach der Therapie bei Personen, welche ein Medikament erhalten haben.
Erstellen Sie einen entsprechenden Teildatensatz, um die Frage beantworten zu können.
bp_drug <- subset(bp, drug == "yes")
plot(bp_drug$bp1, bp_drug$bp2)
cor.test(bp_drug$bp1, bp_drug$bp2)
my_lm <- lm(bp2 ~ bp1, bp_drug)
summary(my_lm)
confint(my_lm)
\[y=−3.8677+0.9891×x\]
qqnorm(my_lm$residuals)
qqline(my_lm$residuals)
* Die Residuen folgen schon beinahe “perfekt” einer
Normalverteilung.
plot(my_lm$fitted.values, my_lm$residuals)
abline(h = 0)
* Die Residun sind symmetrisch und gleichmässig um 0 Verteilt. Also kein
Anzeichen für Heteroskedastizität.
Zwischen dem Blutdruck vor und nach der Therapie besteht ein positiver linearer Zusammenhang, d.h. je höher der Blutdruck vorher ist, desto höher ist er nach der Therapie. Der Zusammenhang ist stark und signifikant,r= 0.896 [0.821, 0.941], p < 0.0001.
Eine einfache lineare Regression mit bp2 als abhängige bp1 unabhängige Variable wurde durchgeführt. Die Regressionskoeffizienten sind a = -3.8677 [-21.826, 14.09] und b = 0.9891 [0.844, 1.13]. Pro mmHg Blutduck mehr vor der Therapie, ist der Blutdruck nach der Therapie durchschnittlich um 0.9891 höher. Der Blutdruck vor der Therapie erklärt 80.3% der Varianz des Blutdrucks nach der Therapie.
Achtung: nur weil die Steigung positiv ist, bedeutet dies nicht, dass der Blutdruck auf Grund der Therapie steigt. Im Gegenteil: Wenn man die Regressionsgleichung anwendet, dann merkt man, dass der mittlere Blutdruck nach der Therapie tiefer ist!