```{r setup, include=FALSE} options(htmltools.dir.version = FALSE) ``` ```{r global-knitr-options, include=FALSE} knitr::opts_chunk$set(fig.pos = 'H', fig.asp = 0.618, fig.width = 5, fig.cap = "", fig.path = "", echo = TRUE, message = FALSE, warning = FALSE, cache = FALSE, fig.show = "hold") ``` ```{r include=FALSE} library(tidyverse) library(DT) library(xaringanExtra) library(mosaic) ``` ```{r xaringan-extra, echo=FALSE} use_xaringan_extra(c("tile_view", "tachyons")) #xaringanExtra::use_animate_all("slide_left") ``` # URL zum Quellcode [https://sebastiansauer.github.io/2021-sose/QuantMeth1/Vertiefung/Log-Log-Regression.html#1](https://sebastiansauer.github.io/2021-sose/QuantMeth1/Vertiefung/Log-Log-Regression.html#1) .center[] .footnote[Lizenz: [CC-BY](https://creativecommons.org/licenses/by/4.0/)] --- # Gliederung .center2[.large[ 1. [Standard-Regression](#standard-regression) 2. [LogY-Regression](#log-regression) 3. [LogY-LogX-Regression](#log-log-regression) 4. [Fazit](#fazit) ]] --- name: standard-regression class: center, middle, inverse # Standard-Regression --- # Regression in Standardform 🥱 ## Additiver Zusammenhang $$y= b0 + b_1x$$ bzw. $$y = b0 + b_1x_1 + b_2 x_2 + \ldots + b_k x_k + \epsilon$$ .content-box-blue[Additiv!] Der gemeinsame Effekt der Prädiktoren auf Y ist die Summe der einzelnen Effekte --- # Wir definieren einen einfachen Datensatz ```{r} d <- tibble( x = rep(0:10, 10), y_hat = x, e = rnorm(n = (10+1)*10) %>% round(2), y = y_hat + e ) ``` - $x$: Prädiktor - $\hat{y}$: vorhergesagter Y-Wert - $e$: Fehler - $y$: beobachteter Y-Wert --- # `d`: Ein Datensatz für additives Wachstum ```{r echo = FALSE} datatable(d, options = list(pageLength = 7)) ``` --- # So sieht additives Wachstum aus .pull-left[ ```{r plot-additiv, fig.show = "hide"} ggplot(d) + aes(x = x, y = y) + geom_point() + geom_smooth(method = "lm") ``` ] .pull-right[ `) ] Bei einem Unterschied in X von 1, beträgt der vorhergesagte Unterschied in Y 1 (bzw. $k$ im allgemeinen Fall). Für jede Einheit, die X steigt, steigt Y um einen festen Wert $k$: additives Wachstum. ✔️ *Beispiel:* Für jede Stunde Lernen für die Klausur, "wächst" der vorhergesagte Klausurerfolg um 0,42 Punkte. --- class: center, middle, inverse # Log-Linear-Regression --- name:log-regression # Log-Linear-Regression ## Exponentieller Zusammenhang $$log(y) = x$$ Exponentiert man beide Seite, so erhält man: $$y = e^x$$ $e$ ist die Eulersche Zahl: 2.71... --- # Einfache Beispiele für exponentielle Zusammenhänge - Eine Bakterienmenge verdoppelt sich jeden Tag - Pro Jahr erzielt eine Kapitalanlage 10% Zinsen - Während einer bestimmten Periode verdoppelten sich die Coronafälle alle 10 Tage - Die Menge der Vitamine in einem Lebensmittel verringert sich pro Zeiteinheit um den Faktor $k$ Generell bieten sich Wachstumsprozesse für exponentielle Zusammenhänge an. Man kann auch "datengetrieben" eine Log-Regression verwenden, wenn man sieht, dass sich so die Vorhersageleistung verbessert. --- # Exponentielles Wachstum Beim exponentiellen Wachstum wächst eine Größe pro Zeitabschnitt immer um denselben Faktor. Die Änderung einer Größe $A$ pro Zeitabschnitt $t$ ist proportional* zum Bestand von $A$: $$\frac{dA}{dt} \sim A$$ Exponentielles Wachstum wächst (ab einem bestimmten Zeitpunkt) sehr stark und wird daher leicht unterschätzt. .footnote[* Proportional bedeutet, Verdopplung (Verdreifachung, Vervierfachung...) einer Größe ist stets mit der Verdopplung (Verdreifachung, Vervierfachung, ...) der anderen Größe verbunden. So ist der Kreisumfang proportional zum Kreisdurchmesser mit dem Proportionalitätsfaktor 3.14.] --- # `d2`: Daten für exponentiellen Zusammenhang ```{r} euler_e <- 2.71 d2 <- tibble( x = rep(0:100, 10), y_hat = euler_e^(0.1*x) %>% round(2), e = rnorm(n = (101)*10) %>% round(2), y = y_hat + e ) ``` --- # So sieht der Datensatz `d2` aus ```{r echo = FALSE} datatable(d2, options = list(pageLength = 7)) ``` --- # Exponentiellen Zusammenhang visualisieren .pull-left[ ```{r plot-exp, fig.show = "hide"} ggplot(d2) + aes(x = x, y = y) + geom_point() + geom_smooth() ``` ] .pull-right[ `) ] Steigt X um 1 Einheit, so steigt Y um einen konstanten Faktor: exponentielles Wachstum. --- # Log-Linear-Regression in R ```{r} lm_logy <- lm(log(y) ~ x, data = filter(d2, y > 0)) lm_logy ``` *Achtung*: Für negative Zahlen ist der Logarithmus nicht definiert. --- # Interpretation einer Log-Y-Regression .bg-light-blue.b--dark-blue.bw2.br3.shadow-5.ph4.mt5[ .center[Log-Y-Regression modelliert exponentiellen Zusammenhang]] Kleine Koeffizienten $[-0.3;0.3]$ lassen sich ohne delogarithmieren als Wachstumsfaktoren interpretieren: ```{r} coef(lm_logy) ``` ```{r} exp(0.1) ``` "Zwei Beobachtungen die sich um eine Einheit in X unterscheiden, unterscheiden sich etwa um 10% in Y". --- # Wann soll ich eine Log-Y-Regression verwenden? ## Verwenden Sie die Log-Y-Regression, wenn Sie von einem exponentiellen Zusammenhang ausgehen. Beispiele: - Wachstumsprozesse (z.B. Bevölkerung, Corona, Bakterien, radiokativer Zerfall) - Verzinsung Wenn sich Y um einen konstanten *Faktor* verändert, wenn sich X um einen konstanten *Wert* verändert, ist eine Log-Y-Regression sinnvoll. --- # Multiple LogY-Regression Ein lineare Modell in der Log-Skalierung entspricht einem multiplikativen Modell in der ursprünglichen Skalierung: $$log (y) = b_0 + b_1x_1 + b_2x_2 + \ldots + \epsilon$$ Exponenziert man beide Seiten, so erhält man $$y= e^{b_0 + b_1x_1 + b_2x_2 + \ldots + \epsilon}$$ $$y = e^{b_0} \cdot e^{b_1x_1} \cdot e^{b_2x_2} \cdot \ldots \cdot e^{\epsilon} $$ 💡 Y wird hier als multiplikative Funktion der Prädiktoren modelliert. --- name: log-log-regression class: center, middle, inverse # Log-Log-Regression --- # Log-Log-Regression $$y = x^2$$ Logarithmiert man beide Seiten, erhält man: $$log(y) = 2 log(x)$$ Sowohl Y als auch X sind logarithmiert. Eine Log-Log-Regression stellt also eine *Potenzfunktion* dar. 💡 Verwenden Sie die Log-Log-Regression, um quadratische (oder kubische...) Zusammenhänge zu modellieren. --- # `d3`: Daten für Zusammenhänge nach einer Potenzfunktion ```{r} d3 <- tibble( x = rep(0:100, 100), y_hat = x^2, e = rnorm(n = (101)*100) %>% round(2), y = y_hat + e ) ``` Hier am Beispiel einer Quadratfunktion. --- # So sieht der Datensatz `d3` aus ```{r echo = FALSE} datatable(d3, options = list(pageLength = 7)) ``` --- # Log-Log-Regression in R ```{r} lm_loglog <- lm(log(y) ~ log(x), data = filter(d3, y > 0 & x > 0)) lm_loglog ``` *Achtung*: Für negative Zahlen ist der Logarithmus nicht definiert. --- # Visualisierung eines LogY-LogX-Zusammenhangs .pull-left[ ```{r plot-potenz, fig.show = "hide"} ggplot(d3) + aes(x = x, y = y) + geom_point() + geom_smooth() ``` ] .pull-right[ `) ] Lineares Modell passt nicht; es liegt quadratisches Wachstum vor. Das entspricht einem Log-Log-Modell. --- # `d4`: Einfaches Zahlenbeispiel für ein Potenzgesetz ```{r} d4 <- tibble( x = 0:10, y = x^2, x_log = log(x, base = 2) %>% round(2), y_log = log(y, base = 2) %>% round(2) ) ``` --- # So sieht `d4` aus ```{r echo = FALSE} datatable(d4, options = list(pageLength = 7)) ``` --- # Verdoppelt sich X, vervierfacht sich Y ```{r echo = FALSE} datatable(d4, options = list(pageLength = 7)) ``` --- # Wie interpretiert man eine Log-Log-Regression? 💡 "Für je 100 % Unterschied in X, beträgt der vorhergesagte Unterschied in Y 200 % (allgemein: $k %$). [Herleitung einer multiplen LogY-LogX-Regression](https://www.wolframalpha.com/input/?i=log%28x%5E2+*+y%5E2%29) --- # Wann soll ich eine Log-Log-Regression verwenden? ## Verwenden Sie die Log-Log-Regression, wenn Sie von einem Potenzgesetz im Zusammenhang ausgehen, z.b. einem quadratischen Zusammenhang Beispiele: - Zusammenhang von Oberfläche und Volumen - Zusammenhang von Anziehungskraft und Nähe von (Himmels-)körpern - Preise von Kunstgegenständen - Umsatz nach Follower-Zahl Ändert sich Y um einen konstanten *Faktor*, wenn sich X um einen konstanten *Faktor* rändert, ist eine Log-Log-Regression sinnvoll. --- # Aber stimmt das alles wirklich? (1/2) Wie ist der Zusammenhang von X und Y in einer LogY-LogX-Regression zu verstehen? $$\log_b y = a_0 + a_1 \log x$$ Hier sind zwei Punkte $(x,y)$ spezifiziert: $$\log_b y_0 = a_0 + \log_b x_0 \\ \log_b y_1 = a_0 + \log_b y_1$$ Was ist der Wert von $log(y_1) - log(y_0)$? $$\begin{aligned}[t] \log_b(y_1) - \log_b(y_0) &= (a_0 + a_1 \log_b x_1) - (a_0 + a_1 \log x_0) ,\\ &= a_1 (\log_b x_1 - \log x_0) , \\ \log_b \left(\frac{y_1}{y_0} \right) &= \log_b \left(\frac{x_1}{x_0} \right)^{a_1} , \\ \frac{y_1}{y_0} &= \left( \frac{x_1}{x_0} \right)^{a_1} . \end{aligned}$$ --- # Log-Log-Modell mit mehreren Prädiktoren Eine Log-Log-Regression macht auch Sinn, um multiplikative Verknüpfungen dieser Art zu modellieren: $$y=ab \qquad \leftrightarrow \qquad log(y) = log(a) + log(b)$$ Zahlenbeispiel: $$100 = 10\cdot10 \qquad \leftrightarrow \qquad lg(100) = lg(10) + lg(10)$$ wobei `lg` für den Logarithmus zur Basis 10 steht. Natürlich ist auch $y=abc, y = abcd$ etc. möglich. --- # Aber stimmt das alles wirklich? (2/2) Also: $$\frac{y_1}{y_0} = \left( \frac{x_1}{x_0} \right)^{a_1}$$ Sei $s=y_1/y_0$ und $r=x_1/x0$, dann $$s=r^{a_1}$$ Steigt also $x$ umd den Faktor $r$, so steigt $y$ um den Faktor $r^{a_1}$. .footnote[[Quelle](https://jrnold.github.io/r4ds-exercise-solutions/model-building.html#exercise-24.2.2)] --- # Beispiel für ein Log-Log-Log-Modell mit mehreren Log-Prädiktoren - Der Preis eines Diamanten als Produkt von Gewicht und Schliff - Der Lernerfolg als Produkt von Motivation, Konzentration und Lernzeit - Das Wachstum einer Bakterienkolonie als Produkt von Nährstoffmenge und Zeit - Der Spritverbrauch als Produkt von Gewicht und Motorgröße Es gibt viele Situationen, in denen ein LogY-LogX1-LogX2-Modell helfen kann. --- # `d5`: Einfaches Zahlenbeispiel für eine Potenzfunktion Anstelle von $y=x\cdot x$ haben wir jetzt $y=a \cdot b$. ```{r} d5 <- tibble( a = 0:10, b = 0:10, y = a*b, log_y = log(y) %>% round(2), loga_plus_logb = (log(a) + log(b)) %>% round(2) ) ``` --- # So sieht `d5` aus ```{r echo = FALSE} datatable(d5, options = list(pageLength = 7)) ``` Y ist Produkt von a und b --- name: fazit class: center, middle, inverse # Fazit --- # tl;dr (Zusammenfassung) - *Normale Regression*: Wenn sich die Effekte der Prädiktoren zu einem Effekt (auf Y) *summieren* - *LogY-Regression*: Wenn sich die Effekte der Prädiktoren zu einem Effekt (auf Y) *multiplizieren* - *LogY-LogX-Regression*: Wenn sich die *multiplikativen* Effekte der Prädiktoren zu einem Effekt (auf Y) *multiplizieren* --- # Literatur [Regression and Other Stories: Andrew Gelman, Jennifer Hill, Aki Vehtari](https://avehtari.github.io/ROS-Examples/) --- # SessionInfo ```{r, size = 'tiny', output = "hide", eval = FALSE, echo = FALSE} sink("session_info.txt") sessioninfo::session_info() sink() ``` ```{r echo = FALSE} si <- sessioninfo::session_info() pckgs <- map2(si$packages$package, si$packages$loadedversion, ~ paste0(.x, " ", .y)) %>% simplify() ``` .small[ - Date: `r si$platform$date` - Slides built with `xaringan`, based on `rmarkdown` - Packages: `r pckgs` - For detailed `session_info()` check out this [text file](https://data-se.netlify.com/slides/papers-publizieren/session_info.txt). - Thanks for and to all open source developers. ]