wins <- 6
games <- 9
Bayesianische Parameterschätzung
Eine Alternative zu Null Hypothesis Significance Testing (NHST).
Bayesian Inference (In A Nutshell)
“Probability theory is nothing more than common sense reduced to calculation.”
― Pierre Simon Laplace, 1819
In Bayesianischen Statistik geht es unter anderem, aber nicht nur, um die Anwendung von Bayes’ Theorem.
Der wesentlichste Unterschied zwischen der Bayesianischen und der frequentistischen Statistik ist, dass in der Bayesianischen Statistik die Wahrscheinlichkeitstheorie konsequent angewandt wird, um Parameter zu schätzen.
- In der frequentistischen Statistik wird die Wahrscheinkeitslehre vor allem angewandt, um die Wahrscheinlichkeit der Daten zu berechnen, unter der Annahme, dass die Nullhypothese wahr ist.
- In der Bayesianischen Statistik wird die Wahrscheinkeitslehre angewandt, um die Wahrscheinlichkeit der Parameter zu berechnen.
Dieser Unterschied hat weitreichende Konsequenzen. So kann man in der frequentistischen Statistik Parameter schätzen, aber es wird wird angenommen, dass ein Parameter einen wahren (aber unbekannten) Wert hat. Der Parameter ist aber keine Zufallszahl, und hat daher keine Wahrscheinlichkeitsverteilung. Daher darf man nicht über die Wahrscheinlichkeit eines Parameters sprechen. In der Bayesianischen Statistik ist ein Parameter eine Zufallszahl, und hat daher eine Wahrscheinlichkeitsverteilung. Wir benützen Bayes Theorem um die Wahrscheinlichkeit von Parametern zu berechnen.
Im folgenden Kapitel werden uns (in einer sehr verkürzten Form) damit beschäftigen, was die Konsequenzen dieser unterschiedlichen Sichtweisen sind, und wie Bayesianische Statistik funktioniert. Am Anfang müssen wir jedoch eine zentral Frage beantworten: Was ist eigentlich der Unterschied zwischen Parameterschätzung und Modellvergleichen / Hypothesentests?
In der frequentistischen Statistik werden diese beiden Dinge oft gemeinsam behandelt, und es ist nicht auf Anhieb klar, dass es sich um zwei unterschiedliche Dinge handelt. Dies hat vor allem damit zu tun, dass Parameterschätzung einfach ist, weil nur eine sogennante Punkschätzung erfolgt, und weil es oft um die Anwendung eines Hypothesentests geht.
In der Bayesianischen Statistik ist Parameterschätzung nicht einfach, da eine ganze Wahrscheinlichkeitsverteilung geschätzt wird. Es lohnt sich, dass wir uns klarmachen, was genau Parameterschätzung ist. Wir werden zuerst anhand eines t-Tests anschauen, wie Parameterschätzung und Hypothesentests im frequentistischen Gebrauch kombiniert werden und danach anhand eines einfachen Wahrscheinlichkeitsbeispiel die Parameterschätzung illustrieren.
Parameter schätzen vs Hypothesen testen anhand eines t-Tests
Mit einem t-Test wollen wir einen Mittelwertsunterschied testen. Dies bedeutet, wir wollen wissen, ob sich zwei Mittelwerte voneinander unterscheiden (wir beschränken uns hier auf zwei unabhängige Gruppen). Diese Frage bezieht sich auf einen Modellvergleich: Wir vergleichen ein Modell, in dem die Mittelwerte gleich sind, mit einem Modell, in dem die Mittelwerte unterschiedlich sind.
Bevor wir diesen Vergleich machen können, müssen wir jedoch die Mittelwerte schätzen. Dies ist eine Parameterschätzung. Im frequentistischen Ansatz benutzen wir den Stichprobenmittelwert als Schätzer für den Mittelwert, der in der Population, aus der diese Stichprobe gezogen wurde, gilt.
Bayesianische Parameterschätzung
Wir werden nun einen anderen Ansatz kennenlernen: die Bayesianische Statistik. Dieser Ansatz ist nicht neu, hat aber erst in den letzten Jahren Verbreitung gefunden. Dies hat unter anderem damit zu tun, dass die Berechnungen, die für die Bayesianische Statistik nötig sind, erst mit der Verfügbarkeit von schnellen Computern möglich wurden.
Wir werden nun anhand eines simplen Beispiels zuerst die Bayesianische Parameterschätzung kennenlernen. Ich verwende als Cover Story ein Kartenspiel, da dies ein einfaches Lehrbuchbeispiel ist. Die Cover Story selber ist jedoch nicht wichtig - es geht hier darum, dass unsere beobachteten Daten binär sind.
Zwei Spieler spielen ein Kartenspiel. Sie beobachten, dass sie 9 Spiele spielen und dass Spieler A 6 davon gewinnt. Jetzt möchten Sie die Wahrscheinlichkeit schätzen, dass Spieler A das nächste Spiel gewinnen wird. Anders ausgedrückt, möchten Sie die Fähigkeit von Spieler A einschätzen, Spieler B in diesem speziellen Spiel zu besiegen.
Sie wissen, dass die Erfolgswahrscheinlichkeit im Bereich \([0, 1]\) liegen muss. Was Ihnen vielleicht nicht bewusst ist, ist, dass Sie ein bestimmtes Wahrscheinlichkeitsmodell annehmen und die Erfolgswahrscheinlichkeit ein Parameter dieses Modells ist. Lassen Sie uns das genauer betrachten:
Wir wissen, dass die Anzahl der \(k\) Erfolge in \(n\) Spielen einer Binomialverteilung mit den Parametern \(n\) und \(\theta\) folgt. Wir nehmen an, dass jedes einzelne Spiel unabhängig von den anderen ist und die Erfolgswahrscheinlichkeit \(\theta\) für jedes Spiel gleich ist. Daher können wir auch jedes Kartenspiel als Bernoulli-Experiment mit dem Wahrscheinlichkeitsparameter \(\theta\) betrachten.
\[ y_i \sim \mathcal{Bernoulli}(\theta) \]
Ich werde im Allgemeinen die Notation \(y\) fĂĽr eine Variable verwenden, die beobachtet wird, d.h. die Daten.
\(y_i\) ist die \(i\)-te Beobachtung in den Daten, was bedeutet, dass es uns sagt, ob Spieler A das Spiel im \(i\)-ten Versuch gewonnen hat oder nicht. \(\theta\) ist die Erfolgswahrscheinlichkeit fĂĽr jedes einzelne Spiel; dies ist ein Parameter unseres Modells (\(\mathcal{M}\)).
Wenn wir frequentistisch vorgehen, müssen wir nun den Wert von \(\theta\) so schätzen, dass die Wahrscheinlichkeit, die Daten zu beobachten, maximiert wird.
Wir können dies auch mit in R numerisch, d.h. mit der “brute force” Methode, berechnen:
Das Ziel ist es, den “besten” Wert von \(\theta\) zu ermitteln, d.h. den Wert, der die Wahrscheinlichkeit maximiert, die Daten zu beobachten. Um dies zu tun, müssen wir eine Reihe von möglichen Werten von \(\theta\) in Betracht ziehen (wir wissen bereits, dass dieser Bereich \([0, 1]\) ist). Wir werden 101 Werte von \(\theta\) zwischen 0 und 1 betrachten und die Wahrscheinlichkeit berechnen, die Daten für jeden Wert von \(\theta\) zu beobachten.
n_points <- 101
theta_grid <- seq( from=0 , to=1 , length.out = n_points )
Unter der Annahme, dass beide Spieler eine gleiche Gewinnchance haben, sollte der Parameter \(\theta = 0.5\) sein. Die Wahrscheinlichkeit der Daten gegeben \(\theta = 0.5\) ist:
dbinom(x = wins, size = games, prob = 0.5)
[1] 0.1640625
Die Wahrscheinlichkeit, 6 von 9 Spielen zu gewinnen, unter der Annahme, dass beide Spieler gleich wahrscheinlich gewinnen, ist 0.1640625.
Wir können auch die Wahrscheinlichkeit berechnen, dass A 6, 7, 8 oder 9 Spiele gewinnt, indem wir die kumulative Verteilungsfunktion der Binomialverteilung verwenden.
1 - pbinom(q = 5, size = games, prob = 0.5)
[1] 0.2539063
oder
pbinom(q = 5, size = games, prob = 0.5, lower.tail = FALSE)
[1] 0.2539063
Nun berechnen wir die Wahrscheinlichkeit der Daten unter Berücksichtigung aller möglichen Parameterwerte. Dies ist der entscheidende Schritt in Richtung Bayesianische Inferenz 🚀.
In R ist dies sehr einfach, da alle Funktionen vektorisiert sind.
likelihood <- dbinom(wins , size = games , prob = theta_grid)
Wir haben gerade die Wahrscheinlichkeit der Daten (genauer gesagt: A gewinnt 6 Mal in 9 Spielen) für jeden Wert von \(\theta\) berechnet (genauer: für 101 Werte von \(\theta\) zwischen 0 und 1). Wir können dies grafisch darstellen.
plot(theta_grid, likelihood, xlab = expression(theta), ylab = "likelihood")
lines(theta_grid, likelihood, type = "l", lty = 1)
Wir können in der obigen Abbildung sehen, dass die Wahrscheinlichkeit, die Daten zu beobachten, für viele Werte von \(\theta\) klein ist. Die Wahrscheinlichkeit, die Daten zu beobachten, oder die Likelihood, ist maximal für den Wert 0.6666667:
Diesen finden wir auch numerisch:
theta_grid[which.max(likelihood)]
[1] 0.67
Was wir bisher gemacht haben, unterstreicht den Unterschied zwischen Parameterschätzung und Hypothesentest. Die Berechnung der Unter- und Überschreitungswahrscheinlichkeit unter der Nullhypothese (\(\theta=0.5\)) ist ein Hypothesentest, und die Schätzung von \(\theta\) ist die Parameterschätzung.
Vorwissen
Bisher haben wir keine vorherigen Kenntnisse berücksichtigt, die wir möglicherweise über die wahrscheinlichsten Parameter a priori gehabt hätten. Tatsächlich haben wir, wie wir etwas weiter unten sehen werden, implizit angenommen, dass alle Parameter gleich wahrscheinlich sind. Jetzt führen wir ein neues Konzept ein: eine a-priori-Verteilung für die Parameter, die wir versuchen zu schätzen1.
Wir werden dann diesen a-priori-Glauben verwenden, um einen a-posteriori-Glauben über die möglichen Parameterwerte zu erlangen. Um dies zu tun, müssen wir die a-priori-Wahrscheinlichkeit jedes Parameterwerts mit der Likelihood der Daten, d.h. mit der bedingten Wahrscheinlichkeit, die Daten zu beobachten, gegeben diesen Parameterwert, multiplizieren. Dies ist eine Anwendung des Bayes’schen Theorems:
\[ p(\theta|y) = \frac{ p(y|\theta) * p(\theta) } {p(y)} \]
Dies besagt, dass die a-posteriori-Wahrscheinlichkeit von \(\theta\) gegeben den beobachteten Daten \(y\) gleich ist der Wahrscheinlichkeit der Daten, multipliziert mit der a-priori-Wahrscheinlichkeit jedes Werts von \(\theta\). Sie können es sich so vorstellen: Jeder Parameterwert wird gewichtet, je nachdem, wie gut er die Daten vorhersagt. Das Produkt \(p(y|\theta) * p(\theta)\) wird dann durch die Wahrscheinlichkeit der Daten geteilt, die in diesem Fall über alle möglichen Parameterwerte summiert wird. Dieser Schritt dient dazu, die a-posteriori-Wahrscheinlichkeit zu normalisieren, so dass sie sich zu \(1\) aufaddiert. Dies verwandelt die unnormalisierte a-posteriori-Wahrscheinlichkeit im Grunde in eine richtige Wahrscheinlichkeitsverteilung.
\[ p(y) = \sum_{\theta}p(y|\theta) * p(\theta) \]
Wenn wir daran interessiert sind, die Parameter eines gegebenen Modells zu schätzen, können wir oft den (für ein Modell konstanten) normalisierenden Term \(p(y)\) vernachlässigen. Dieser Term, oft als Evidenz bezeichnet, spiegelt die Wahrscheinlichkeit der Daten wider, gemittelt über alle Parameterwerte. Ohne den normalisierenden Konstanten geschrieben, wird die Bayes-Regel oft so geschrieben:
\[ p(\theta|y) \propto p(y|\theta) * p(\theta) \]
Bayesianische Inferenz mit binären Daten: Ein numerisches Beispiel
Erinnern Sie sich daran, dass wir eine Sequenz von 101 Punkten zwischen 0 und 1 definiert haben, die die möglichen \(\theta\)-Werte darstellten.
n_points <- 101
theta_grid <- seq( from=0 , to=1 , length.out = n_points )
Für jeden von diesen haben wir die Likelihood berechnet, das heisst die Wahrscheinlichkeit, die (festgelegten) Daten zu beobachten, gegeben den Parametern. Jetzt können wir unser Wissen über die Wahrscheinlichkeit jedes Parameterwerts explizit machen. Zunächst nehmen wir an, dass alle Parameter gleich wahrscheinlich sind. Wir weisen jedem Parameterwert die Wahrscheinlichkeit 1 zu. Dies ist unsere a-priori-Verteilung.
plot(theta_grid, prior_1, "type" = "l")
Wir könnten auch die Überzeugung ausdrücken, dass Spieler A mindestens so gut ist wie Spieler B, d.h. sie sind gleich gut oder A ist besser als B. Eine Möglichkeit, dies zu tun, besteht darin, Parameterwerten, die grösser oder gleich \(0.5\) sind, eine Wahrscheinlichkeit von \(2\)2 zuzuweisen und den Wert \(0\) für Parameterwerte kleiner als \(0.5\).
prior_2 <- ifelse(theta_grid < 0.5, 0, 2)
plot(theta_grid, prior_2, type = "l")
Eine systematischere Methode besteht darin, eine parametrisierte Wahrscheinlichkeitsverteilung zu verwenden, die unsere Ăśberzeugungen ĂĽber den Parameter ausdrĂĽckt.
Wenn wir eine Beta-Verteilung verwenden wollen, um die Überzeugung auszudrücken, dass alle Werte von \(\theta\) gleich wahrscheinlich sind (uniforme a-priori-Verteilung), können wir eine Beta-Verteilung mit \(\alpha = 1\) und \(\beta = 1\) verwenden.
prior_3 <- dbeta(x = theta_grid, shape1 = 1, shape2 = 1)
plot(theta_grid, prior_3, type = "l")
Schliesslich könnten wir folgendes Vorwissen als Beta-Verteilung ausdrücken: Stellen Sie sich vor, Sie hätten zuvor 100 Spiele zwischen A und B beobachtet, und jeder hat die Hälfte der Spiele gewonnen. Sie können nun \(\alpha\) der Anzahl der von A gewonnenen Spiele und \(\beta\) der Anzahl der von B gewonnenen Spiele gleichsetzen. A hat 50 Spiele gewonnen und B hat 50 Spiele gewonnen:
prior <- dbeta(x = theta_grid, shape1 = 50, shape2 = 50)
plot(theta_grid, prior, type = "l")
Nun können wir unser Vorwissen und die Wahrscheinlichkeit durch elementweises Multiplizieren kombinieren. Dies bedeutet wir müssen jeden Parameterwert mit der Wahrscheinlichkeit der Daten (gegeben diesen Parameter) multiplizieren.
In R ist dies einfach:
wins <- 6
games <- 9
unstandardized_posterior <- likelihood * prior
Dies gibt uns die unnormalisierte Posterior-Verteilung.
\[ p(\theta|y) \propto p(y|\theta) * p(\theta) \]
Wir können diese normalisieren, indem wir sie durch die Summe der Werte teilen. Dies ist der Nenner von Bayes Theorem: \(p(y) = \sum_{\theta}p(y|\theta) * p(\theta)\).
In R können wir die sum()
Funktion verwenden: sum(unstandardized_posterior)
.
posterior <- unstandardized_posterior / sum(unstandardized_posterior)
Die normalisierte Posterior-Verteilung sieht folgendermassen aus.
plot(theta_grid, posterior, type = "l", yaxt = 'n', ylab = 'Probability',
main = "Posterior", cex.lab = 1.5, cex.main = 3)
Um dies wiederholbar zu machen, werden wir zwei Funktionen schreiben. Die erste, compute_posterior()
, berechnet die Posterior-Verteilung, und gibt ein Dataframe zurück, welches Prior, Likelihood und Posterior enthält. Die zweite, plot_posterior()
, plottet alle drei nebeneinander. Sie können auch die Maximum-Likelihood-Schätzung übergeben, z.B. 6/9, und diese wird ebenfalls geplottet.
compute_posterior = function(likelihood, prior){
# compute product of likelihood and prior
unstandardized_posterior <- likelihood * prior
# standardize the posterior, so it sums to 1
posterior <- unstandardized_posterior / sum(unstandardized_posterior)
out <- tibble(prior, likelihood, posterior)
out
}
plot_posterior <- function(df, mle = 6/9){
with(df, {
par(mfrow=c(1, 3))
plot(theta_grid , prior, type="l", main="Prior", col = "dodgerblue3",
lwd = 4, yaxt = 'n', ylab = 'Probability', cex.lab = 1.5, cex.main = 3)
plot(theta_grid , likelihood, type = "l", main = "Likelihood", col = "firebrick3",
lwd = 4, yaxt = 'n', ylab = '', cex.lab = 1.5, cex.main = 3)
plot(theta_grid , posterior , type = "l", main = "Posterior", col = "darkorchid3",
lwd = 4, yaxt = 'n', ylab = '', cex.lab = 1.5, cex.main = 3)
abline(v = mle, col = 4, lty = 2, lwd = 2)
} )
}
Jetzt können Sie verschiedene a-priori-Verteilungen ausprobieren und die Auswirkungen auf die a-posteriori-Verteilung beobachten.
Wir probieren zuerst eine uniforme a-priori-Verteilung aus:
df <- compute_posterior(likelihood, prior)
plot_posterior(df)
Jetzt probieren wir die a-priori-Verteilung aus, die die Ăśberzeugung ausdrĂĽckt, dass Spieler A nicht schlechter sein kann als Spieler B:
df <- compute_posterior(likelihood, prior)
plot_posterior(df)
Die resultierende a-posteriori-Verteilung ist fĂĽr alle Werte von \(\theta\), die kleiner als 0.5 sind, gleich Null. Dies liegt daran, dass unsere a-priori-Verteilung diesen Werten eine Wahrscheinlichkeit von Null zuweist.
Die a-posteriori-Verteilung repräsentiert unseren Glauben an die möglichen Parameterwerte, nachdem wir die Daten beobachtet haben. Man kann daher den bayesianische Inferenzprozess als eine Methode betrachten, um die Überzeugungen unter Berücksichtigung der beobachteten Daten zu aktualisieren. Dabei werden die Wahrscheinlichkeiten über die Parameterwerte neu verteilt, abhängig davon, wie gut diese Parameterwerte die Daten vorhersagten.
Posterior-Verteilung Zusammenfassen
Wir müssen jetzt noch einen letzten Schritt machen: Wir müssen die a-posteriori-Verteilung zusammenfassen. Dies können wir zum Beispiel tun, indem wir den Mittelwert und die Standardabweichung der a-posteriori-Verteilung berechnen.
Um zu zeigen, wie das funktioniert, können wir tausend Stichproben aus der a-posteriori-Verteilung ziehen. Zuerst werden wir eine a-posteriori-Verteilung erstellen.
df <- compute_posterior(likelihood, prior)
plot_posterior(df)
Nun ziehen wir 1000 Zufallszahlen aus der a-posteriori-Verteilung.
n_samples <- 1e3
samples <- theta_grid |> sample(size = n_samples, replace = TRUE, prob = df$posterior)
head(samples, 10)
[1] 0.67 0.66 0.80 0.53 0.48 0.75 0.72 0.56 0.85 0.91
Jetzt können wir die Zufallszahlen zusammenfassen, zum Beispiel durch Berechnung des Mittelwerts oder der Quantile.
mean(samples)
[1] 0.63937
Mit dem folgenden Code erhalten wir den Median und ein 50% credible interval, das heisst ein Intervall, das 50% der Verteilungsmasse enthält.
Wir können diesen Ansatz auch verwenden, um ein 95% credible interval zu berechnen.
Was wir bisher gemacht haben, ist, die bayessche Inferenz für die Parameterschätzung in einem sehr einfachen Modell zu betrachten. Nennen wir dieses Modell \(\mathcal{M}\). Wir haben immer nur ein Modell betrachtet, aber im nächsten teil werden wir zwei oder mehrere Modelle \(\mathcal{M_j}\) betrachten, die sich in den a-priori-Verteilungen unterscheiden. Dann werden wir Methoden zur Modellvergleich untersuchen, um Hypothesentests in einem bayesianischen Framework durchzuführen.
Insbesondere werden wir uns ansehen, wie der bayesianischen Modellvergleich helfen kann, wenn wir keine signifikanten Ergebnisse haben.
Footnotes
In der frequentistischen Statistik ist das Konzept bedeutungslos - Parameter können keine Verteilung haben. In der Bayesschen Statistik sollte eine a-priori-Verteilung alles widerspiegeln, was wir über den Parameter wissen, bevor wir die Daten berücksichtigen. Die a-priori-Verteilung spiegelt unseren Glauben wider, der subjektiv oder objektiv sein kann.↩︎
2 damit die Fläche zwischen 0 und 1 sich zu 1 addiert.↩︎
Reuse
Citation
@online{ellis2022,
author = {Andrew Ellis},
title = {Bayesianische {Parameterschätzung}},
date = {2022-05-08},
url = {https://kogpsy.github.io/neuroscicomplabFS23//bayesian-statistics-2.html},
langid = {en}
}