Regression- und Datenanalyse
2020-06-05
1 Grundlagen
Zunächst wollen wir ein paar allgemeine Aspekte der Wahrscheinlichkeitsrechung und der Schätzung betrachten.
1.1 Frequentistischer Wahrscheinlichkeitsbegriff
Fasst man Wahrscheinlichkeiten frequentistisch auf, ist dies wie sie als relative Häufigkeiten für ein Ereignis aufzufassen, wenn die Wiederholung von Zufallsvorgängen sehr (undendlich) groß ist. Stellen wir uns einen Münzwurf vor. \(X_n\) bezeichnet die Anzahl an Kopfwürfen bei \(n\) Münzwürfen. Nach jedem Münzwurf betrachten wir \(\frac{x_n}{n}\) und sehen, dass sich dieser Anteil mit steigender Anzahl an Münzwürfen der theoretischen Wahrscheinlichkeit Kopf zu werfen beliebig nahe annähert.
#Anzahl der Wiederholungen
n <- 50
head_freq <- c()
for(i in 1:n){
head_freq <- c(head_freq, sum(rbinom(n = i, 1, prob = 0.5))/i)
}
plot_ly() %>%
add_lines(x = 1:n, y = head_freq, name = 'rel. Häufigkeiten') %>%
add_lines(x = 1:n, rep(0.5, n), name = 'wahre Wahrscheinlichkeit', line = list(color = 'grey', dash = 'dash')) %>%
layout(xaxis = list(title = 'Anzahl der Münzwürfe'))
1.2 Wahrscheinlichkeitsdichte
Bei stetigen Zufallsvariablen ist die Wahrscheinlichkeitsdichte etwas schwierig zu interpretieren. Grundsätzlich gilt:
Wahrscheinlichkeitsdichte = Wahrscheinlichkeitsmasse/Infinitesimal kleines Zahlenintervall
Etwas anschaulicher ist es vielleicht, sich vorszustellen, dass um den Bereich herum, um den die Dichte \(f(x)\) hoch ist, mehr Realisierungen erwartet werden, als in Bereichen mit kleiner Dichte. In folgendem Beispiel betrachten wir die Dichte einer Standardnormalverteilung und vergleichen die Werte die aus einer Simulation resultieren. Die Werte werden mit relative Häufigkeit in einem Intervall dividiert durch die breite eines Intervalls bestimmt.
#Ziehe normal verteilte Zufallszahlen
x <- rnorm(n = 10000, mean = 3, sd = 2)
plot_ly() %>%
add_histogram(x = x,
histnorm = 'probability density',
xbins = list(start = min(x), end = max(x), size = 0.5),
name = 'Histogramm',
marker = list(color = 'lightgrey')
) %>%
add_lines(x = x, y = dnorm(x, mean(x), sd(x)), name = 'Normalverteilungsdichte', line = list(color = 'olivedrab')) %>%
layout(
title = 'Empirische Verteilung',
xaxis = list(title = TeX('$x$')),
yaxis = list(title = TeX('$ f(x)$'))
)
1.3 Binomialverteilung
Sei \(X_i\) eine Bernoulli verteilte Zufallszahl mit Wahrscheinlichkeit \(\pi\), dann ist die Summe über \(n\) Zufallsvariablen \(X_i\)
\[Y = \sum_{i = 1}^{n} X_i\]
binomial verteilt mit Wahrscheinlichkeitsfunktion
\[f(Y=y) = \binom{n}{y} \pi^y \left( 1-\pi \right)^{n-y}\]
#Binomialverteilung
x <- 0:5
n <- 5
y1 <- dbinom(x, size = n, prob = 0.5)
y2 <- dbinom(x, size = n, prob = 0.2)
y3 <- dbinom(x, size = n, prob = 0.8)
plot_ly(x = x, y = y1, name = TeX('$ \\pi = 0.5 $'), type = 'bar', marker = list(color = 'olivedrab'), opacity = 0.7) %>%
add_trace(y = y2, name = TeX('$ \\pi = 0.2 $'), marker = list(color = 'steelblue')) %>%
add_trace(y = y3, name = TeX('$ \\pi = 0.8 $'), marker = list(color = 'purple')) %>%
layout(
title = TeX('$ Y \\sim B(n = 5, \\pi) $'),
xaxis = list(title = TeX('$x$')),
yaxis = list(title = TeX('$ f(x) $')),
showlegend = TRUE
)
1.4 Poissonverteilung
Eine poisson verteilte Zufallszahl zählt die Anzahl an Treffern in \(n\) aufeinander folgenden Bernoulliversuchen, wenn \(n \to \infty\) und \(\pi \to 0\). Die Poissonverteilung kann somit approximativ für die Binomialverteilung verwendet werden. Die Wahrscheinlichkeitsfunktion lautet
\[ f(x) = \frac{\lambda^x}{x!}e^{-\lambda} \]
mit \(\lambda = n\cdot \pi\).
Beispiele für die Modellierung wären:
- Anzahl an Erdbeben in einem Jahr
- Anzahl an Ausfällen in einem Kreditportfolio
- Terroranschläge in einem festen Zeitraum
x <- 0:6
y1 <- c(dpois(x[-c(7)], lambda = 0.5), 1 - ppois(x[6], lambda = 0.5))
y2 <- c(dpois(x[-c(7)], lambda = 1.5), 1 - ppois(x[6], lambda = 1.5))
y3 <- c(dpois(x[-c(7)], lambda = 2.5), 1 - ppois(x[6], lambda = 2.5))
plot_ly(x = x, y = y1, name = TeX('$ \\lambda = 0.5 $'), type = 'bar', marker = list(color = 'olivedrab'), opacity = 0.7) %>%
add_trace(y = y2, name = TeX('$ \\lambda = 1.5 $'), marker = list(color = 'steelblue')) %>%
add_trace(y = y3, name = TeX('$ \\lambda = 2.5 $'), marker = list(color = 'purple')) %>%
layout(
title = TeX('$ Y \\sim P(\\lambda) $'),
xaxis = list(title = TeX('$x$'),
ticktext = c(TeX('$0$'), TeX('$1$'), TeX('$2$'), TeX('$3$'), TeX('$4$'), TeX('$5$'), TeX('$>5$')),
tickvals = 0:6),
yaxis = list(title = TeX('$ f(x) $')),
showlegend = TRUE
)
1.5 Normalverteilung
Die Normalverteilung ist eine der wichtigsten Verteilungen in der Statistik. In Zusammenhang mit dem zentralen Grenzwertsatz und ihrer Faltungsstabilität bietet sie mathemtisch/statistisch angenehme Eigenschaften. Eine stetige Zufallszahl \(X\) ist normal verteilt mit Erwartungswert \(\mu\) und Varianz \(\sigma^2\) bei gegebener Wahrscheinlichkeitsdichte:
\[ f(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp \left( - \frac{\left( x - \mu \right)^2}{2 \sigma^2} \right) \]
#Normalverteilung
mu <- c(-1, 0, 1)
sigma <- c(0.5, 1, 2)
x <- seq(-7, 7, 0.02)
y <- array( dim = c(3,3,length(x)))
for(i in 1:3){
for(j in 1:3){
y[i, j, ] <- dnorm(x, mean = mu[i], sd = sigma[j])
}
}
p1 <- plot_ly(x = x, y = y[2,2,], type = 'scatter', mode = 'lines', line = list(color = 'rgb(0,0,0)'), name = TeX('$ \\mu = 0,~\\sigma = 1$')) %>%
add_trace(y = y[1,2,], type = 'scatter', mode = 'lines', line = list(color = 'rgb(120,120,120)'), name = TeX('$ \\mu = -1,~\\sigma = 1$')) %>%
add_trace(y = y[3,2,], type = 'scatter', mode = 'lines', line = list(color = 'rgb(180,180,180)'), name = TeX('$ \\mu = 1,~\\sigma = 1$')) %>%
layout(
xaxis = list(title = TeX('$x$')),
yaxis = list(title = TeX('$ f(x) $'), range = c(0,0.9)),
legend = list(x = 0.45, y = 0.9)
) %>%
config(last_plot(), mathjax = 'local')
p2 <- plot_ly(x = x, y = y[2,2,], type = 'scatter', mode = 'lines', line = list(color = 'olivedrab'), name = TeX('$ \\mu = 0,~\\sigma = 1$')) %>%
add_trace(y = y[2,1,], type = 'scatter', mode = 'lines', line = list(color = 'steelblue'), name = TeX('$ \\mu = 0,~\\sigma = 0.5$')) %>%
add_trace(y = y[2,3,], type = 'scatter', mode = 'lines', line = list(color = 'purple'), name = TeX('$ \\mu = 0,~\\sigma = 2$')) %>%
config(last_plot(), mathjax = 'local')
subplot(p1, p2, shareY = TRUE)
1.6 Student t Verteilung
Die Student t Verteilung ist wie die Normalverteilung für stetige Zufallsvariablen geeignet. Zudem ist sie symmetrisch. Im Gegensatz zur Normalverteilung kann die Student t Verteilung sogenannte “Heavy Tails” besser abbilden, da sie extremeren Werten höhere Wahrscheinlichkeitsmassen zuordnet. Dies wird über die Anzahl der Freiheitsgrade \(\nu\) gesteuert. Für \(\nu > 2\) existiert ein endlicher Wert für die Varianz, welche mit
\[ Var(X) = \frac{\nu}{\nu - 2} \]
bestimmt werden kann. Die Wahrscheinlichkeitsdichte ist mit
\[ f(x) = \frac{\Gamma\left( \frac{\nu + 1}{2} \right)}{ \sqrt{\pi \nu} \Gamma \left( \frac{\nu}{2} \right) \left( 1 + \frac{x^2}{\nu} \right)^{\frac{\nu + 1}{2}} } \]
gegeben, wobei \(\Gamma\) die Gammafunktion darstellt. Bei dieser Form ist der Erwartungswert \(E(X) = 0\) und die Standardabweichung \(\sqrt{\frac{\nu}{\nu - 2}}\). Jedoch kann dieses standardisierte Form durch
\[ x = \mu + s \cdot x \]
in eine verallgemeinerte Verteilung mit anderen Erwartungswert und anderer Standardabweichung überführt werden. Mit \(\nu \to \infty\) konvergiert die Wahrscheinlichkeitsdichte der Student t Verteilung gegen die der Normalverteilung.
#Student t Verteilung
x <- seq(-7,7,0.02)
y1 <- dt(x, df = 4)
y2 <- dt(x, df = 2)
y3 <- dt(x, df = 10)
y4 <- dt(x, df = 100)
p <- plot_ly(x = x, y = y1, type = 'scatter', mode = 'lines', line = list(color = 'grey'), name = TeX('$ \\nu = 4 $')) %>%
add_trace(y = y2, type = 'scatter', mode = 'lines', line = list(color = 'olivedrab'), name = TeX('$ \\nu = 2 $')) %>%
add_trace(y = y3, type = 'scatter', mode = 'lines', line = list(color = 'steelblue'), name = TeX('$ \\nu = 10 $')) %>%
add_trace(y = y4, type = 'scatter', mode = 'lines', line = list(color = 'purple'), name = TeX('$ \\nu = 100 $')) %>%
layout(
xaxis = list(title = TeX('$x$')),
yaxis = list(title = TeX('$ f(x) $'))
)
p
1.7 Betaverteilung
Die Betaverteilung ist eine stetige Verteilung mit extrem variabler Form. Ihre Verwendung bietet sich für Zufallsvariablen an, welche Werte auf \((0, 1)\) annehmen. Die Form der Verteilung wird durch zwei Parameter \(a, b > 0\) festgelegt. Die Wahrscheinlichkeitsdichte ist mit
\[ f(x) = \frac{1}{B(a, b)} x^{a - 1}(1 - x)^{b - 1} \]
gegeben, wobei \(B\) die Betafunktion darstellt.
#Beta Verteilung
x <- seq(0.01,0.99,0.005)
y1 <- dbeta(x, 5, 5)
y2 <- dbeta(x, 0.5, 0.5)
y3 <- dbeta(x, 1, 1)
y4 <- dbeta(x, 10, 5)
y5 <- dbeta(x, 5, 10)
y6 <- dbeta(x, 10, 10)
p1 <- plot_ly(x = x, y = y1, type = 'scatter', mode = 'lines', line = list(color = 'grey'), name = TeX('$ a = 5, b = 5 $')) %>%
add_trace(y = y2, type = 'scatter', mode = 'lines', line = list(color = 'olivedrab'), name = TeX('$ a = 0.5, b = 0.5 $')) %>%
add_trace(y = y3, type = 'scatter', mode = 'lines', line = list(color = 'steelblue'), name = TeX('$ a = 1, b = 1 $')) %>%
layout(
title = TeX('$ X \\sim B(a, b) $'),
xaxis = list(title = TeX('$ x $')),
yaxis = list(range = c(0,4), title = TeX('$ f(x) $')),
legend = list(x = 0.45, y = 1)
) %>%
config(last_plot(), mathjax = 'local')
p2 <- plot_ly(x = x, y = y4, type = 'scatter', mode = 'lines', line = list(color = 'purple'), name = TeX('$ a = 10, b = 5 $')) %>%
add_trace(y = y5, type = 'scatter', mode = 'lines', line = list(color = 'darkgoldenrod'), name = TeX('$ a = 5, b = 10 $')) %>%
add_trace(y = y6, type = 'scatter', mode = 'lines', line = list(color = 'darkolivegreen2'), name = TeX('$ a = 10, b = 10 $')) %>%
config(last_plot(), mathjax = 'local')
subplot(p1, p2, shareY = TRUE)
1.8 Kleinste-Quadrate-Schätzung
Bei der KQ-Schätzung wird der unbekannte Parameter durch Minimierung der Summe der quadratischen Abweichungen der realisierten Daten \(\boldsymbol{x} = (x_1, ..., x_n)^{T}\) vom Parameter bestimmt.
\[ \min_{\theta} \sum_{i = 1}^{n} (x_i - \theta)^2 \]
Man kann sich vorstellen, dass man bei gegebenen Daten fiktive Werte für \(\theta\) verwendet und die zugehörige Summe der quadratischen Abweichungen ermittelt. Man verwendet dann den Wert für \(\hat{\theta}_{KQ}\) der zur geringsten Abweichung geführt hat. Insbesondere für den Erwartungswert ist dieses Optimierungsproblem auf relativ einfache Weise analytisch lösbar.
#Ziehe 1000 ZV mit EW = 2 und SD = 1
x <- rnorm(1000, mean = 2, sd = 1)
#Definiere eine Funktion zur Berechnung der Summe der quadratischen Abweichung i. Abh. von geschätzten EW
sum_squared <- function(m = 0, x){ sum((x - m)^2) }
mean_vals <- seq(-1, 5, length.out = 100)
sum_squared_vals <- c()
for(i in 1:length(mean_vals)){
sum_squared_vals <- c(sum_squared_vals, sum_squared(mean_vals[i], x))
}
plot_ly() %>%
add_lines(x = mean_vals, y = sum_squared_vals, line = list(color = 'grey')) %>%
layout(
xaxis = list(title = TeX('$ \\text{Werte für den Erwartungswert: } \\theta$')),
yaxis = list(title = TeX('$ \\sum_{i = 1}^{n} (x_i - \\theta)^2$'))
)
1.9 Maximum-Likelihood Schätzung
Bei der ML-Schätzung wird der unbekannte Parameter durch Maximierung der Log-Likelihoodfunktion bestimmt. Die realisierten Daten \(\boldsymbol{x} = (x_1, ..., x_n)^{T}\) sind zusammen mit der Dichte- bzw. Wahrscheinlichkeitsfunktion \(f(x | \theta)\) gegeben. Der Wert der Log-Likelihoodfunktion hängt somit lediglich von der Wahl von \(\theta\) ab. Setzen wir fiktive Werte für \(\theta\) ein und bestimmen jedes Mal den zugehörigen Wert der Log-Likelihoodfunktion, so ist \(\hat{\theta}_{ML}\) der Wert für den die Log-Likelihoodfunktion am größten ist.
x <- rnorm(1000, mean = 2, sd = 1)
#Definiere eine Funktion zur Berechnung der Summe der quadratischen Abweichung i. Abh. von geschätzten EW
log_lik <- function(m = 0, x){ sum(dnorm(x, m, sd = 1, log = TRUE)) }
mean_vals <- seq(-1, 5, length.out = 100)
log_lik_vals <- c()
for(i in 1:length(mean_vals)){
log_lik_vals <- c(log_lik_vals, log_lik(mean_vals[i], x))
}
plot_ly() %>%
add_lines(x = mean_vals, y = log_lik_vals, line = list(color = 'grey')) %>%
layout(
xaxis = list(title = TeX('$ \\text{Werte für den Erwartungswert: } \\theta$')),
yaxis = list(title = TeX('$ \\ln \\left( L(\\theta) \\right) $'))
)
1.10 Verteilung eines Schätzers - Beispiel Erwartungswert
Annahme \(X_i \sim N(\mu, \sigma^2),~ i = 1, ...., n\), simuliere \(j = 1, ..., k\) Mal \(n\) Zufallszahlen \(\boldsymbol{x}\) und betrachte die Verteilung der Schätzungen. Für jede Stichprobe ermitteln wir den Schätzwert des Erwartungswertes \(\bar{x}\). Diesen Vorgang wiederholen wir \(k\) Mal.
#Stichprobengröße
n <- 100
#Wiederholungen der Stichproben
k <- 5000
means <- c()
for(i in 1:k){
temp_data <- rnorm(n, mean = 2, sd = 1)
means <- c(means, mean(temp_data))
}
plot_ly() %>%
add_histogram(x = means,
histnorm = 'probability density',
xbins = list(start = min(means), end = max(means), size = 0.05),
name = 'simulation',
marker = list(color = 'lightgrey')
) %>%
add_lines(x = seq(min(means), max(means), length.out = 200),
y = dnorm(seq(min(means), max(means), length.out = 200), 2, 1/sqrt(n)), name = 'theoretisch', line = list(color = 'olivedrab')) %>%
layout(
title = 'Verteilung des Schätzers',
xaxis = list(title = TeX('$\\bar{x}$'))
)