Introduktion till bayesianskt tänkande
Förstå prior, likelihood och posterior inom det bayesianska ramverket.
Introduktion till bayesianskt tänkande är en gratis lektion i R Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.
Frekventistisk kontra bayesiansk statistik
I frekventistisk statistik är sannolikhet den långsiktiga frekvensen för en händelse. I bayesiansk statistik representerar sannolikhet en grad av övertygelse. Den viktiga skillnaden är att frekventister behandlar parametrar som fasta (okända konstanter), medan bayesianer behandlar parametrar som stokastiska variabler med sannolikhetsfördelningar.
# 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')Bayes sats
Bayes sats kopplar samman den tidigare tron på en parameter, sannolikheten för data givet parametern och den uppdaterade tron efter att data har observerats:
P(θ|data) = P(data|θ) × P(θ) / P(data)
Nämnaren P(data) är en normaliseringskonstant – den gör den posteriora fördelningen till en giltig sannolikhetsfördelning.
# 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')Priorfördelningar
Priorfördelningen uttrycker din uppfattning om en parameter innan du har sett data. Priorfördelningar kan vara uninformativa (platta och uttrycker minimal kunskap) eller informativa (kraftigt koncentrerade och uttrycker domänkunskap). Vanliga priorfördelningar är Beta(1,1) = uniform och Normal(0, 10) = svagt 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)Likelihoodfunktioner
Likelihooden P(data|θ) mäter hur sannolika de observerade data är för ett givet parametervärde. För myntkast är likelihooden binomialfördelad. För kontinuerliga data är den ofta gaussisk. Vi utvärderar likelihooden för många θ-värden för att hitta det som bäst förklarar data.
# 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
Den posteriora fördelningen är proportionell mot priorfördelningen multiplicerad med likelihooden. För Beta-binomialmodellen kan detta lösas analytiskt: om priorfördelningen är Beta(α, β) och du observerar h krona i n kast, är den posteriora fördelningen 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)Konjugerade priorfördelningar
En konjugerad priorfördelning är en priorfördelning där den posteriora fördelningen tillhör samma familj som priorfördelningen. Det gör inferensen analytiskt hanterbar. Vanliga konjugerade par är Beta-binomial (andelar), normal-normal (medelvärden med känd varians) och gamma-Poisson (hastigheter).
# 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')Trovärdighetsintervall
Ett trovärdighetsintervall (CI) är den bayesianska motsvarigheten till ett konfidensintervall: ett 95-procentigt CI innebär att det finns 95 procents posterior sannolikhet att θ ligger i intervallet. Detta är den intuitiva tolkning som de flesta felaktigt ger frekventistiska konfidensintervall.
# 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')Bayesiansk uppdatering: sekventiellt lärande
Bayesiansk uppdatering sker sekventiellt: dagens posteriorfördelning blir morgondagens priorfördelning. Det gör bayesiansk inferens naturligt stegvis – du behöver inte anpassa modellen från början när nya data tillkommer, utan kan uppdatera den befintliga posteriorfördelningen.
# 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-skattning
Maximum A Posteriori (MAP)-skattningen är moden för den posteriora fördelningen. För en posteriorfördelning med Beta(α, β) gäller MAP = (α−1)/(α+β−2). MAP balanserar priorfördelningens och likelihoodens påverkan och drar skattningarna mot priorfördelningen vid små stickprov.
# 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')När ska bayesianska metoder användas?
Bayesianska metoder är särskilt användbara när: (1) du har informativ förkunskap, (2) stickproven är små, (3) du behöver en fullständig kvantifiering av osäkerheten, (4) du vill göra sannolikhetsuttalanden om parametrar eller (5) du utför en sekventiell analys där priorfördelningar förs vidare från tidigare experiment.
# 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')Bayesiansk inferens i praktiken
För enkla konjugerade modeller är inferensen analytisk (som ovan). För komplexa modeller (hierarkiska eller icke-konjugerade) använder vi Markov Chain Monte Carlo-sampling (MCMC) via Stan (RStan), JAGS eller BUGS för att numeriskt approximera den posteriora fördelningen.
# 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)Snabb kontroll
Du observerar 7 krona på 10 myntkast. Din priorfördelning är Beta(2, 2). Vilken är den korrekta posteriora fördelningen?
Sammanfattning: bayesianskt tänkande
Viktiga punkter:
- Bayes sats: P(θ|data) ∝ P(data|θ) × P(θ)
- Priorfördelningen uttrycker tron före data, likelihooden uttrycker stöd från data och posteriorfördelningen kombinerar båda
- Konjugerade priorfördelningar ger analytiska posteriorfördelningar (beta-binomial, normal-normal, gamma-Poisson)
- Beta-binomial uppdatering: Beta(α, β) + (h krona, t klave) → Beta(α+h, β+t)
- Trovärdighetsintervall har en naturlig sannolikhetstolkning som konfidensintervall saknar
- Bayesiansk uppdatering sker sekventiellt – dagens posteriorfördelning är morgondagens priorfördelning
- För komplexa modeller används MCMC-sampling (Stan, JAGS) för att approximera posteriorfördelningar
# 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')Lär dig R med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 43
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Introduktion till bayesianskt tänkande” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”Introduktion till bayesianskt tänkande”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Introduktion till bayesianskt tänkande”?
Förstå prior, likelihood och posterior inom det bayesianska ramverket. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig R Academy?
Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Introduktion till bayesianskt tänkande”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här R Academy-lektionen?
Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Introduktion till bayesianskt tänkande
- Skriva Stan-modeller i R
- MCMC-sampling och diagnostik
- Posteriora prediktiva kontroller