La risposta di @ Tim mostra come il campionamento di trasformazioni inverse può essere adattato per distribuzioni troncate, liberando il tempo di esecuzione della dipendenza dalla soglia . Ulteriori efficienze possono essere ottenute evitando costose valutazioni numeriche della funzione beta quantile e usando il campionamento di trasformazioni inverse come parte del campionamento di rifiuto.k
La funzione di densità di una distribuzione beta con parametri di forma & troncati doppiamente a (per un po 'più di generalità) èβ k 1 < k 2αβk1<k2
f(x)=x(α−1)(1−x)(β−1)B(k2,α,β)−B(k1,α,β)
Prendi qualsiasi parte della densità monotonicamente crescente tra e : per è log-concavo, quindi puoi avvolgerlo con una funzione esponenziale disegnata in una tangente a qualsiasi punto lungo di esso:xLxUα,β>1
g(x)=c⋅λe−λ(x−xL)
Trova impostando uguali i gradienti delle densità del registroλ
−λ=a−1x−b−11−x
e trova calcolando quanto la densità esponenziale deve essere ridimensionata per soddisfare la densità in quel punto
cc=f(x)λe−λ(x−xL)
La migliore busta per il campionamento del rifiuto è quella con l'area più piccola al di sotto di essa. L'area è
Sostituendo le espressioni in per & , e rilasciando dà fattori costanti
A=c⋅(1−e−λ(xU−xL))
xλc
Q(x)=xa(1−x)b(a+b−2)x−a+1⋅[exp((b−1)(x−xL)1−x+xL(a−1)x−(a−1))−exp((b−1)(x−xU)1−x+xU(a−1)x−(a−1))]
Scrivere il derivato è lasciato come esercizio per i lettori o i loro computer. Qualsiasi algoritmo di ricerca della radice può quindi essere usato per trovare la per la quale . xdQdQdxxdQdx=0
Lo stesso vale, mutatis mutandis, per parti della densità che diminuiscono monotonicamente. Quindi la distribuzione beta troncata può essere piuttosto ben avvolta da due funzioni esponenziali, per esempio una da alla modalità e una dalla modalità a , pronta per il campionamento del rifiuto. (Per una variabile casuale uniforme troncata , ha una distribuzione esponenziale troncata con il parametro rate .)k 2 U - log ( 1 - U )k1k2U λ−log(1−U)λλ
La bellezza di questo approccio è che tutto il duro lavoro è nell'assetto. Una volta definita la funzione di inviluppo, calcolata la costante normalizzante per la densità beta troncata, tutto ciò che rimane è generare variate casuali uniformi ed eseguire su di esse alcune semplici operazioni aritmetiche, registri e potenze e confronti. Il rafforzamento della funzione di inviluppo, con linee orizzontali o più curve esponenziali, può ovviamente ridurre il numero di rifiuti.