La verosimiglianza#
La funzione di verosimiglianza rappresenta un elemento chiave che collega i dati osservati ai parametri di un modello statistico. È un concetto fondamentale che sottende gran parte dell’analisi statistica e svolge un ruolo centrale nell’applicazione del Teorema di Bayes. La sua definizione e comprensione sono essenziali per qualsiasi persona coinvolta nella ricerca scientifica, nell’analisi dei dati o nell’interpretazione dei risultati.
In questo capitolo, esploreremo a fondo il concetto di verosimiglianza. Scopriremo come essa rappresenta un ponte tra i dati che osserviamo e i parametri che desideriamo stimare o testare. Attraverso esempi concreti, illustreremo come la verosimiglianza può essere calcolata e utilizzata per formulare inferenze statistiche. Sarà chiaro come questa funzione gioca un ruolo cruciale in molti contesti, dall’analisi dei dati sperimentali alla costruzione di modelli complessi.
Obiettivi di apprendimento
Dopo aver completato questo capitolo, sarete in grado di:
Comprendere il concetto di verosimiglianza e il suo ruolo nella dei parametri.
Generare grafici della funzione di verosimiglianza binomiale.
Generare grafici della funzione di verosimiglianza del modello gaussiano.
Interpretare i grafici della funzione di verosimiglianza.
Comprendere il concetto di stima di massima verosimiglianza.
Preparazione del Notebook#
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats
import math
import arviz as az
import seaborn as sns
%config InlineBackend.figure_format = 'retina'
RANDOM_SEED = 42
rng = np.random.default_rng(RANDOM_SEED)
az.style.use("arviz-darkgrid")
sns.set_theme(palette="colorblind")
Concetto di Verosimiglianza e Sua Formalizzazione Matematica#
La funzione di verosimiglianza è una struttura matematica utilizzata per quantificare la congruenza tra un insieme di dati osservati
In questa espressione,
La costante di proporzionalità, spesso omessa, è irrilevante nel contesto dell’ottimizzazione della funzione di verosimiglianza. Ciò è dovuto al fatto che tale costante non dipende dai parametri
Immaginiamo di avere una moneta e di voler valutare se è equilibrata. Dopo 10 lanci, osserviamo 7 facce. Utilizziamo la distribuzione binomiale per modellare questa situazione. La funzione di massa di probabilità (FMP) della distribuzione binomiale è data da:
dove
Se vogliamo calcolare la verosimiglianza di osservare 7 facce in 10 lanci con una moneta equilibrata (
Questo calcolo ci permette di quantificare quanto sia verosimile osservare 7 facce in 10 lanci, supponendo che la moneta sia equilibrata. Calcolando la verosimiglianza per diversi valori di
È importante notare che la funzione di verosimiglianza e la funzione di probabilità o densità possono essere rappresentate dalla stessa formula matematica, ma la loro interpretazione e applicazione sono differenti. Mentre la funzione di probabilità si concentra sul calcolo della probabilità dei dati
In sintesi, la funzione di verosimiglianza è uno strumento fondamentale nell’inferenza statistica. Essa fornisce un criterio per valutare e confrontare la plausibilità di diversi valori del parametro
Verosimiglianza nel Contesto del Modello Binomiale: Un Esempio Approfondito#
Esploriamo ulteriormente l’importanza della funzione di verosimiglianza mediante un esempio concreto basato sulla distribuzione binomiale. Immaginiamo di effettuare un esperimento composto da
dove
La funzione di verosimiglianza, invece, è utilizzata per esprimere la plausibilità relativa di osservare i dati
Poiché il coefficiente binomiale
Per illustrare con un esempio applicativo, facciamo riferimento allo studio di Zetsche et al. [ZBR19]. In questo studio, su un campione di 30 pazienti affetti da depressione clinica, 23 mostravano aspettative negativamente distorte riguardo al loro futuro stato d’animo. Pertanto, nel contesto di questi dati, la funzione di verosimiglianza è definita dalla distribuzione binomiale con un parametro
Per costruire il profilo di verosimiglianza, è necessario valutare l’Equazione
Nella simulazione seguente, considereremo 100 valori possibili per
n = 30
y = 23
Creiamo ora i possibili valori del parametro
theta = np.linspace(0.0, 1.0, num=100)
print(theta)
[0. 0.01010101 0.02020202 0.03030303 0.04040404 0.05050505
0.06060606 0.07070707 0.08080808 0.09090909 0.1010101 0.11111111
0.12121212 0.13131313 0.14141414 0.15151515 0.16161616 0.17171717
0.18181818 0.19191919 0.2020202 0.21212121 0.22222222 0.23232323
0.24242424 0.25252525 0.26262626 0.27272727 0.28282828 0.29292929
0.3030303 0.31313131 0.32323232 0.33333333 0.34343434 0.35353535
0.36363636 0.37373737 0.38383838 0.39393939 0.4040404 0.41414141
0.42424242 0.43434343 0.44444444 0.45454545 0.46464646 0.47474747
0.48484848 0.49494949 0.50505051 0.51515152 0.52525253 0.53535354
0.54545455 0.55555556 0.56565657 0.57575758 0.58585859 0.5959596
0.60606061 0.61616162 0.62626263 0.63636364 0.64646465 0.65656566
0.66666667 0.67676768 0.68686869 0.6969697 0.70707071 0.71717172
0.72727273 0.73737374 0.74747475 0.75757576 0.76767677 0.77777778
0.78787879 0.7979798 0.80808081 0.81818182 0.82828283 0.83838384
0.84848485 0.85858586 0.86868687 0.87878788 0.88888889 0.8989899
0.90909091 0.91919192 0.92929293 0.93939394 0.94949495 0.95959596
0.96969697 0.97979798 0.98989899 1. ]
Per esempio, ponendo
stats.binom.pmf(y, n, 0.1)
9.7371682902e-18
Ponendo
stats.binom.pmf(y, n, 0.2)
3.58141723492221e-11
Se ripetiamo questo processo 100 volte, una volta per ciascuno dei valori
def like(r, n, theta):
return math.comb(n, r) * theta**r * (1 - theta) ** (n - r)
La curva che interpola i punti ottenuti è la funzione di verosimiglianza, come indicato dalla figura seguente.
plt.figure()
plt.plot(theta, like(r=y, n=n, theta=theta), "-")
plt.title("Funzione di verosimiglianza")
plt.xlabel("Valore della variabile casuale theta [0, 1]")
plt.ylabel("Verosimiglianza");
Interpretazione della Funzione di Verosimiglianza#
La funzione di verosimiglianza, denotata come
Il valore di
Per identificare numericamente questo valore ottimale di argmax
in NumPy, possono automatizzare questo processo. Una volta individuato l’indice che massimizza la verosimiglianza, si può risalire al valore corrispondente di
l = like(r=y, n=n, theta=theta)
l.argmax()
76
theta[76]
0.7676767676767677
È importante notare che, invece di utilizzare la funzione like()
che abbiamo definito precedentemente per motivi didattici, è possibile ottenere lo stesso risultato utilizzando in modo equivalente la funzione binom.pmf()
.
plt.figure()
plt.plot(theta, stats.binom.pmf(y, n, theta), "-")
plt.title("Funzione di verosimiglianza")
plt.xlabel("Valore della variabile casuale theta [0, 1]")
plt.ylabel("Verosimiglianza");
La Funzione di Log-Verosimiglianza#
Nelle applicazioni pratiche, si preferisce frequentemente lavorare con il logaritmo naturale della funzione di verosimiglianza, noto come funzione di log-verosimiglianza. Questa è definita come:
Grazie alla monotonicità del logaritmo (specificamente, essendo una funzione strettamente crescente), i punti di massimo per
La funzione di log-verosimiglianza per una distribuzione binomiale si articola come segue:
Utilizzare la log-verosimiglianza piuttosto che la verosimiglianza diretta è consigliato per diverse ragioni pratiche. Una delle principali è legata alla stabilità numerica: i valori della funzione di verosimiglianza possono diventare molto piccoli—al punto da raggiungere l’ordine di
Per illustrare questo concetto, possiamo riprendere l’esempio precedente e applicare la funzione di log-verosimiglianza per identificare il valore di binom.logpmf()
per eseguire questa operazione.
La rappresentazione grafica della funzione di log-verosimiglianza fornisce ulteriori intuizioni sul comportamento di questa funzione.
n = 30
r = 23
plt.figure()
plt.plot(theta, stats.binom.logpmf(y, n, theta), "-")
plt.title("Funzione di log-verosimiglianza")
plt.xlabel("Valore della variabile casuale theta [0, 1]")
plt.ylabel("Log-verosimiglianza");
Il risultato replica quello trovato in precedenza con la funzione di verosimiglianza.
ll = stats.binom.logpmf(y, n, theta)
ll.argmax()
76
theta[76]
0.7676767676767677
Verosimiglianza Congiunta di Campioni IID da una Distribuzione Binomiale#
Nella discussione precedente, abbiamo esaminato la verosimiglianza associata a una singola osservazione proveniente da una distribuzione binomiale. Ora estendiamo questo concetto a un contesto più generale, considerando
Denotiamo con
Grazie all’indipendenza delle osservazioni, la funzione di probabilità congiunta può essere fattorizzata nel prodotto delle funzioni di probabilità marginali, come segue:
In termini di verosimiglianza, quando inseriamo i valori osservati
Questa funzione di verosimiglianza congiunta fornisce una misura complessiva di quanto bene il modello binomiale con un dato
Modello Gaussiano e Verosimiglianza#
Ampliamo ora la nostra analisi al caso della distribuzione gaussiana. Inizieremo con la verosimiglianza associata a una singola osservazione
Per una distribuzione gaussiana con media
Caso di una Singola Osservazione#
Per una migliore comprensione dell’equazione di verosimiglianza (eq-gaussian-likelihood), consideriamo prima il caso in cui abbiamo una singola osservazione
Immaginiamo che la variabile casuale
Questa funzione di verosimiglianza quantifica quanto è probabile osservare un determinato valore di QI
Poniamo
y = 114
L’eq. eq-gaussian-sim-like
dipende dai parametri
mu = np.linspace(70.0, 160.0, num=1000)
Nell’analisi che stiamo conducendo, esaminiamo 1000 diversi valori per il parametro
Per essere precisi, in ogni iterazione del calcolo applichiamo l’equazione (eq-gaussian-likelihood) utilizzando:
Il valore osservato
, che è costante per tutte le iterazioni.Un valore noto e costante per
.Un valore specifico per
tratto dall’insieme dei 1000 valori che stiamo esaminando.
Pertanto, tra le variabili nell’equazione,
In Python, la densità di probabilità della distribuzione gaussiana può essere calcolata utilizzando la funzione norm.pdf()
dalla libreria scipy.stats
. Questa funzione accetta come argomenti:
Il valore osservato
o un array di tali valori.La media
o un array di medie, nel caso si voglia valutare più di una distribuzione gaussiana.La deviazione standard
o un array di deviazioni standard, analogamente al caso delle medie.
In pratica, utilizzando la funzione norm.pdf()
con un valore fisso di
Applicando la funzione norm.pdf()
1000 volte, una volta per ciascuno dei valori
f_mu = stats.norm.pdf(y, loc=mu, scale=15)
La funzione di verosimiglianza è la curva che interpola i punti
plt.figure()
plt.plot(mu, f_mu, "-")
plt.title("Funzione di verosimiglianza")
plt.xlabel("Valore della variabile casuale mu [70, 160]")
plt.ylabel("Verosimiglianza")
plt.xlim([70, 160]);
La funzione di verosimiglianza così trovata ha la forma della distribuzione Gaussiana. Nel caso di una singola osservazione, ma solo in questo caso, ha anche un’area unitaria. Per l’esempio presente, la moda della funzione di verosimiglianza è 114.
l = stats.norm.pdf(y, loc=mu, scale=15)
mu[l.argmax()]
113.96396396396396
Campione indipendente di osservazioni da una distribuzione gaussiana#
Esaminiamo il caso più complesso di un campione di
Nel caso in cui le osservazioni
dove
Mantenendo i dati osservati
Per illustrare questo concetto concretamente, prendiamo in esame un esempio che utilizza i punteggi BDI-II (Beck Depression Inventory II) di trenta partecipanti in uno studio clinico, come descritto in Zetsche et al. [ZBR19].
y = [
26,
35,
30,
25,
44,
30,
33,
43,
22,
43,
24,
19,
39,
31,
25,
28,
35,
30,
26,
31,
41,
36,
26,
35,
33,
28,
27,
34,
27,
22,
]
Il nostro obiettivo è di costruire una funzione di verosimiglianza per i punteggi BDI-II di un campione di 30 partecipanti. Supponiamo, sulla base di ricerche precedenti, che questi punteggi siano distribuiti secondo una legge normale. Inoltre, assumiamo che la deviazione standard
Per la prima osservazione del campione,
Per il campione completo, la densità di probabilità congiunta è il prodotto delle densità di tutte le singole osservazioni:
Quindi, la funzione di verosimiglianza, denotata come
In questo contesto,
Per rendere i calcoli più gestibili, è consigliabile utilizzare il logaritmo della funzione di verosimiglianza. In Python, possiamo definire una funzione log_likelihood()
che accetta come argomenti y
, mu
e sigma = true_sigma
. Per semplificare, impostiamo true_sigma
uguale alla deviazione standard osservata nel campione.
true_sigma = np.std(y)
print(true_sigma)
6.495810615739622
def log_likelihood(y, mu, sigma=true_sigma):
return np.sum(stats.norm.logpdf(y, loc=mu, scale=true_sigma))
Consideriamo, ad esempio, il valore
bar_y = np.mean(y)
print(bar_y)
30.933333333333334
L’ordinata della funzione di log-verosimiglianza in corrispondenza di
log_likelihood(y, 30.93, sigma=true_sigma)
-98.70288339960591
Troviamo ora i valori della log-verosimiglianza per ciascuno dei 1000 valori mu
.
mu = np.linspace(np.mean(y) - 2 * np.std(y), np.mean(y) + 2 * np.std(y), num=1000)
Troviamo il valore dell’ordinata della funzione di log-verosimiglianza in corrispondenza di ciascuno dei 1000 valori mu
che abbiamo definito.
ll = [log_likelihood(y, mu_val, true_sigma) for mu_val in mu]
Nel caso di un solo parametro sconosciuto (nel caso presente, mu
, ll
). Tale funzione descrive la credibilità relativa che può essere attribuita ai valori del parametro
plt.figure()
plt.plot(mu, ll, "-")
plt.title("Funzione di log-verosimiglianza")
plt.xlabel("Valore della variabile casuale mu")
plt.ylabel("Log-verosimiglianza")
plt.axvline(x=np.mean(y), alpha=0.4, ls="--");
Il valore
Il massimo della funzione di log-verosimiglianza, ovvero 30.93 per l’esempio in discussione, è identico alla media dei dati campionari.
Derivazione Formale della Stima di Massima Verosimiglianza per una Distribuzione Gaussiana#
Per ottenere le stime di massima verosimiglianza (MLE) dei parametri
L’obiettivo è massimizzare
Stima di Massima Verosimiglianza per #
Per trovare la stima di
Risolvendo questa equazione, otteniamo:
La stima di massima verosimiglianza per
Stima di Massima Verosimiglianza per #
Una derivazione simile può essere effettuata per
In sintesi, le stime di massima verosimiglianza per
Conclusione e Riflessioni Finali#
La funzione di verosimiglianza rappresenta un elemento cruciale che collega i dati osservati ai parametri di un modello statistico. Essa fornisce una misura della plausibilità dei dati in relazione a diversi valori possibili dei parametri del modello. La strutturazione di una funzione di verosimiglianza richiede la considerazione di tre componenti fondamentali: il modello statistico che si presume abbia generato i dati, l’insieme di valori possibili per i parametri di tale modello e le osservazioni empiriche che effettivamente abbiamo a disposizione.
La funzione di verosimiglianza è centrale nella pratica dell’inferenza statistica. Essa ci permette di quantificare quanto bene differenti set di parametri potrebbero aver generato i dati osservati. Questo è fondamentale sia per la selezione del modello che per la stima dei parametri, e pertanto è indispensabile per un’analisi dati rigorosa e per un’interpretazione accurata dei risultati.
Un’applicazione pratica e illustrativa dei principi esposti in questo capitolo è fornita nel capitolo Apprendimento per rinforzo, che è un esempio di come la teoria della verosimiglianza possa essere applicata per affrontare questioni empiriche complesse in psicologia.
In sintesi, la comprensione e l’applicazione appropriata della funzione di verosimiglianza sono passaggi essenziali nel processo di analisi dati. Essa costituisce uno strumento indispensabile per chi è impegnato nella ricerca empirica e nell’interpretazione di dati complessi.
Esercizi
All’esame ti verrà chiesto di:
Calcolare la funzione di verosimiglianza binomiale e riportare il valore della funzione in corrispondenza di specifici valori
.Calcolare la funzione di verosimiglianza del modello gaussiano, per
noto, e riportare il valore della funzione in corrispondenza di specifici valori .Calcolare la stima di massima verosimiglianza.
Rispondere a domande che implicano una adeguata comprensione del concetto di funzione di verosimiglianza.
Show code cell source
%load_ext watermark
%watermark -n -u -v -iv -w
Last updated: Mon Jan 22 2024
Python implementation: CPython
Python version : 3.11.7
IPython version : 8.19.0
pandas : 2.1.4
arviz : 0.17.0
scipy : 1.11.4
numpy : 1.26.2
seaborn : 0.13.0
matplotlib: 3.8.2
Watermark: 2.4.3