class: center, middle, inverse, title-slide # Logarithmus und Exponenten ##
🤔 Was haben die in einer Regression verloren? ### Sebastian Sauer ### Hochschule Ansbach ### 2021-06-10 --- <style> .center2 { margin: 0; position: absolute; top: 50%; left: 50%; -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } </style> # 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[![qr-log-log-regression](qr-log-log.png)] .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
--- # So sieht additives Wachstum aus .pull-left[ ```r ggplot(d) + aes(x = x, y = y) + geom_point() + geom_smooth(method = "lm") ``` ] .pull-right[ ![](plot-additiv-1.png) ] 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 # LogY-Regression --- name:log-regression # LogY-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<sup>*</sup> 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[<sup>*</sup> 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
--- # Exponentiellen Zusammenhang visualisieren .pull-left[ ```r ggplot(d2) + aes(x = x, y = y) + geom_point() + geom_smooth() ``` ] .pull-right[ ![](plot-exp-1.png) ] Steigt X um 1 Einheit, so steigt Y um einen konstanten Faktor: exponentielles Wachstum. --- # Log-Y-Regression in R ```r lm_logy <- lm(log(y) ~ x, data = filter(d2, y > 0)) lm_logy ``` ``` ## ## Call: ## lm(formula = log(y) ~ x, data = filter(d2, y > 0)) ## ## Coefficients: ## (Intercept) x ## -0.04559 0.10033 ``` *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) ``` ``` ## (Intercept) x ## -0.04559037 0.10032727 ``` ```r exp(0.1) ``` ``` ## [1] 1.105171 ``` "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 <i class="fas fa-exclamation-triangle"></i> 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 # LogY-LogX-Regression --- # LogY-LogX-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
--- # LogY-LogX-Regression in R ```r lm_loglog <- lm(log(y) ~ log(x), data = filter(d3, y > 0 & x > 0)) lm_loglog ``` ``` ## ## Call: ## lm(formula = log(y) ~ log(x), data = filter(d3, y > 0 & x > 0)) ## ## Coefficients: ## (Intercept) log(x) ## -0.005982 2.001501 ``` *Achtung*: FĂĽr negative Zahlen ist der Logarithmus nicht definiert. --- # Visualisierung eines LogY-LogX-Zusammenhangs .pull-left[ ```r ggplot(d3) + aes(x = x, y = y) + geom_point() + geom_smooth() ``` ] .pull-right[ ![](plot-potenz-1.png) ] 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
--- # Verdoppelt sich X, vervierfacht sich Y
--- # Wie interpretiert man eine LogY-LogX-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 LogY-LogX-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}$$` --- # LogY-LogX1-LogX2-Modell Eine LogY-LogX-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 LogY-LogX1-LogX2-Modell - 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
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 .small[ - Date: 2021-06-10 - Slides built with `xaringan`, based on `rmarkdown` - Packages: assertthat 0.2.1, backports 1.2.1, broom 0.7.6, bslib 0.2.5.1, cellranger 1.1.0, cli 2.5.0, colorspace 2.0-1, crayon 1.4.1, crosstalk 1.1.1, DBI 1.1.1, dbplyr 2.1.1, digest 0.6.27, dplyr 1.0.6, DT 0.18, ellipsis 0.3.2, evaluate 0.14, fansi 0.5.0, farver 2.1.0, forcats 0.5.1, fs 1.5.0, generics 0.1.0, ggdendro 0.1.22, ggforce 0.3.3, ggformula 0.10.1, ggplot2 3.3.3, ggrepel 0.9.1, ggridges 0.5.3, ggstance 0.3.5, glue 1.4.2, gridExtra 2.3, gtable 0.3.0, haven 2.4.1, hms 1.1.0, htmltools 0.5.1.1, htmlwidgets 1.5.3, httr 1.4.2, jquerylib 0.1.4, jsonlite 1.7.2, knitr 1.33, labeling 0.4.2, labelled 2.8.0, lattice 0.20-44, leaflet 2.0.4.1, lifecycle 1.0.0, lubridate 1.7.10, magrittr 2.0.1, MASS 7.3-54, Matrix 1.3-4, mgcv 1.8-35, modelr 0.1.8, mosaic 1.8.3, mosaicCore 0.9.0, mosaicData 0.20.2, munsell 0.5.0, nlme 3.1-152, pillar 1.6.1, pkgconfig 2.0.3, plyr 1.8.6, polyclip 1.10-0, purrr 0.3.4, R6 2.5.0, Rcpp 1.0.6, readr 1.4.0, readxl 1.3.1, reprex 2.0.0, rlang 0.4.11, rmarkdown 2.8, rstudioapi 0.13, rvest 1.0.0, sass 0.4.0, scales 1.1.1, sessioninfo 1.1.1, stringi 1.6.2, stringr 1.4.0, tibble 3.1.2, tidyr 1.1.3, tidyselect 1.1.1, tidyverse 1.3.1, tweenr 1.0.2, utf8 1.2.1, vctrs 0.3.8, withr 2.4.2, xaringan 0.21, xaringanExtra 0.4.3, xfun 0.23, xml2 1.3.2, yaml 2.2.1 - 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. ]