15  Linguaggi di programmazione probabilistica

Nel capitolo 17 del manuale didattico abbiamo esaminato l’algoritmo di Metropolis come soluzione computazionale generale al problema dell’inferenza bayesiana. Questo approccio dimostra che è possibile generare campioni da distribuzioni a posteriori arbitrarie, superando i limiti dei casi trattabili analiticamente mediante le famiglie coniugate.

Tuttavia, l’implementazione pratica dell’algoritmo di Metropolis presenta notevoli sfide. La necessità di sviluppare codice specifico per ogni modello, di calibrare manualmente le distribuzioni di proposta e di diagnosticare la convergenza degli algoritmi rappresenta un ostacolo considerevole all’applicazione sistematica dell’inferenza bayesiana ai problemi complessi delle scienze sociali e psicologiche. I linguaggi di programmazione probabilistica (PPL), brevemente introdotti in questo capitolo, emergono come risposta a queste limitazioni.

15.1 I PPL e la psicologia

I PPL rappresentano una vera e propria rivoluzione metodologica. Il loro principio fondamentale consiste nel separare la definizione del modello statistico dalla sua implementazione algoritmica: il ricercatore definisce formalmente il modello utilizzando una sintassi simile alla notazione statistica standard, mentre il sistema genera automaticamente i campioni in modo efficiente mediante algoritmi MCMC avanzati.

Questa separazione delle competenze ha trasformato radicalmente la pratica della ricerca empirica. I PPL consentono ai ricercatori di concentrarsi esclusivamente sulla formalizzazione dei costrutti teorici, come i processi di apprendimento, le strutture gerarchiche o i meccanismi decisionali, senza doversi preoccupare dei dettagli implementativi del campionamento bayesiano. Il ricercatore diventa quindi un “architetto di modelli” piuttosto che un “programmatore di algoritmi”.

Tra gli ambienti PPL contemporanei, Stan si è affermato come strumento di riferimento nella statistica bayesiana grazie alla sua combinazione unica di un linguaggio dichiarativo intuitivo per la specificazione dei modelli, algoritmi di campionamento avanzati come NUTS (un’implementazione dell’Hamiltonian Monte Carlo) e un’integrazione completa con ecosistemi computazionali come R e Python.

Dal punto di vista didattico, è importante sottolineare che Stan non funziona come una scatola nera. I principi concettuali sono gli stessi dell’algoritmo di Metropolis: l’approssimazione numerica della distribuzione a posteriori avviene mediante campionamento iterativo, la verifica della convergenza e l’analisi diagnostica. Il valore aggiunto risiede nell’astrazione dei dettagli implementativi che consente di dedicare le risorse cognitive alla costruzione del modello piuttosto che all’ottimizzazione algoritmica.

In questa prospettiva, i linguaggi probabilistici rappresentano l’evoluzione naturale dell’inferenza bayesiana computazionale, spostando l’attenzione dalla questione tecnica del “come campionare” a quella più sostanziale del “quale modello costruire” per rappresentare adeguatamente i fenomeni psicologici oggetto di studio. Questa transizione metodologica apre nuove frontiere per la modellizzazione di processi complessi in psicologia, neuroscienze e scienze cognitive.

15.2 Evoluzione storica: dai primi PPL a Stan

I linguaggi di programmazione probabilistica hanno una storia che risale agli anni ’90, con pionieri come BUGS (Bayesian inference Using Gibbs Sampling) e il suo successore WinBUGS. Questi sistemi hanno introdotto un approccio rivoluzionario: per la prima volta, i ricercatori hanno potuto specificare i modelli bayesiani tramite un linguaggio dichiarativo, delegando a un motore inferenziale la generazione automatica dei campioni dalle distribuzioni a posteriori. Questo cambiamento concettuale ha trasformato l’inferenza bayesiana da un procedimento computazionale manuale a una specifica formale da elaborare automaticamente.

Successivamente, il panorama dei PPL si è diversificato con l’emergere di strumenti moderni. Accanto a JAGS (Just Another Gibbs Sampler), erede diretto dell’ecosistema BUGS, sono emersi ambienti come PyMC in Python e, in particolare, Stan, che ha rapidamente guadagnato lo status di standard de facto in numerosi ambiti della statistica applicata.

Stan si distingue per l’integrazione di tre componenti fondamentali: un linguaggio dichiarativo elegante per la specificazione dei modelli, algoritmi di campionamento ad alte prestazioni come NUTS (No-U-Turn Sampler), un’implementazione sofisticata dell’Hamiltonian Monte Carlo, e un’eccezionale interoperabilità con gli ambienti di calcolo scientifico. Questa combinazione ha reso l’inferenza bayesiana avanzata accessibile a tutti, democratizzando tecniche computazionali che un tempo erano riservate agli specialisti e rendendole patrimonio comune della comunità scientifica.

15.3 Impatto sulla ricerca psicologica

L’adozione dei linguaggi di programmazione probabilistica ha prodotto un avanzamento metodologico sostanziale per la psicologia e le scienze sociali. I ricercatori possono ora dedicare le proprie risorse cognitive alla formalizzazione dei modelli teorici, quali processi di apprendimento, meccanismi decisionali o strutture gerarchiche, senza dover sviluppare implementazioni computazionali personalizzate. Questa libertà operativa favorisce l’esplorazione di architetture modellistiche più sofisticate e consente una traduzione più fedele dei costrutti teorici in specifiche formali eseguibili.

Ciò ha implicazioni per la trasparenza metodologica e il rigore inferenziale. A differenza di approcci che occultano le assunzioni modellistiche dietro interfacce semplificate, i PPL richiedono una dichiarazione esplicita di ogni componente del modello. Questa esplicitazione garantisce la piena tracciabilità delle ipotesi e rende l’intero processo inferenziale completamente riproducibile, rafforzando il collegamento tra il framework teorico e l’analisi empirica.

15.4 Interfacce ad alto livello per l’accessibilità

Nonostante i linguaggi probabilistici rappresentino un progresso fondamentale, il loro utilizzo diretto richiede comunque una solida preparazione in programmazione e statistica bayesiana. Per rendere questi strumenti accessibili a un pubblico più ampio, sono state sviluppate interfacce di più alto livello, tra cui brms in R (basato su Stan) e Bambi in Python (basato su PyMC).

Queste interfacce adottano una sintassi semplificata che riprende le convenzioni dei pacchetti statistici tradizionali. In R, ad esempio, il pacchetto brms permette di specificare modelli di regressione utilizzando una formula simile a quella dei pacchetti lm o lmer, integrando la possibilità di definire distribuzioni a priori e di ottenere stime bayesiane tramite il motore inferenziale di Stan. Questo approccio consente a ricercatori già familiari con i modelli statistici classici di avvicinarsi all’inferenza bayesiana senza dover padroneggiare i dettagli implementativi dei linguaggi probabilistici sottostanti.

L’evoluzione verso interfacce sempre più intuitive rappresenta un passo cruciale per democratizzare gli strumenti bayesiani, bilanciando la potenza computazionale dei PPL con l’accessibilità per la comunità scientifica.

Riflessioni conclusive

I linguaggi di programmazione probabilistica rappresentano una transizione fondamentale nell’evoluzione dell’inferenza bayesiana. Questi linguaggi segnano il passaggio da una fase pionieristica, caratterizzata dall’implementazione manuale di algoritmi complessi, a una fase matura in cui l’attenzione può concentrarsi sulla specifica e l’interpretazione dei modelli, liberando il ricercatore dalla gestione dei dettagli computazionali.

I principi computazionali di base rimangono quelli introdotti dall’algoritmo di Metropolis: l’approssimazione numerica della distribuzione a posteriori mediante campionamento iterativo. Il valore aggiunto dei linguaggi probabilistici risiede nell’astrazione dei dettagli implementativi: i ricercatori possono specificare i modelli attraverso linguaggi dichiarativi standardizzati, delegando al sistema la gestione automatica del campionamento e l’ottimizzazione degli algoritmi sottostanti.