Esercizio - Generazione di variabili aleatorie con trasformazione inversa e accettazione-rifiuto
Teoria: Metodi Monte Carlo - stima, generazione di variabili aleatorie e MCMCMonte Carlo stima una grandezza come media di campioni casuali: errore tipico σ/√N, numero di campioni N ≥ ln(2/δ)/(2ε²) per Hoeffding (probabilità), N ≥ 3 ln(2/δ)/(pε²) per Chernoff (errore relativo). Stima di π con p=π/4; integrali come media di g(U); eventi rari con campionamento per importanza (pesi φ/q); conteggio DNF con Karp-Luby in tempo polinomiale perché P(Y=1) ≥ 1/m. Generazione: trasformazione inversa X=F^{-1}(U) e accettazione-rifiuto (f ≤ M g, efficienza 1/M). MCMC: Metropolis-Hastings costruisce una catena con stazionaria π (nota a meno di costante) imponendo il bilancio dettagliato con probabilità di accettazione min(1, π(y)Q(y,x)/(π(x)Q(x,y))).Metodi Monte Carlo - stima, generazione di variabili aleatorie e MCMC →; Funzione di distribuzioneLa funzione di distribuzione (FdD) F_X(x) = P(X ≤ x) è definita per ogni v.a., è crescente, continua a destra, va da 0 a 1 e determina la legge; per una v.a. discreta è a gradini, con salti in corrispondenza dei valori e di altezza pari alla densità.Funzione di distribuzione →, Funzioni di una variabile aleatoriaPer trovare la legge di Y = g(X) si calcola la FdD: F_Y(y) = P(g(X) ≤ y) = P(X ∈ g⁻¹((−∞, y])), poi si deriva; se g è strettamente monotona e derivabile vale la formula f_Y(y) = f_X(g⁻¹(y)) · |(g⁻¹)'(y)|; se g è costante a tratti Y è discreta; se g non è iniettiva (es. X²) si spezza l'evento.Funzioni di una variabile aleatoria →.
Testo. Si dispone di .
- Densità di Rayleigh per : generarla con la trasformazione inversa; calcolare , media e varianza e confrontarle con una simulazione.
- Variabile discreta con per : algoritmo di generazione e controllo.
- , su : accettazione-rifiuto con uniforme. Quale minimo? Probabilità di accettazione e numero medio di tentativi. Cosa cambia con ?
- Dimostrare che l'algoritmo del punto 3 restituisce la densità .
Soluzione
1. La funzione di distribuzione è . Invertendo : ; poiché , si può usare Coda: . Media: (metà dell'integrale gaussiano ). Secondo momento: (con : ), quindi . Simulazione con campioni (codice sotto): media , varianza , .
2. Le somme cumulative sono , , , . Si restituisce il più piccolo con : , , , ; ogni intervallo ha lunghezza uguale alla probabilità cercata. Frequenze su prove: .
3. Si cerca minimo con su . La derivata è , nulla in dove è massima: . Quindi . L'algoritmo: estrai uniformi; accetta se (il rapporto vale in ). La probabilità di accettare a ogni tentativo è , i tentativi sono geometrici di media (simulazione: ). Con l'algoritmo resta corretto (basta ) ma accetta con probabilità e servono in media tentativi (simulazione: ). I campioni di hanno media e varianza (simulazione: e con , e con ).
4. Sia e indipendenti. . Integrando su : (con : , come sopra). Dato "accetta", la densità di è . I tentativi sono indipendenti, quindi i valori restituiti hanno esattamente densità .
Codice di verifica
import numpy as np
rng = np.random.default_rng(1)
# 1. Rayleigh con la trasformazione inversa
X = np.sqrt(-2 * np.log(rng.random(10**6)))
print("1.", X.mean(), X.var(), (X > 2).mean(), " attesi", np.sqrt(np.pi / 2), 2 - np.pi / 2, np.exp(-2))
# 2. discreta con P(k) = k/10
k = np.searchsorted(np.cumsum([.1, .2, .3, .4]), rng.random(10**6), side="right") + 1
print("2.", np.bincount(k)[1:] / 10**6)
# 3. Beta(3,2) per accettazione-rifiuto
def beta32(N, M):
out, tent = [], 0
while len(out) < N:
y = rng.random(); tent += 1
if rng.random() <= 12 * y * y * (1 - y) / M: out.append(y)
return np.array(out), tent / N
for M in (16 / 9, 2):
b, t = beta32(200_000, M)
print("3. M =", round(M, 3), "media", b.mean(), "var", b.var(), "tentativi per campione", t)Versione ripasso
- Rayleigh : , ; , , , (simulazione ; ).
- Discreta : cumulate , primo con ; frequenze .
- Beta(3,2) : massimo in , ; accetta se ; accettazione , tentativi medi ; con ancora corretto, tentativi; media , varianza .
- Dimostrazione: , , densità condizionata (Funzione di distribuzioneLa funzione di distribuzione (FdD) F_X(x) = P(X ≤ x) è definita per ogni v.a., è crescente, continua a destra, va da 0 a 1 e determina la legge; per una v.a. discreta è a gradini, con salti in corrispondenza dei valori e di altezza pari alla densità.Funzione di distribuzione →).
- Errori tipici: usare (algoritmo scorretto); invertire senza accorgersi che ; scegliere con code più leggere di .