8  Lineare und exponentielle Funktion

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.

8.1 Genutzte R Pakete

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.

pacman::p_load(tidyverse, magrittr)
cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", 
                "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

8.2 Lineare Funktion

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 8.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() 

Abbildung 8.1— Eine einfache lineare Funktion mit der Steigung \(m = 1.5\) und dem y-Achsenabschnitt \(b_0 = 5\).

8.3 Exponentialfunktion

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.

8.3.1 Exponentieller Anstieg

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.

exp_tbl <- tibble(x = 0:10,
                  y = 2^x)
exp_tbl %>% print(n = Inf)
# 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 8.2 sehen wir die Exponentialfunktion \(f(x) = 2^x\) einmal dargestellt.

exp_tbl %>% 
  ggplot(aes(x, y)) +
  theme_radar() +
  geom_path() +
  geom_point() 

Abbildung 8.2— Die einfache Exponentialfunktion \(f(x) = 2^x\).

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 8.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() 

Abbildung 8.3— Exponentielle Funktion für \(f(x) = 2^x\)

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) \]

8.3.2 Halbwertszeit

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 8.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() 

Abbildung 8.4— Exponentielle Funktion für den exponentiellen Zerfall eines radioaktiven Nukleotids.

8.3.3 Sättigungsfunktion

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 8.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()

Abbildung 8.5— Exponentielle Funktion für eine Sättigung.