Gli esempi precedenti si possono basare su eventi casuali "analogici", come il lancio di aghi o di molte freccette su un tabellone rettangolare, la cui ripetizione richiede comunque troppo tempo per rendere efficiente il metodo che ne richiede un grande numero. Con gli strumenti informatici, in grado di fornire molto rapidamente numerosissime ripetizioni, occorre presupporre del resto la capacità di costruire eventi davvero casuali.
In particolare si deve presupporre la capacità di estrarre un numero in un intervallo di numeri naturali equiprobabili o di estrarre allo stesso modo, cioè secondo una distribuzione uniforme, un numero "reale" compreso tra 0 e 1.
Quando è possibile anche solo estrarre un numero realmente equiprobabile in \(\{ 0, 1\}\), come sembrerebbe possibile usando ad esempio
crypto.getRandomValues() attinge a questa riserva di vera casualità accumulata dal sistema;
Tuttavia si ricorre a metodi più sofisticati, implementati in ogni linguaggio di programmazione, per produrre numeri pseudocasuali, cioè generati da algoritmi deterministici che simulano la casualità. In particolare in JavaScript la function Math.random() produce numeri "reali" pseudocasuali dell'intervallo [0, 1[.
Il metodo dell'inversione della funzione di ripartizione, o della CDF (Cumulative Distribution Function), è una tecnica che, a partire da una distribuzione uniforme [0, 1[, permette di generare numeri casuali (campionamento) che seguano una specifica distribuzione di probabilità.
Dalla distribuzione uniforme su [0,1[ si possono simulare variabili aleatorie \(X\) discrete con valori \([x_1,x_2,\dots,x_n]\) date le probabilità \([p_1,p_2,\dots,p_n]\), con \(\sum_i p_i=1:\) \[ \sum_{i=1}^k p_i\le \text{Math.random()} \lt\sum_{i=k+1}^n p_i \implies X=x_k\]
Una variabile aleatoria discreta come oggetto JavaScript, ad esempio:
Campioni totali: 0
Considerando una variabile aleatoria a valori compresi tra 0 e 1, dovrà essere nota la funzione di ripartizione F(x), non decrescente su [0,1], con F(0)=0 e F(1)=1
x**2, Math.sqrt(x), (3*x-1)**3.
Campioni totali: 0
Consideriamo la variabile \(X\) con valori \(\{0,1\}\) e probabilità \(p\), cioè la variabile di Bernoulli, oppure con valori tra 0 e 1 e distribuzione uniforme.
Consideriamo poi la somma
\[
S_n = \sum_{i=0}^n X
\]
e infine la somma normalizzata che centra la somma attorno a 0 e scala la dispersione a 1:
\[
Z_n = \frac{S_n - \mathbb{E}[S_n]}{\sqrt{\mathrm{Var}(S_n)}}
\]
\(X:\) n = 10
campioni
Ogni variabile contribuisce con un “pezzetto” di variabilità e quando se ne sommano molte:
Il Teorema del Limite Centrale non vale per distribuzioni con varianza infinita (es. Pareto con \(\alpha < 2\)), appare una stable distribution (Lévy)
Un altro interessante modo, dovuto a Box e Muller (1958), per trasformare numeri casuali uniformi in numeri casuali gaussiani, si riconduce semplicemente all'espressione
-
che determina campioni secondo una distribuzione normale standardizzata a partire da due estrazioni casuali secondo la distribuzione uniforme su [0,1[.