Si consideri una piccola forma parametro vicino 0, ad esempio α = 1 / 100 . Nell'intervallo tra 0 e α , e - α è approssimativamente 1 , quindi il Gamma pdf è approssimativamente x α - 1 d x / Γ ( α ) . Questo può essere integrato in un CDF approssimativo, F α ( x ) = x ααα = 1 / 100αe- α1Xα - 1dx / Γ ( α ) . Invertendolo, vediamo unapotenza1/α: un esponente enorme. Perα=1/100questo provoca qualche possibilità di underflow (un valore a doppia precisione inferiore a10-300, più o meno). Ecco una trama della possibilità di ottenere underflow in funzione del logaritmo in base dieci diα:Fα( x ) = xαα Γ ( α )1 / αα=1/10010−300α
Una soluzione è sfruttare questa approssimazione per generare variate di log (Gamma): in effetti, prova a generare una variazione di gamma e, se è troppo piccola, genera il suo logaritmo da questa distribuzione di potenza approssimativa (come mostrato di seguito). (Ripetere l'operazione ripetutamente fino a quando il registro non rientra nell'intervallo di underflow, in modo che sia un valido sostituto della variabile di underflow originale.) Per il calcolo di Dirichlet, sottrarre il massimo di tutti i logaritmi da ciascuno dei valori di log: questo ridimensiona implicitamente tutto il Gamma varia in modo da non influenzare i valori di Dirichlet. Tratta ogni registro risultante che è troppo piccolo (diciamo, inferiore a -100) come il registro di un vero zero. Esponenziare gli altri registri. Ora puoi procedere senza underflow.
Ci vorrà ancora più tempo di prima, ma almeno funzionerà!
αC=log(Γ(α))+log(α)αC
Poiché il parametro scale ridimensiona semplicemente la variabile, non vi è alcun problema a soddisfarla in queste procedure. Non è nemmeno necessario se tutti i parametri di scala sono uguali.
modificare
1/αB(α)Γ(α+1)(αxα−1)(yαe−ydy/Γ(α+1))z=xyy→z/xxxz∞0≤y≤1
pdf(z)=αΓ(α+1)∫∞z(xα/x)e−x(z/x)α−1dxdz=1Γ(α)zα−1e−zdz,
Γ(α)
0<α<1Γ(α+1)1/αΓ(α)