16 Lineare Regression
Das Ziel der linearen Regression besteht darin, den Zusammenhang zwischen zwei (oder später auch mehr als zwei) Variablen
Die Frage ist nun: Welche Gerade passt sich am besten der Punktewolke an? Anders gefragt: Wie soll man den Achsenabschnitt (engl. intercept)
Noch ein Hinweis zur Sprechweise: Wenn
16.1 Herleitungen
Um die Frage nach der optimalen Anpassung zu beantworten, braucht man ein Kriterium, mit dem beurteilt werden kann, wie gut sich eine Gerade an die Punktewolke anpasst. Das gängige Kriterium ist die Summe der quadrierten Residuen, also die Summe aller
Wie müssen
Die beiden partiellen Ableitungen der Zielfunktion sind
Nullsetzen der Ableitung nach
Wir kehren aber nun zu der Schreibweise ohne die Residuen zurück. Für das Optimum müssen diese beiden Gleichungen simultan erfüllt sein:
16.2 Anpassungsgüte
Die minimierte Summe der quadrierten Residuen beträgt
Zu jeden
Aus der Definition der Prognosen folgt: Die tatsächlich beobachteten
Der Anteil der erklärten Streuung
Achtung: Wenn zwischen zwei Variablen
Wenn
16.3 Lineare Modelle in R
Die Regression
regr <- lm(Y~X, data=DATAFRAME)
Dabei ist DATAFRAME
der Name des Dataframes, in dem die Variablen Y~X
wird in R “formula” genannt. Sie bedeutet, dass die Variable links von der Tilde (also hier
Als Ergebnis der linearen Regression wird ein recht komplexes Objekt ausgegeben. In dem obigen Befehl wird dieses Objekt unter dem Namen regr
gespeichert (und erscheint auch im Environment-Pane).
Das Objekt regr
enthält
den Achsenabschnitt
und den Steigungskoeffizienten ; sie können durchcoefficients(regr)
als Vektor ausgelesen werden oder durchregr
bzw.print(regr)
angezeigt werden,die Residuen
; sie können durchresiduals(regr)
ausgelesen werden,die Prognosen
; sie können durchfitted.values(regr)
ausgelesen werden,weitere Informationen, die uns jedoch (noch) nicht interessieren.
Beispiel:
Wir betrachten den Auszug aus der Movie-Database tmdb
und schränken den Datensatz auf Filme aus 2016 ein. Den Datensatz mit den neuen Filmen speichern wir als Dataframe filme2016
.
<- read_csv("../data/tmdb.csv",
tmdb col_types = "cfnnnnn")
<- filter(tmdb, year == 2016) filme2016
Nun regressieren wir das Einspielergebnis revenue
auf das Filmbudget budget
und speichern das lm
-Objekt unter dem Namen regr
.
<- lm(revenue~budget, data=filme2016) regr
Der Achsenabschnitt und der Steigungskoeffizient der optimal angepassten Regressionsgeraden sind
regr
Call:
lm(formula = revenue ~ budget, data = filme2016)
Coefficients:
(Intercept) budget
3.381 2.860
Eine Erhöhung des Budgets um 1 Mio. Dollar hat also in diesem Datensatz im Mittel zu einer Erhöhung des Einspielergebnisses von etwa 2.9 Mio. Dollar geführt.
Das Bestimmtheitsmaß
summary(regr)
Call:
lm(formula = revenue ~ budget, data = filme2016)
Residuals:
Min 1Q Median 3Q Max
-253.08 -52.71 -5.91 27.00 658.09
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.3808 19.2088 0.176 0.861
budget 2.8599 0.2502 11.430 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 140.1 on 86 degrees of freedom
Multiple R-squared: 0.603, Adjusted R-squared: 0.5984
F-statistic: 130.6 on 1 and 86 DF, p-value: < 2.2e-16
Das “Multiple R-squared” (also
Die Funktion summary
berechnet neben dem summary
-Funktion mit dem Dollarzeichen herausziehen:
summary(regr)$r.squared
[1] 0.6030412
16.4 Grafische Darstellung
Die Regressionsgerade wird häufig in ein Streudiagramm eingefügt. Das ist empfehlenswert, weil (a) es den Verlauf leichter erkennbar macht, (b) Ausreißer und unplausible Werte in den Daten leicht erkennbar sind und (c) die Streuung der Punkte um die Regressionsgerade herum visualisiert wird. Die Funktion ggplot
bietet eine einfache Möglichkeit, die Regressionsgerade in ein Streudiagramm einzufügen.
Beispiel:
In einem Streudiagramm wird das Einspielergebnis revenue
gegen das Filmbudget budget
abgetragen.
ggplot(filme2016, aes(x=budget, y=revenue)) +
geom_point()
In diese Abbildung fügen wir nun die Regressionsgerade ein. Dazu ergänzen wir mit einem weiteren Pluszeichen ein Geom, und zwar geom_smooth
. Dieses Geom fügt eine geglättete Kurve in ein Streudiagramm ein, und eine mögliche Kurve ist die Regressionsgerade. Die Optionen dafür ist method="lm"
(für lineares Modell).
ggplot(filme2016, aes(x=budget, y=revenue)) +
geom_point() +
geom_smooth(method="lm")
`geom_smooth()` using formula = 'y ~ x'
Zwei Kleinigkeiten können noch verbessert werden: Erstens, es gibt eine Benachrichtigung, dass für die Regression die formula=y~x
(wie im lm
-Befehl) hinzufügen. Zweitens erkennt man in der Grafik einen grauen Bereich um die Regressionsgerade herum. Dieser Bereich gibt die Unsicherheit der Anpassung an - ein Thema, das Sie (zumindest wenn Sie Volkswirtschaftslehre studieren) später in dem Modul Empirical Economics kennen lernen werden. Der graue Bereich kann durch die Option se=FALSE
ausgeschaltet werden. Damt ergibt sich insgesamt:
ggplot(filme2016, aes(x=budget, y=revenue)) +
geom_point() +
geom_smooth(method="lm", formula=y~x, se=FALSE)
16.5 Multiple lineare Regression
In vielen Fällen ist es plausibel, dass man eine Variable
Die Beobachtungen sind die Punkte
Zusammen mit den Residuen
Für die Herleitung, die wir hier überspringen, sind die Methoden der linearen Algebra notwendig, die in dem Wahlpflicht-Modul Mathematik 2: Lineare Algebra für Wirtschaftswissenschaften gründlich eingeführt werden. Ausführlich wird die multiple lineare Regression in dem Wahlpflicht-Modul Econometrics und dem Pflicht-Modul Empirical Economics (nur für VWL) behandelt. An dieser Stelle wird daher nur ein kurzer Ausblick auf diese Methode gegeben. Worauf man achten muss und wo die Fallstricke der multiplen linearen Regression liegen, lernen Sie später in den anderen Modulen.
In R ist die Schätzung einer multiplen linearen Regression genauso einfach wie eine Regression mit nur einer erklärenden Variablen. Die Syntax der multiplen linearen Regression von
regr <- lm(Y ~ X1 + X2 + ... + Xk, data=DATAFRAME)
wobei DATAFRAME
der Name des Dataframes ist, in dem die Variablen enthalten sind.
Beispiel:
Wir betrachten weiterhin den Datensatz filme2016
, also alle Filme aus der Movie Database, die 2016 erschienen sind. Das Einspielergebnis wird nun jedoch nicht nur auf das Budget regressiert, sondern zusätzlich auf die Filmdauer duration
und die durchschnittliche Bewertung avgvote
.
<- lm(revenue ~ budget + duration + avgvote,
regr2 data=filme2016)
Das Ergebnis der Regression wird in dem Objekt regr2
gespeichert. Es enthält den Achsenabschnitt coefficients(regr)
als Vektor ausgelesen werden. Sie werden auch angezeigt, wenn man einfach regr2
oder print(regr2)
eingibt.
regr2
Call:
lm(formula = revenue ~ budget + duration + avgvote, data = filme2016)
Coefficients:
(Intercept) budget duration avgvote
-136.301 2.994 -1.573 51.404
Das Ergebnis zeigt, dass das Einspielergebnis eines Films im Mittel um rund 3 Mio. Dollar höher ausfällt, wenn das Budget um 1 Mio. Dollar erhöht wird. Längere Filme spielen etwas niedrigere Ergebnisse ein: Wenn die Filmlänge um eine Minute steigt, sinkt das Ergebnis im Mittel um 1.57 Mio. Dollar. Auch mit der Bewertung der Zuschauer hängt das Ergebis zusammen. Eine bessere Bewertung geht mit einem höheren Ergebnis einher. Eine Erhöhung um 1 Punkt (auf der Bewertungsskala) geht im Mittel mit einer Erhöhung des Ergebnisses um 51.4 Mio. Dollar einher.
In dem Objekt regr2
findet man außerdem die Residuen und die Prognosen. Sie können durch residuals(regr2)
bzw. fitted.values(regr)
ausgelesen werden.
Auch bei der multiplen linearen Regression gibt das Bestimmtheitsmaß summary
-Funktion berechnet. In diesem Beispiel ergibt sich
summary(regr2)
Call:
lm(formula = revenue ~ budget + duration + avgvote, data = filme2016)
Residuals:
Min 1Q Median 3Q Max
-229.62 -61.10 -4.28 25.83 621.30
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -136.3008 126.0086 -1.082 0.28249
budget 2.9935 0.2747 10.898 < 2e-16 ***
duration -1.5728 1.1496 -1.368 0.17492
avgvote 51.4040 17.5955 2.921 0.00447 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 135 on 84 degrees of freedom
Multiple R-squared: 0.64, Adjusted R-squared: 0.6272
F-statistic: 49.78 on 3 and 84 DF, p-value: < 2.2e-16
Das Bestimmtheitsmaß beträgt also 0.64.