Introduction au raisonnement bayésien
Comprenez la loi a priori, la vraisemblance et la loi a posteriori dans le cadre bayésien.
Introduction au raisonnement bayésien est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
Fréquentiste ou bayésien
En statistique fréquentiste, la probabilité est la fréquence à long terme d'un événement. En statistique bayésienne, la probabilité représente un degré de croyance. La différence essentielle est la suivante : les fréquentistes considèrent les paramètres comme des constantes fixes (mais inconnues), tandis que les Bayésiens les considèrent comme des variables aléatoires dotées de distributions de probabilités.
# 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')Théorème de Bayes
Le théorème de Bayes relie la croyance a priori concernant un paramètre, la vraisemblance des données conditionnellement à ce paramètre et la croyance a posteriori après observation des données :
P(θ|data) = P(data|θ) × P(θ) / P(data)
Le dénominateur P(data) est une constante de normalisation : elle transforme la loi a posteriori en une distribution de probabilités propre.
# 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')Distributions a priori
L'a priori encode votre croyance concernant un paramètre avant l'observation des données. Les a priori peuvent être non informatifs (plats, exprimant un minimum de connaissances) ou informatifs (fortement concentrés, exprimant une expertise du domaine). A priori courants : Beta(1,1) = uniforme, Normal(0, 10) = faiblement informatif.
# 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)Fonctions de vraisemblance
La vraisemblance P(data|θ) mesure la probabilité des données observées pour une valeur donnée du paramètre. Pour des lancers de pièce, la vraisemblance suit une loi binomiale. Pour des données continues, elle est souvent gaussienne. Nous évaluons la vraisemblance pour de nombreuses valeurs de θ afin de déterminer laquelle explique le mieux les données.
# 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')A posteriori = a priori × vraisemblance
La loi a posteriori est proportionnelle au produit de la loi a priori et de la vraisemblance. Pour le modèle bêta-binomiale, ce calcul est traitable analytiquement : si l'a priori est Beta(α, β) et que vous observez h faces sur n lancers, la loi a posteriori est 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)Distributions a priori conjuguées
Un a priori conjugué est un a priori dont la loi a posteriori appartient à la même famille. Cela rend l'inférence traitable analytiquement. Couples conjugués courants : Beta-binomiale (proportions), normale-normale (moyennes à variance connue), gamma-Poisson (taux).
# 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')Intervalles de crédibilité
Un intervalle de crédibilité (IC) est l'équivalent bayésien d'un intervalle de confiance : un IC à 95 % signifie que la probabilité a posteriori que θ se trouve dans l'intervalle est de 95 %. C'est l'interprétation intuitive que la plupart des gens attribuent à tort aux intervalles de confiance fréquentistes.
# 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')Mise à jour bayésienne : apprentissage séquentiel
La mise à jour bayésienne est séquentielle : la loi a posteriori d'aujourd'hui devient la loi a priori de demain. L'inférence bayésienne est ainsi naturellement incrémentale : il n'est pas nécessaire de tout réajuster lorsque de nouvelles données arrivent ; il suffit de mettre à jour la loi a posteriori existante.
# 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')
}Estimation MAP
L'estimation du Maximum A Posteriori (MAP) est le mode de la distribution a posteriori. Pour une loi a posteriori Beta(α, β), MAP = (α−1)/(α+β−2). La MAP équilibre l'influence de l'a priori et celle de la vraisemblance, en rapprochant les estimations de l'a priori lorsque les échantillons sont petits.
# 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')Quand utiliser les méthodes bayésiennes
Les méthodes bayésiennes sont particulièrement utiles lorsque : (1) vous disposez de connaissances a priori informatives, (2) les tailles d'échantillon sont faibles, (3) vous avez besoin d'une quantification complète de l'incertitude, (4) vous souhaitez formuler des énoncés de probabilité sur les paramètres, ou (5) vous effectuez une analyse séquentielle dans laquelle les a priori sont transmis d'une expérience à l'autre.
# 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')L'inférence bayésienne en pratique
Pour les modèles conjugués simples, l'inférence est analytique (comme indiqué précédemment). Pour les modèles complexes (hiérarchiques, non conjugués), nous utilisons l'échantillonnage par chaînes de Markov Monte-Carlo (MCMC) via Stan (RStan), JAGS ou BUGS afin d'approximer numériquement la loi a posteriori.
# 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)Vérification rapide
Vous observez 7 faces sur 10 lancers d'une pièce. Votre a priori est Beta(2, 2). Quelle est la loi a posteriori correcte ?
Récapitulatif : raisonnement bayésien
Points essentiels :
- Théorème de Bayes : P(θ|data) ∝ P(data|θ) × P(θ)
- L'a priori encode la croyance avant les données ; la vraisemblance encode l'appui fourni par les données ; la loi a posteriori combine les deux
- Les a priori conjugués donnent des lois a posteriori analytiques (bêta-binomiale, normale-normale, gamma-Poisson)
- Mise à jour bêta-binomiale : Beta(α, β) + (h faces, t piles) → Beta(α+h, β+t)
- Les intervalles de crédibilité ont une interprétation probabiliste naturelle que les IC n'ont pas
- La mise à jour bayésienne est séquentielle : la loi a posteriori d'aujourd'hui est la loi a priori de demain
- Pour les modèles complexes, utilisez l'échantillonnage MCMC (Stan, JAGS) afin d'approximer les lois a posteriori
# 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')Apprends R avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 43
- Leçons
- 159
Questions Fréquemment Posées
La leçon « Introduction au raisonnement bayésien » est-elle gratuite ?
Oui — le texte complet de « Introduction au raisonnement bayésien » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Introduction au raisonnement bayésien » ?
Comprenez la loi a priori, la vraisemblance et la loi a posteriori dans le cadre bayésien. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Introduction au raisonnement bayésien » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Introduction au raisonnement bayésien
- Écrire des modèles Stan dans R
- Échantillonnage MCMC et diagnostics
- Vérifications prédictives a posteriori