R Code [zeigen / verbergen]
::p_load(tidyverse, magrittr)
pacman<- c("#000000", "#E69F00", "#56B4E9", "#009E73",
cbbPalette "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
Letzte Änderung am 28. September 2023 um 16:30:14
In diesem Kapitel werden wir uns einmal mit den wichtigsten mathematischen Funktionen in der Anwendung beschäftigen. Wir schauen uns dabei die am meisten genutzten und am häufigsten vorkommenden Funktionen an. Daher fangen wir mit der linearen Funktion an, die uns dann in der Statistik sehr lange begleiten wird. Darüber hinaus schauen wir auch einmal auf die exponentielle Funktion, die in der Form uns später das ein oder andere Mal in der Analyse von echten Daten über den Weg läuft.
Wir wollen folgende R Pakete in diesem Kapitel nutzen. Zum einen brauchen wir das R Paket tidyverse
um uns die Daten zu bauen, die wir dann mit dem R Paket ggplot
visualisieren wollen. Das R Paket ggplot
ist schon in dem R Paket tidyverse
mit enthalten.
::p_load(tidyverse, magrittr)
pacman<- c("#000000", "#E69F00", "#56B4E9", "#009E73",
cbbPalette "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
Wiederholen wir einmal die klassische lineare Funktion. Die lineare Funktion wird durch zwei Parameter bestimmt. Einmal die Steigung \(m\) sowie der y-Achsenabschnitt \(b\). Wenn also \(x\) um 1 ansteigt, dann ändert sich \(y\) um den Wert von \(m\). Die Gerade schneidet die \(y\)-Achse an dem \(y\)-Wert von \(b_0\).
\[ f(x) = mx + b_0 \]
In der Abbildung 6.1 sehen wir die lineare Funktion \(f(x) = 1.5 \cdot x + 5\) einmal als Gerade dargestellt. Hier wird nochmal schnell klar, was die Parameter der Geradengleichung aussagen. Die Gerade passiert die \(y\)-Achse bei einem Wert von 5. Wenn wir von \(x=0\) zu \(x=5\) gehen, dann steigt die Gerade von \(y = 5\) auf \(y = 12.5\). Damit ist dann die Steigung \(m = \tfrac{12.5-5}{5} = 1.5\). Eigentlich realtiv einfach und straight forward.
tibble(x = 0:10,
y = 1.5 * x + 5) %>%
ggplot(aes(x, y)) +
theme_radar() +
ylim(0, NA) +
geom_path() +
geom_point()
In diesem Abschnitt schauen wir uns die verschiedenen Arten der Exponentialfunktion an. Zum einen den exponentiellen Anstieg, den exponentiellen Abfall sowie die Sättigungsfunktion. Alle drei Arten der Exponentialfunktion haben in der Biologie ihren Platz und daher sollten wir die Grundlagen kennen.
Auf der Wikipedia Seite finden sich Beispiele für das exponentielle Wachstum.
Die Exponentialfunktion ist eine sehr wichtige biologische Funktion. Wir können mit der Exponentialfunktion zum Beispiel Wachstum oder aber Zerfall. Deshalb hier einmal die grundlegende Formel für die Exponentialfunktion.
\[ f(x) = b_0 + a \cdot b_1^{c\cdot x + d} \] Wir haben hier wieder den \(y\)-Achsenabschnitt \(b_0\). Dann einen Multiplikator \(a\) für die eigentliche Exponentialfunktion. Der wichtigste Parameter ist hierbei dann das \(b_1\) oder die Basis. Wir haben dann noch den Exponenten, der meistens nur ein \(x\) sein kann oder wiederum eine lineare Funktion. Wir konzentrieren uns hier eher auf die einfachen Exponentialfunktion.
In der folgenden Gleichung sehen wir die Exponentialfunktion \(f(x) = 2^x\) mit der Basis \(2\) und dem Exponenten \(x\).
\[ f(x) = 2^x \]
Wir können uns dann einmal die Daten erschaffen.
<- tibble(x = 0:10,
exp_tbl y = 2^x)
%>% print(n = Inf) exp_tbl
# A tibble: 11 × 2
x y
<int> <dbl>
1 0 1
2 1 2
3 2 4
4 3 8
5 4 16
6 5 32
7 6 64
8 7 128
9 8 256
10 9 512
11 10 1024
In der Abbildung 6.2 sehen wir die Exponentialfunktion \(f(x) = 2^x\) einmal dargestellt.
%>%
exp_tbl ggplot(aes(x, y)) +
theme_radar() +
geom_path() +
geom_point()
Häufig brauchen wir aber nicht die Information von \(y\) und haben das \(x\) gegeben, sondern genau andersherum. Wir haben ein \(y\) gegeben und wollen dafür das \(x\) ausrechnen. Für die Exponentialfunktion ist die Umkehrfunktion der Logarithmus \(\log()\). Nehmen wir folgende Exponentialfunktion einmal an.
\[ 8 = 2^x \]
Wir wollen jetzt die Funktion nach \(x\) auflösen und nutzen dafür den Logarithmus. Wir haben eine Basis von \(2\) also nutzen wir den \(\log_2\) von \(8\) um den Exponenten \(x\) zu erhalten.
\[ \log_2(8) = 3 \]
Manchmal rechnen wir mit einer recht großen Basis oder aber der Taschenrechner hat die Funktion für einen Logarithmus einer beliebigen Basis nicht implementiert. Daher können wir folgende Rechenoperation nutzen.
\[ \log_a(b) = \cfrac{\log(b)}{\log(a)} \]
Das ganze einmal als Beispiel für die Basis \(12\) mit dem Logarithmus \(\log_{12}\).
\[ \log_{12}(50) = \cfrac{\log(50)}{\log(12)} = \cfrac{3.91}{2.48} = 1.58 \]
Häufig wollen wir nicht nur den Wert für einen Exponenten rechnen, also den Wert für \(f(x) = 2^5\), sondern die Summe aller \(x = 1, ..., 5\). Wir wollen also folgende Rechnung durchführen.
\[ 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 = 63 \]
Dafür können wir die folgende Formel nutzen. Wir setzen dann für \(b_1\) die Basis ein und für \(N\) den Exponenten bis zu dem wir einschließlich aufsummieren wollen.
\[ \sum_{n=0}^N b_1^n = \cfrac{b_1^{N + 1} -1}{b_1 - 1} \]
Das ganz können wir dann einmal ausfüllen. Die Basis \(b_1\) ist dann \(2\) und wir wollen bis zum fünften Exponenten aufsummieren. Daher ist dann \(N = 5\).
\[ \sum_{n=0}^5 2^n = \cfrac{2^{5 + 1} -1}{2 - 1} = 63 \]
Und einmal die Überprüfung in R Code. Der R Code sieht dann immer etwas wilder aus, da wir natürlich nicht eine Formel direkt in R eingeben können. Mit den Leerzeichen wird es eventuell dann etwas übersichtlicher.
2^(5+1) - 1)/(2 - 1) (
[1] 63
Wir können uns auch die Werte vom aufsummierten \(y\) auch einmal für jedes \(x\) berechnen lassen. Und nicht nur für \(x = 5\), wie wir es eben gerade gemacht haben. Daher stelle ich hier nochmal die Berechnung als Tabelle dar. In der Spalte cumsum_y
findet sich das aufsummierte \(y\).
%<>%
exp_tbl mutate(cumsum_y = (2^(x+1)-1)/(2-1))
exp_tbl
# A tibble: 11 × 3
x y cumsum_y
<int> <dbl> <dbl>
1 0 1 1
2 1 2 3
3 2 4 7
4 3 8 15
5 4 16 31
6 5 32 63
7 6 64 127
8 7 128 255
9 8 256 511
10 9 512 1023
11 10 1024 2047
Nachdem wir dann die Datentabelle haben, können wir die Funktion auch einmal abbilden. In der Abbildung 6.3 siehst du die exponentielle Funktion für \(f(x) = 2^x\).
%>%
exp_tbl ggplot(aes(x, cumsum_y)) +
theme_radar() +
geom_path() +
geom_point()
Es kann vorkommen, dass wir uns nicht nur einen exponentiellen Anstieg anschauen, sondern gleich mehrere. Oder anders ausgedrückt, wir haben noch einen Faktor \(a\) vor unserer exponentiellen Funktion in der Form \(f(x) = a \cdot r^n\). In dem Fall berechnen wir die Summe wie folgt.
\[ \sum_{n=0}^N a \cdot r^n = a\left(\cfrac{r^{N + 1} -1}{r - 1}\right) \]
Neben dem klassischen exponentiellen Wachstum gibt es noch den exponentiellen Abfall. Daher verringert sich unser ursprünglicher Wert exponentiell bis nichts mehr von “übrig” ist. Der Klassiker ist hier die Halbwertszeit. Wir haben also eine Menge \(N_0\) von einem radioaktiven Material als Startmenge. Dann wollen wir wissen, wie viel radioaktives Material liegt nach der Zeit \(t\) noch vor. Wir berechnen daher die Menge \(N(t)\). Dafür brauchen wir dann noch die Halbwertszeit \(t_{1/2}\) als Konstante für jedes radioaktive Material. Damit ist dann folgende Formel gegeben.
\[ N(t) = N_0 \cdot \cfrac{1}{2}^{\cfrac{t}{t_{1/2}}} \]
In der Abbildung 6.4 sehen wir dann die exponentielle Funktion für den Zerfall eines radioaktiven Nukleotids mit \(f(x) = 100 \cdot \cfrac{1}{2}^{\cfrac{t}{3.5}}\).
tibble(t = 0:30,
y = 100 * 1/2^(t/3.5)) %>%
ggplot(aes(t, y)) +
theme_radar() +
geom_path() +
geom_point()
Jedes biologisches Wachstum folgt einer Sättigungsfunktion auch wenn wir als erstes annehmen würden, es handelt sich um ein unbegrenztes exponentielles Wachstum. Hier wollen wir nicht in die Diskussion verfallen, ob es auch ein unbegrenztes ökonomisches Wachstum gibt oder nicht. Das Schneeballsystem sei hier nur warnend erwähnt.
Die Sättigungsfunktion hat ein Maximum \(b_0\) welches die Funktion nie erreicht. Von diesem Maximum \(b_0\) wird dann immer ein Term abgezogen. Dieser Term hat am Anfang einen recht großes Wert und wird mit größeren \(x\)-Werten immer kleiner. Daher nähert sich dann die Funktion dem Wert von \(b_0\) an.
\[ f(x) = b_0 - a \cdot b_1^{-c \cdot x + d} \]
Im Folgenden sehen wir einmal eine Gleichung einer Sättigungsfunktion als Beispiel. Die Funktion wird nie den maximalen Wert von \(6\) erreichen. Mit steigendem \(x\) wird jedoch der Malusterm immer kleiner, so dass sich die Werte dann \(6\) annähern.
\[ f(x) = 6 - 1.5 \cdot 2^{-\frac{1}{4}\cdot x + 2} \]
In der Abbildung 6.5 sehen wir den Zusammenhang nochmal visualisiert. Häufig führen biologische Wachstumsprozesse zu einer ähnlichen Sättigungsfunktion. Als weiteres Beispiel sei hier auch die Enzymekinetik mit der Michaelis-Menten-Gleichung berechnen.
tibble(x = 0:30,
y = 6 - 1.5 * 2^(-1/4*x + 2)) %>%
ggplot(aes(x, y)) +
theme_radar() +
geom_hline(yintercept = 6, color = cbbPalette[2]) +
geom_path() +
geom_point()