here::here("code", "_common.R") |>
source()
# Load packages
if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(HDInterval)
44 Aggiornare le credenze su un parametro: dal prior alla posterior
“The probability of any event is the ratio between the value at which an expectation depending on the happening of the event ought to be computed, and the value of the thing expected upon its happening.”
— Thomas Bayes, An Essay towards Solving a Problem in the Doctrine of Chances
Introduzione
In questo capitolo esploreremo l’inferenza bayesiana attraverso il modello binomiale, particolarmente adatto per analizzare dati dicotomici (successo/fallimento, sì/no, corretto/errato). Inizieremo con un caso molto semplice: una distribuzione a priori discreta, dove il parametro \(\theta\) (la probabilità di successo) può assumere solo un numero limitato di valori predefiniti. Questo ci permetterà di vedere, passo dopo passo, come le nostre credenze su \(\theta\) cambiano quando arrivano nuovi dati. Successivamente passeremo al caso più generale delle distribuzioni a priori continue, molto più adatte a modellizzare problemi reali. In particolare useremo la distribuzione Beta, che si combina perfettamente con la distribuzione Binomiale.
L’obiettivo è fornire una comprensione intuitiva ma rigorosa del processo di aggiornamento bayesiano, mettendo in luce sia la logica di fondo sia le potenzialità applicative.
Panoramica del capitolo
- applicare l’aggiornamento bayesiano per affinare credenze;
- rappresentare distribuzioni a priori (discrete e continue);
- calcolare la verosimiglianza e aggiornare la distribuzione a priori;
- derivare e interpretare la distribuzione a posteriori;
- usare il metodo a griglia per approssimare la distribuzione a posteriori;
- applicare il modello binomiale per stimare probabilità e incertezze;
- calcolare medie, mode e intervalli di credibilità;
- utilizzare la distribuzione Beta come prior continuo.
44.1 Verosimiglianza binomiale
La distribuzione binomiale descrive il numero di successi \(y\) in \(n\) prove indipendenti, ciascuna con probabilità di successo \(\theta\):
\[ p(y \mid \theta) = \text{Bin}(y \mid n, \theta) = \binom{n}{y} \theta^y (1 - \theta)^{n-y}, \]
dove \(\theta\) rappresenta la probabilità di successo per singola prova, \(y\) è il numero osservato di successi e \(n\) è il numero totale di prove (fissato a priori).
44.2 Esempio psicologico: riconoscimento di parole emotive
Un ricercatore in psicologia cognitiva conduce uno studio per stimare la proporzione di adulti in grado di riconoscere correttamente parole con contenuto emotivo positivo (es. gioia, orgoglio, speranza) all’interno di un compito di memoria a lungo termine. Ogni partecipante riceve lo stesso test standardizzato e viene classificato come:
- 1 = corretto riconoscimento (successo), oppure
- 0 = mancato riconoscimento (fallimento).
In un campione di 30 soggetti indipendenti, 22 hanno riconosciuto correttamente le parole emozionanti.
In questo scenario:
- ciascun soggetto è un’unità di osservazione indipendente;
- ciascun soggetto può essere considerato come una prova di una variabile di Bernoulli con probabilità di successo \(\theta\), dove \(\theta\) rappresenta la proporzione vera nella popolazione di adulti in grado di riconoscere correttamente parole emotive.
Pertanto, il numero totale di successi in \(n = 30\) soggetti può essere modellato come:
\[ Y \sim \text{Binomiale}(n = 30, \theta), \]
dove \(Y = 22\) è il numero di successi osservati.
44.2.1 Obiettivo inferenziale
Il nostro scopo è stimare \(\theta\): la probabilità che un adulto, scelto a caso dalla popolazione, riconosca correttamente le parole emotive. Nel quadro bayesiano combiniamo:
- la verosimiglianza (dati osservati: 22 su 30),
- una distribuzione a priori (credenze iniziali su \(\theta\)),
ottenendo la distribuzione a posteriori, che rappresenta la nostra conoscenza aggiornata.
44.3 Metodo basato su griglia
Il metodo su griglia è un approccio semplice per calcolare la distribuzione a posteriori. È didatticamente utile perché rende espliciti tutti i passaggi.
Passaggi:
- definire una griglia di valori plausibili per \(\theta\) (da 0 a 1),
- calcolare la verosimiglianza per ogni valore di \(\theta\),
- moltiplicare verosimiglianza e priori,
- normalizzare i valori ottenuti in modo che la somma sia 1.
Il risultato è una distribuzione a posteriori che mostra come l’evidenza aggiorna le credenze iniziali.
44.4 Aggiornamento bayesiano con una distribuzione a priori discreta
44.4.1 Costruzione della distribuzione a priori
In assenza di informazioni specifiche, possiamo assumere che tutti i valori di \(\theta\) siano ugualmente plausibili. Per implementare concretamente questo approccio:
- definiamo un insieme discreto di valori possibili per \(\theta\): {0, 0.1, 0.2, …, 1},
- assegniamo a ciascun valore la stessa probabilità a priori: \(p(\theta) = 1/11 \approx 0.09\).
Questa scelta rappresenta uno stato di massima incertezza iniziale, dove nessun valore di \(\theta\) risulta a priori più plausibile di altri.
44.4.2 Aggiornamento con i dati
Abbiamo osservato \(y = 22\) successi su \(n = 30\). Per ogni valore \(\theta\) nella griglia:
- calcoliamo la verosimiglianza binomiale: \(p(y \mid \theta) = \theta^{22}(1-\theta)^8\),
- moltiplichiamo per la probabilità a priori,
- normalizziamo dividendo per la somma totale di tutti i prodotti ottenuti.
Il risultato è una distribuzione a posteriori discreta che mostra come l’osservazione di 22 successi su 30 prove modifica le nostre credenze iniziali su \(\theta\). I valori più vicini a 22/30 \(\approx\) 0.7 riceveranno una maggiore probabilità a posteriori.
44.4.3 Interpretazione
- Prima dei dati, ogni valore di \(\theta\) era ugualmente plausibile.
- Dopo i dati, valori come \(\theta = 0.7\) o \(0.75\) hanno alta probabilità a posteriori.
- Valori estremi (\(0.2\), \(0.9\)) diventano poco plausibili.
44.4.4 Implementazione in R
Definizione della griglia:
theta <- seq(0, 1, by = 0.1) # Griglia di valori da 0 a 1 con passo 0.1
Quando non abbiamo informazioni preliminari, usiamo una distribuzione uniforme:
Visualizziamo questa distribuzione:
ggplot(data.frame(theta, prob = priori_unif), aes(x = theta, y = prob)) +
geom_col(width = 0.08) +
labs(title = "Distribuzione a Priori Uniforme",
x = expression(theta),
y = "Densità di probabilità")
Se invece riteniamo più probabili valori centrali di \(\theta\):
priori_inf <- c(
0, 0.05, 0.05, 0.05, 0.175, 0.175, 0.175, 0.175, 0.05, 0.05, 0.05
)
Visualizzazione:
ggplot(data.frame(theta, prob = priori_inf), aes(x = theta, y = prob)) +
geom_col(width = 0.08) +
labs(title = "Distribuzione a Priori Informativa",
x = expression(theta),
y = "Densità di probabilità")
Verosimiglianza:
verosimiglianza <- dbinom(22, size = 30, prob = theta)
Visualizzazione:
ggplot(data.frame(theta, prob = verosimiglianza), aes(x = theta, y = prob)) +
geom_col(width = 0.08) +
labs(title = "Funzione di Verosimiglianza",
x = expression(theta),
y = "L(θ|dati)")
Calcolo della distribuzione a posteriori:
posteriori_non_norm <- priori_inf * verosimiglianza
posteriori <- posteriori_non_norm / sum(posteriori_non_norm) # Normalizzazione
Visualizzazione:
ggplot(data.frame(theta, prob = posteriori), aes(x = theta, y = prob)) +
geom_col(width = 0.08) +
labs(title = "Distribuzione a Posteriori",
x = expression(theta),
y = "P(θ|dati)")
Statistiche descrittive:
media_post <- sum(theta * posteriori)
var_post <- sum(theta^2 * posteriori) - media_post^2
moda_post <- theta[which.max(posteriori)]
cat("Media a posteriori:", round(media_post, 3),
"\nVarianza a posteriori:", round(var_post, 3),
"\nModa a posteriori:", moda_post)
#> Media a posteriori: 0.689
#> Varianza a posteriori: 0.005
#> Moda a posteriori: 0.7
L’implementazione illustra tre caratteristiche essenziali dell’inferenza bayesiana. La funzione di verosimiglianza attribuisce maggiore densità di probabilità a valori di \(\theta\) compresi tra 0.6 e 0.8, in accordo con l’evidenza empirica dei 22 successi osservati su 30 prove. La distribuzione a priori contribuisce in modo determinante alla configurazione della distribuzione a posteriori risultante. Il processo di aggiornamento bayesiano integra in modo rigoroso queste due fonti informative mediante l’applicazione del teorema di Bayes.
44.5 Aggiornamento bayesiano con una distribuzione a priori continua
Un’estensione naturale è usare una distribuzione continua come priori. La più adatta nel caso di proporzioni è la Beta:
- supporto: \([0,1]\) (come \(\theta\));
- coniugata della Binomiale (la posteriori è ancora una Beta);
- parametri: \(\text{Beta}(\alpha, \beta)\).
Esempi:
- \(\text{Beta}(2,2)\): priori simmetrica e non troppo informativa.
- \(\text{Beta}(2,5)\): priori che privilegia valori bassi di \(\theta\).
44.5.1 Implementazione in R
Calcoliamo la densità della distribuzione \(\text{Beta}(2, 2)\) su una griglia fine di valori di \(\theta\):
Visualizzazione:
ggplot(data.frame(theta, prior = prior_beta_2_2), aes(x = theta, y = prior)) +
geom_line(linewidth = 1.2) +
labs(title = "Distribuzione a Priori Beta(2, 2)", x = expression(theta), y = "Densità")
Continuiamo con l’esempio precedente, con 22 successi in 30 prove. La verosimiglianza associata a ciascun valore di \(\theta\) è calcolata come:
Poiché il prior è continuo, otteniamo la distribuzione a posteriori moltiplicando punto a punto la densità a priori per la verosimiglianza, e normalizzando:
posterior_unnorm <- prior_beta_2_2 * likelihood
posterior <- posterior_unnorm / sum(posterior_unnorm)
Visualizziamo le tre curve:
df <- data.frame(theta, prior = prior_beta_2_2, likelihood, posterior)
df_long <- df |>
pivot_longer(cols = c("prior", "likelihood", "posterior"),
names_to = "Distribuzione", values_to = "Densità")
ggplot(df_long, aes(x = theta, y = Densità, color = Distribuzione)) +
geom_line(size = 1.2) +
labs(title = "Aggiornamento Bayesiano con Prior Continua",
x = expression(theta), y = "Densità") +
theme(legend.position = "bottom")
Consideriamo ora una distribuzione a priori non simmetrica, Beta(2, 5), per rappresentare credenze che privilegiano valori bassi di \(\theta\).
La distribuzione a posteriori si ottiene moltiplicando la distribuzione a priori per la verosimiglianza e normalizzando il risultato:
posterior <- (prior_2_5 * likelihood) / sum(prior_2_5 * likelihood)
# Uniamo tutti i dati in un dataframe per ggplot2
dat <- tibble(
theta,
prior_2_5,
likelihood,
posterior
)
# Preparazione dei dati per il plot
long_data <- dat |>
pivot_longer(
cols = c(prior_2_5, likelihood, posterior),
names_to = "distribution",
values_to = "density"
)
# Grafico
long_data |>
ggplot(aes(x = theta, y = density, color = distribution)) +
geom_line(size = 1.2) +
labs(
title = "Distribuzioni Bayesiane",
x = expression(theta),
y = "Densità"
) +
theme(legend.position = "bottom")
Calcoliamo alcune quantità descrittive utili:
Per stimare intervalli di credibilità, possiamo campionare dalla distribuzione a posteriori:
Se desideriamo calcolare l’intervallo di densità più alta (HPDI), possiamo utilizzare pacchetti aggiuntivi come HDInterval
.
# Calcolo HPDI (richiede il pacchetto HDInterval)
hdi(samples, credMass = 0.94)
#> lower upper
#> 0.5025 0.7928
#> attr(,"credMass")
#> [1] 0.94
Interpretazione. L’aggiornamento bayesiano con una distribuzione a priori continua fornisce una stima aggiornata di \(\theta\) che tiene conto sia della distribuzione a priori (conoscenza pregressa) sia della verosimiglianza (dati osservati). Nel nostro esempio, la curva a posteriori risulta spostata verso destra rispetto al prior simmetrico \(\text{Beta}(2,2)\), riflettendo l’evidenza di 22 successi su 30 prove. In alternativa, utilizzando un prior asimmetrico come \(\text{Beta}(2,5)\), la distribuzione a posteriori mostra un compromesso tra la tendenza iniziale a credere in basse probabilità di successo e l’evidenza empirica più ottimista.
Riflessioni conclusive
L’analisi presentata ha illustrato il processo di aggiornamento bayesiano sia per distribuzioni a priori discrete che continue, con particolare attenzione ai casi speciali che ammettono soluzioni analitiche. Questi casi, come la combinazione di priori Beta con verosimiglianze binomiali, offrono esempi particolarmente istruttivi del meccanismo bayesiano in azione.
Il metodo basato su griglia si è rivelato uno strumento didatticamente efficace per approssimare le distribuzioni a posteriori. La sua implementazione segue un percorso logico chiaro: si discretizza lo spazio dei parametri, si valutano prior e verosimiglianza in ciascun punto della griglia, e infine si normalizzano i risultati per ottenere una distribuzione di probabilità valida. Questo approccio mantiene una trasparenza concettuale che lo rende particolarmente adatto all’introduzione dei principi bayesiani.
Tuttavia, l’utilità pratica del metodo a griglia diminuisce rapidamente con l’aumentare della complessità del modello. La cosiddetta maledizione della dimensionalità rende proibitivo il costo computazionale quando si lavora con più di pochi parametri. Un modello con appena 10 parametri, utilizzando una griglia di 100 punti per ciascuno, richiederebbe la valutazione di un numero astronomico di combinazioni (\(10^{20}\)), dimostrando chiaramente i limiti di scalabilità di questo approccio.
Questa constatazione spiega perché nella pratica statistica avanzata si preferiscano tecniche più sofisticate come il campionamento MCMC. Tali metodi, pur essendo concettualmente più complessi, offrono la flessibilità e l’efficienza necessarie per affrontare problemi reali di moderata e alta dimensionalità. Il metodo a griglia rimane comunque prezioso come strumento didattico e per analisi preliminari in contesti semplici, rappresentando una porta d’accesso comprensibile al ricco panorama dell’inferenza bayesiana.