Introduction à la modélisation statistique bayésienne

Un cours en R, Stan, et brms

Ladislas Nalborczyk (LPC, LNC, CNRS, Aix-Marseille Univ)

Planning

Cours n°01 : Introduction à l’inférence bayésienne
Cours n°02 : Modèle Beta-Binomial
Cours n°03 : Introduction à brms, modèle de régression linéaire
Cours n°04 : Modèle de régression linéaire (suite)
Cours n°05 : Markov Chain Monte Carlo
Cours n°06 : Modèle linéaire généralisé
Cours n°07 : Comparaison de modèles
Cours n°08 : Modèles multi-niveaux
Cours n°09 : Modèles multi-niveaux généralisés
Cours n°10 : Data Hackathon

\[\newcommand\given[1][]{\:#1\vert\:}\]

Rappels de notation

La notation \(p(y \given \theta)\) peut faire référence à deux choses selon le contexte : la fonction de vraisemblance et le modèle d’observation. De plus, on trouve de nombreuses notations ambigues en statistique. Essayons de clarifier ci-dessous.

  • \(\Pr(Y = y \given \Theta = \theta)\) désigne une probabilité (e.g., dbinom(x = 2, size = 10, prob = 0.5)).
  • \(p(Y = y \given \Theta = \theta)\) désigne une densité de probabilité (e.g., dbeta(x = 0.4, shape1 = 2, shape2 = 3)).
  • \(p(Y = y \given \Theta)\) désigne une fonction de vraisemblance (likelihood) discrète ou continue, \(y\) est connu/fixé, \(\Theta\) est une variable aléatoire, la somme (ou l’intégrale) de cette distribution n’est pas égale à 1 (e.g., dbinom(x = 2, size = 10, prob = seq(0, 1, 0.1) )).
  • \(p(Y \given \Theta = \theta)\) désigne une fonction de masse (ou densité) de probabilité (dont la somme ou l’intégrale est égale à 1), qu’on appelle aussi “modèle d’observation” (observation model) ou “distribution d’échantillonnage” (sampling distribution), \(Y\) est une variable aléatoire, \(\theta\) est connu/fixé (e.g., dbinom(x = 0:10, size = 10, prob = 0.5))

Le but de l’analyse bayésienne (i.e., ce qu’on obtient à la fin d’une telle analyse) est la distribution postérieure \(p(\theta \given y)\). On peut la résumer pour faciliter la communication des résultats, mais toute l’information souhaitée est contenue dans la distribution toute entière (pas seulement sa moyenne, son mode, ou autre).

Rappels de notation

Illustration tirée de https://masterofmemory.com/mmem-0333-learn-the-greek-alphabet/.

Rappels : prior predictive checking

########################################################################
# On définit un modèle avec :                                          #
# Une fonction de vraisemblance Gaussienne : y ~ Normal(mu, sigma)     #
# Un prior Gaussien pour la moyenne : mu ~ Normal(100, 10)             #
# Et un prior Exponentiel pour l'écart-type : sigma ~ Exponential(0.1) #
########################################################################

# on simule 10.000 observations issues d'une distribution Gaussienne sans incertitude (épistémique)
rnorm(n = 1e4, mean = 100, sd = 10) |> hist(breaks = "FD")

# on tire 10.000 échantillons issus du prior Gaussien pour mu (i.e., p(mu))
# ce prior représente ce qu'on sait de mu avant de voir les données...
mu_prior <- rnorm(n = 1e4, mean = 100, sd = 10)

# 10.000 observations issues d'une distribution Gaussienne avec incertitude sur mu
rnorm(n = 1e4, mean = mu_prior, sd = 10) |> hist(breaks = "FD")

# on tire 10.000 échantillons issus du prior Exponentiel pour sigma (i.e., p(sigma))
# ce prior représente ce qu'on sait de sigma avant de voir les données...
sigma_prior <- rexp(n = 1e4, rate = 0.1)

# 10.000 observations issues d'une distribution Gaussienne avec incertitude sur mu ET sigma
# ce que le modèle suppose à propos de y sur la base de nos priors pour mu et sigma...
rnorm(n = 1e4, mean = mu_prior, sd = sigma_prior) |> hist(breaks = "FD")

Rappels : prior predictive checking

Le problème avec la distribution postérieure

\[ \color{purple}{p(\mu, \sigma \given h)} = \frac{\prod_{i} \color{orangered}{\mathrm{Normal}(h_{i} \given \mu, \sigma)}\color{steelblue}{\mathrm{Normal}(\mu \given 178, 20)\mathrm{Uniform}(\sigma \given 0, 50)}} {\color{green}{\int \int \prod_{i} \mathrm{Normal}(h_{i} \given \mu, \sigma)\mathrm{Normal}(\mu \given 178, 20)\mathrm{Uniform}(\sigma \given 0, 50) \mathrm{d} \mu \mathrm{d} \sigma}} \]

Petit problème : La constante de normalisation (en vert) s’obtient en calculant la somme (pour des variables discrètes) ou l’intégrale (pour des variables continues) de la densité conjointe \(p(\text{data}, \theta)\) sur toutes les valeurs possibles de \(\theta\). Cela se complique lorsque le modèle comprend plusieurs paramètres et/ou que la forme de la distribution postérieure est complexe…

Le problème avec la distribution postérieure

Rappels Cours n°02

Trois méthodes pour résoudre (contourner) ce problème :

  • La distribution a priori est un prior conjugué de la fonction de vraisemblance (e.g., modèle Beta-Binomial). Dans ce cas, il existe une solution analytique (i.e., qu’on peut calculer de manière exacte) pour la distribution postérieure.

  • Autrement, pour des modèles simples, on peut utiliser la méthode par grille. On calcule la valeur exacte de la probabilité postérieure en un nombre fini de points dans l’espace des paramètres.

  • Pour les modèles plus complexes, explorer tout l’espace des paramètres n’est pas tractable. On va plutôt échantillonner intelligemment un grand nombre de points dans l’espace des paramètres.

Objectifs du cours

\(\longrightarrow~\) Présenter le principe de base de l’échantillonnage : Markov Chain Monte Carlo

\(\longrightarrow~\) Présenter deux algorithmes (Metropolis-Hastings et HMC)

\(\longrightarrow~\) Montrer les forces mais aussi les faiblesses de ces méthodes

\(\longrightarrow~\) Donner des outils de contrôle sur ces méthodes

\(\longrightarrow~\) Appliquer ces méthodes à un cas simple

Markov Chain Monte Carlo

  • Markov chain Monte Carlo
    \(\longrightarrow~\) Échantillonnage aléatoire
    \(\longrightarrow~\) Le résultat est un ensemble de valeurs du paramètre

  • Markov chain Monte Carlo
    \(\longrightarrow~\) Les valeurs sont générées sous forme de séquences (liaison de dépendance)
    \(\longrightarrow~\) Indice temporel pour identifier la place dans la chaîne
    \(\longrightarrow~\) Le résultat est de la forme : \(\theta^1, \theta^2, \theta^3, \dots, \theta^t\)

  • Markov chain Monte Carlo
    \(\longrightarrow~\) La valeur de paramètre générée ne dépend que de la valeur du paramètre précédent \(\Pr(\theta^{t+1} \given \theta^{t}, \theta^{t-1}, \ldots, \theta^{1}) = \Pr(\theta^{t + 1} \given \theta^{t})\)

Méthodes Monte Carlo

Le terme de méthode de Monte-Carlo désigne une famille d’algorithmes visant à calculer (ou approcher) une valeur numérique en utilisant des procédés aléatoires, c’est-à-dire des techniques probabilistes. Cette méthode a été formalisée en 1947 par Nicholas Metropolis, et publiée pour la première fois en 1949 dans un article co-écrit avec Stanislaw Ulam.

Méthodes Monte Carlo : Estimation de \(\pi\)

Soit un point \(M\) de coordonnées \((x, y)\), où \(0 < x < 1\) et \(0 < y < 1\). On tire aléatoirement les valeurs de \(x\) et \(y\) entre \(0\) et \(1\) suivant une loi uniforme. Le point \(M\) appartient au disque de centre \((0, 0)\) de rayon \(r = 1\) si et seulement si \(\sqrt{x^{2} + y^{2}} \leqslant 1\). On sait que le quart de disque est de surface \(\sigma = \pi r^{2} / 4 = \pi / 4\) et que le carré qui le contient est de surface \(s = r^{2} = 1\). Si la loi de probabilité du tirage de point est uniforme, la probabilité que le point \(M\) appartienne au disque est donc de \(\sigma / s = \pi / 4\). En faisant le rapport du nombre de points dans le disque au nombre de tirages \(\frac{N_{\text{inner}}}{N_{\text{total}}}\), on obtient alors une approximation de \(\pi / 4\).

Méthodes Monte Carlo : Estimation de \(\pi\)

trials <- 1e5 # nombre d'échantillons
radius <- 1 # rayon du cercle
x <- runif(n = trials, min = 0, max = radius) # tirages pour x
y <- runif(n = trials, min = 0, max = radius) # tirages pour y
distance <- sqrt(x^2 + y^2) # distance à l'origine
inside <- distance < radius # à l'intérieur (ou pas) du quart de cercle ?
pi_estimate <- 4 * sum(inside) / trials # estimation de pi