Einführung in das Bayes-Denken
Verstehen Sie Prior, Likelihood und Posterior im Bayes’schen Rahmen
Einführung in das Bayes-Denken ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Frequentistisch vs. Bayessch
In der frequentistischen Statistik ist Wahrscheinlichkeit die langfristige Häufigkeit eines Ereignisses. In der bayesschen Statistik stellt Wahrscheinlichkeit einen Grad der Überzeugung dar. Der wesentliche Unterschied: Frequentisten behandeln Parameter als feste (unbekannte) Konstanten; Bayessianer behandeln Parameter als Zufallsvariablen mit Wahrscheinlichkeitsverteilungen.
# Frequentist: parameter theta is fixed, data is random
# Bayesian: data is fixed (observed), theta has a distribution
# Example: estimating coin bias p
# Frequentist: MLE -> p_hat = heads / total
heads <- 7; total <- 10
p_mle <- heads / total
cat('MLE estimate:', p_mle, '\n')
# Bayesian: update prior belief with observed data
# Prior: Beta(2, 2) -> slightly informative, centered at 0.5
# Posterior: Beta(2 + heads, 2 + (total - heads)) = Beta(9, 5)
alpha_post <- 2 + heads
beta_post <- 2 + (total - heads)
p_bayes <- alpha_post / (alpha_post + beta_post) # posterior mean
cat('Bayesian posterior mean:', round(p_bayes, 3), '\n')Satz von Bayes
Der Satz von Bayes stellt die a-priori-Annahme über einen Parameter, die Likelihood der Daten unter diesem Parameter und die a-posteriori-Annahme nach Beobachtung der Daten in Beziehung:
P(θ|data) = P(data|θ) × P(θ) / P(data)
Der Nenner P(data) ist eine Normierungskonstante – er sorgt dafür, dass die Posteriorverteilung eine gültige Wahrscheinlichkeitsverteilung ist.
# Bayes' theorem components
# P(theta | data) = posterior (what we want)
# P(data | theta) = likelihood (how well theta explains data)
# P(theta) = prior (what we believed before data)
# P(data) = evidence (normalising constant)
# Medical test example
P_disease <- 0.01 # prior: 1% prevalence
P_pos_given_disease <- 0.99 # sensitivity
P_pos_given_no_disease <- 0.05 # false positive rate
P_pos <- P_pos_given_disease * P_disease +
P_pos_given_no_disease * (1 - P_disease)
P_disease_given_pos <- (P_pos_given_disease * P_disease) / P_pos
cat('P(positive test):', round(P_pos, 4), '\n')
cat('P(disease | positive test):', round(P_disease_given_pos, 4), '\n')
cat('Only', round(P_disease_given_pos * 100, 1), '% chance despite positive test!\n')A-priori-Verteilungen
Die A-priori-Verteilung beschreibt Ihre Annahme über einen Parameter, bevor Sie die Daten sehen. Priors können uninformativ sein (flach und mit minimalem Vorwissen) oder informativ (stark konzentriert und mit domänenspezifischem Wissen). Häufige Priors: Beta(1,1) = uniform, Normal(0, 10) = schwach informativ.
# Visualise different Beta priors for a probability parameter
theta <- seq(0, 1, length.out = 200)
# Uniform (no prior knowledge)
prior_uniform <- dbeta(theta, 1, 1)
# Informative: believe p ~ 0.3
prior_informative <- dbeta(theta, 3, 7)
# Strong: believe p ~ 0.5
prior_strong <- dbeta(theta, 20, 20)
plot(theta, prior_uniform, type = 'l', col = 'gray',
ylim = c(0, 8), xlab = 'theta', ylab = 'Density',
main = 'Different Prior Beliefs')
lines(theta, prior_informative, col = 'blue')
lines(theta, prior_strong, col = 'red')
legend('topright', c('Uniform Beta(1,1)', 'Informative Beta(3,7)', 'Strong Beta(20,20)'),
col = c('gray', 'blue', 'red'), lty = 1)Likelihood-Funktionen
Die Likelihood P(data|θ) misst, wie wahrscheinlich die beobachteten Daten für einen bestimmten Parameterwert sind. Bei Münzwürfen ist die Likelihood binomial. Für kontinuierliche Daten ist sie häufig gaußverteilt. Wir werten die Likelihood für viele θ-Werte aus, um den Wert zu finden, der die Daten am besten erklärt.
# Likelihood for a coin flip experiment
# Data: 7 heads in 10 flips
heads <- 7; n <- 10
# Evaluate likelihood at many theta values
theta <- seq(0.01, 0.99, length.out = 200)
likelihood <- dbinom(heads, n, theta)
# Maximum likelihood
mle <- theta[which.max(likelihood)]
cat('MLE (max likelihood theta):', mle, '\n')
# Plot the likelihood function
plot(theta, likelihood, type = 'l', col = 'steelblue',
xlab = 'theta (coin bias)', ylab = 'Likelihood P(7H|theta)',
main = '7 Heads in 10 Flips: Likelihood')
abline(v = mle, lty = 2, col = 'red')
legend('topleft', paste('MLE =', mle), lty = 2, col = 'red')Posterior = Prior × Likelihood
Der Posterior ist proportional zum Produkt aus Prior und Likelihood. Für das Beta-Binomial-Modell ist dies analytisch lösbar: Wenn der Prior Beta(α, β) lautet und Sie bei n Würfen h Köpfe beobachten, lautet der Posterior Beta(α + h, β + n − h).
# Beta-Binomial conjugate model
heads <- 7; n <- 10
alpha_prior <- 2; beta_prior <- 2 # prior: Beta(2,2)
# Update: posterior = Beta(alpha + heads, beta + tails)
alpha_post <- alpha_prior + heads
beta_post <- beta_prior + (n - heads)
theta <- seq(0.01, 0.99, length.out = 300)
prior <- dbeta(theta, alpha_prior, beta_prior)
likelihood <- dbinom(heads, n, theta)
likelihood <- likelihood / max(likelihood) # normalise for plotting
posterior <- dbeta(theta, alpha_post, beta_post)
plot(theta, posterior, type = 'l', col = 'red', lwd = 2,
xlab = 'theta', ylab = 'Density', main = 'Prior vs Posterior')
lines(theta, prior, col = 'blue', lwd = 2)
lines(theta, likelihood, col = 'gray', lwd = 2, lty = 2)
legend('topleft', c(paste0('Prior Beta(', alpha_prior, ',', beta_prior, ')'),
'Likelihood (scaled)',
paste0('Posterior Beta(', alpha_post, ',', beta_post, ')')),
col = c('blue', 'gray', 'red'), lty = c(1,2,1), lwd = 2)Konjugierte Priors
Ein konjugierter Prior ist ein Prior, bei dem der Posterior derselben Verteilungsfamilie angehört wie der Prior. Dadurch wird die Inferenz analytisch lösbar. Häufige konjugierte Paare sind: Beta-Binomial (Anteile), Normal-Normal (Mittelwerte bei bekannter Varianz), Gamma-Poisson (Raten).
# Conjugate prior table (analytical results)
conjugates <- data.frame(
Likelihood = c('Binomial', 'Poisson', 'Normal (known sigma)',
'Exponential', 'Multinomial'),
Prior = c('Beta', 'Gamma', 'Normal',
'Gamma', 'Dirichlet'),
Posterior = c('Beta', 'Gamma', 'Normal',
'Gamma', 'Dirichlet'),
Update_Rule = c('(a+h, b+t)', '(a+x, b+n)', '(mu_n, sigma_n)',
'(a+n, b+sum)', '(a+counts)')
)
print(conjugates, row.names = FALSE)
# Beta-Binomial update
cat('\nBeta(2,3) + 7 heads, 3 tails -> Beta(',
2+7, ',', 3+3, ')\n')Glaubwürdigkeitsintervalle
Ein Glaubwürdigkeitsintervall (CI) ist das bayessche Gegenstück zu einem Konfidenzintervall: Ein 95-%-CI bedeutet, dass mit einer posterioren Wahrscheinlichkeit von 95 % θ innerhalb des Intervalls liegt. Dies ist die intuitive Interpretation, die die meisten Menschen frequentistischen Konfidenzintervallen fälschlicherweise zuschreiben.
# 95% credible interval for Beta posterior
alpha_post <- 9; beta_post <- 5 # posterior from earlier
# Credible interval via quantile function
ci_lower <- qbeta(0.025, alpha_post, beta_post)
ci_upper <- qbeta(0.975, alpha_post, beta_post)
posterior_mean <- alpha_post / (alpha_post + beta_post)
cat('Posterior mean: ', round(posterior_mean, 3), '\n')
cat('95% Credible Interval: [',
round(ci_lower, 3), ',',
round(ci_upper, 3), ']\n')
cat('Interpretation: 95% probability theta is in this interval\n')
# Visualise
theta <- seq(0, 1, length.out = 300)
plot(theta, dbeta(theta, alpha_post, beta_post), type = 'l', col = 'red', lwd = 2,
main = '95% Credible Interval', xlab = 'theta', ylab = 'Density')
abline(v = c(ci_lower, ci_upper), lty = 2, col = 'blue')Bayessche Aktualisierung: Sequentielles Lernen
Die bayessche Aktualisierung erfolgt sequenziell: Der heutige Posterior wird zum Prior des nächsten Tages. Dadurch ist die bayessche Inferenz ganz natürlich inkrementell – bei neuen Daten müssen Sie nicht alles von Grund auf neu anpassen, sondern aktualisieren lediglich den bestehenden Posterior.
# Sequential Bayesian updating for a coin
# Start with uninformative prior Beta(1,1)
flips <- c(1, 0, 1, 1, 0, 1, 1, 1, 0, 1) # 1=H, 0=T
alpha <- 1; beta_p <- 1 # prior
cat('Prior: Beta(', alpha, ',', beta_p, ') mean =', round(alpha/(alpha+beta_p), 3), '\n')
for (i in seq_along(flips)) {
if (flips[i] == 1) alpha <- alpha + 1 else beta_p <- beta_p + 1
mean_post <- alpha / (alpha + beta_p)
cat('After flip', i, '(', flips[i], '): Beta(',
alpha, ',', beta_p, ') mean =', round(mean_post, 3), '\n')
}MAP-Schätzung
Die Maximum-A-posteriori- (MAP-)Schätzung ist der Modus der Posteriorverteilung. Für einen Beta(α, β)-Posterior gilt MAP = (α−1)/(α+β−2). MAP gleicht den Einfluss des Priors mit dem Einfluss der Likelihood aus und zieht Schätzungen bei kleinen Stichproben in Richtung des Priors.
# Compare MLE vs MAP for small sample
heads <- 3; n <- 5
alpha_p <- 5; beta_p <- 5 # informative prior: believe p ~ 0.5
# MLE: ignores prior
mle <- heads / n
# MAP: mode of Beta posterior
alpha_post <- alpha_p + heads
beta_post <- beta_p + (n - heads)
map <- (alpha_post - 1) / (alpha_post + beta_post - 2)
# Posterior mean (alternative point estimate)
post_mean <- alpha_post / (alpha_post + beta_post)
cat('Data: 3 heads in 5 flips\n')
cat('MLE: ', round(mle, 3), '(ignores prior)\n')
cat('MAP: ', round(map, 3), '(mode of posterior)\n')
cat('Posterior mean:', round(post_mean, 3), '(mean of posterior)\n')
cat('Note: MAP and mean shrink toward prior (0.5) for small n\n')Wann Sie bayessche Verfahren verwenden sollten
Bayessche Verfahren sind besonders geeignet, wenn: (1) Sie über informatives Vorwissen verfügen, (2) die Stichproben klein sind, (3) Sie eine vollständige Quantifizierung der Unsicherheit benötigen, (4) Sie Wahrscheinlichkeitsaussagen über Parameter machen möchten oder (5) Sie eine sequentielle Analyse durchführen, bei der Priors aus früheren Experimenten übernommen werden.
# Comparison: when Bayesian vs frequentist is preferred
comparison <- data.frame(
Scenario = c(
'Small sample (n < 30)',
'Prior domain knowledge',
'Probability about parameter',
'Sequential updating',
'Large sample, no prior',
'Regulatory/simple inference'
),
Preferred = c(
'Bayesian', 'Bayesian', 'Bayesian',
'Bayesian', 'Either', 'Frequentist'
)
)
print(comparison, row.names = FALSE)
# Example: medical device testing with historical data
alpha_historical <- 15 # prior based on 20 historical tests
beta_historical <- 5
cat('\nHistorical prior: Beta(', alpha_historical, ',', beta_historical, ')\n')
cat('Prior mean:', round(alpha_historical/(alpha_historical+beta_historical), 3), '\n')Bayessche Inferenz in der Praxis
Bei einfachen konjugierten Modellen ist die Inferenz analytisch lösbar (wie oben gezeigt). Bei komplexen Modellen (hierarchisch, nicht konjugiert) verwenden wir Markov-Chain-Monte-Carlo- (MCMC-)Sampling über Stan (RStan), JAGS oder BUGS, um den Posterior numerisch anzunähern.
# Analytical vs MCMC approaches
approaches <- data.frame(
Method = c('Conjugate (exact)', 'Grid approximation',
'Laplace approx.', 'MCMC (Stan/JAGS)',
'Variational Bayes'),
When = c('Conjugate prior+likelihood', 'Low-dim, discrete',
'Unimodal posterior', 'General complex models',
'Large scale, approximate'),
Speed = c('Instant', 'Fast', 'Fast', 'Slow', 'Moderate'),
Exactness = c('Exact', 'Exact on grid', 'Approximate',
'Asymptotically exact', 'Approximate')
)
print(approaches, row.names = FALSE)Kurzer Check
Sie beobachten 7-mal Kopf bei 10 Münzwürfen. Ihr Prior ist Beta(2, 2). Wie lautet die korrekte Posteriorverteilung?
Zusammenfassung: Bayessches Denken
Wichtigste Erkenntnisse:
- Satz von Bayes: P(θ|data) ∝ P(data|θ) × P(θ)
- Der Prior beschreibt die Annahme vor den Daten, die Likelihood die Unterstützung durch die Daten und der Posterior kombiniert beides
- Konjugierte Priors ergeben analytische Posteriorverteilungen (Beta-Binomial, Normal-Normal, Gamma-Poisson)
- Beta-Binomial-Aktualisierung: Beta(α, β) + (h Köpfe, t Zahl) → Beta(α+h, β+t)
- Glaubwürdigkeitsintervalle besitzen eine natürliche Wahrscheinlichkeitsinterpretation, die Konfidenzintervalle nicht haben
- Die bayessche Aktualisierung erfolgt sequenziell – der heutige Posterior ist der Prior von morgen
- Verwenden Sie bei komplexen Modellen MCMC-Sampling (Stan, JAGS), um Posteriorverteilungen anzunähern
# Full Bayesian inference cycle for a proportion
alpha0 <- 2; beta0 <- 2 # prior
heads <- 12; total <- 20 # observed data
alpha_post <- alpha0 + heads
beta_post <- beta0 + (total - heads)
post_mean <- alpha_post / (alpha_post + beta_post)
ci <- qbeta(c(0.025, 0.975), alpha_post, beta_post)
cat('Prior: Beta(', alpha0, ',', beta0, ') mean =', round(alpha0/(alpha0+beta0), 2), '\n')
cat('Data:', heads, 'heads in', total, 'flips\n')
cat('Posterior: Beta(', alpha_post, ',', beta_post, ')\n')
cat('Posterior mean:', round(post_mean, 3), '\n')
cat('95% CI: [', round(ci[1],3), ',', round(ci[2],3), ']\n')Häufig gestellte Fragen
Ist die Lektion „Einführung in das Bayes-Denken“ kostenlos?
Ja — der vollständige Text von „Einführung in das Bayes-Denken“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Einführung in das Bayes-Denken“?
Verstehen Sie Prior, Likelihood und Posterior im Bayes’schen Rahmen Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Einführung in das Bayes-Denken“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Einführung in das Bayes-Denken
- Stan-Modelle in R schreiben
- MCMC-Stichproben und Diagnostik
- Posterior-predictive Checks