Campionamento efficiente di una distribuzione beta con soglia


10

Come devo campionare in modo efficiente dalla seguente distribuzione?

xB(α,β), x>k

Se non è troppo grande, il campionamento del rifiuto potrebbe essere l'approccio migliore, ma non sono sicuro di come procedere quando è grande. Forse c'è qualche approssimazione asintotica che può essere applicata?kk


1
Non è inequivocabilmente chiaro cosa intendi lì con " ". Intendi una distribuzione beta troncata (troncata a sinistra in )? xB(α,β), x>kk
Glen_b

@Glen_b esattamente.
user1502040

5
Per entrambi i parametri di forma maggiori di 1, la distribuzione beta è concava nel registro, pertanto è possibile utilizzare inviluppi esponenziali per il campionamento del rifiuto. Per quanto riguarda la generazione di variate beta non troncate, stai già campionando da distribuzioni esponenziali troncate (che è facile da fare), dovrebbe essere semplice adattare questo metodo.
Scortchi - Ripristina Monica

Risposte:


14

Il modo più semplice, e il modo più generale, che si applica a qualsiasi distribuzione troncata (può anche essere generalizzato al troncamento su entrambi i lati), è utilizzare il campionamento della trasformata inversa . Se è la distribuzione cumulativa degli interessi, imposta e prendip 0 = F ( k )Fp0=F(k)

UU(p0,1)X=F1(U)

dove è un campione di troncato a sinistra in . La funzione quantile mapperà le probabilità a campioni da . Poiché prendiamo i valori di solo dalla "area" che corrisponde ai valori della distribuzione beta dalla regione non troncata, campionerai solo quei valori.F k F - 1 F UXFkF1FU

Questo metodo è illustrato nell'immagine qui sotto in cui l'area troncata è contrassegnata da un rettangolo grigio, i punti in rosso sono disegnati dalla distribuzione e quindi trasformati in campioni.B ( 2 , 8 )U(p0,1)B(2,8)

Campionamento di trasformata inversa da distribuzione troncata


5
(+1) Vale la pena notare che la funzione quantile non è così facile da valutare.
Scortchi - Ripristina Monica

1
@Scortchi Se a o b sono 1 o almeno un numero intero, esiste una forma non così male (vedi Wikipedia ). E in Python c'è scipy.special.betaincl'inverso e in R c'è pbeta.
Graipher,

3
@Graipher: avrei dovuto dire "a buon mercato, in generale" - sarebbe meglio evitare Newton-Raphson o altre soluzioni iterative, se possibile. (A proposito è qbetaper la funzione quantile in R.)
Scortchi - Ripristina Monica

1
@Scortchi hai ragione, ma nella maggior parte dei casi, per i computer moderni questo non dovrebbe essere un grosso problema. Raccomando anche questo approccio poiché è direttamente disponibile nella maggior parte dei software e può essere generalizzato a qualsiasi distribuzione troncata, solo se si ha accesso alla funzione quantile.
Tim

1
Indubbiamente è bene avere a portata di mano un metodo generalmente applicabile e facilmente implementabile il cui runtime non cresce con ; e per le distribuzioni con funzioni quantili in forma chiusa, ad es. Weibull, deve essere buono come può. Tuttavia sospetto che dovrà essere impostato per tagliare una parte piuttosto ampia della distribuzione beta prima di battere gli algoritmi di rifiuto-campionamento efficienti che sono disponibili anche nella maggior parte dei software e che si basano solo sul calcolo della densità di probabilità della beta. kkk
Scortchi - Ripristina Monica

8

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)(1x)(β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λ(xxL)

Trova impostando uguali i gradienti delle densità del registroλ

λ=a1xb11x
e trova calcolando quanto la densità esponenziale deve essere ridimensionata per soddisfare la densità in quel punto c
c=f(x)λeλ(xxL)

inserisci qui la descrizione dell'immagine

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(1eλ(xUxL))
xλc

Q(x)=xa(1x)b(a+b2)xa+1[exp((b1)(xxL)1x+xL(a1)x(a1))exp((b1)(xxU)1x+xU(a1)x(a1))]

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(1U)λλ

inserisci qui la descrizione dell'immagine

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.


1
+1 Bella idea. Poiché Beta è approssimativamente normale per valori da modesti a grandi dei suoi parametri, a seconda di quanto vicini l'uno all'altro, l'uso di un inviluppo gaussiano potrebbe essere ancora un po 'più efficiente.
whuber

@whuber: volevo una distribuzione con una distribuzione quantile in forma chiusa per l'inviluppo, ma suppongo che potresti generare efficientemente i variati gaussiani troncati usando una di quelle buone approssimazioni alla funzione quantile gaussiana. Sono ancora interessato a cosa faresti quando o . β < 1α<1β<1
Scortchi - Ripristina Monica

1
Per un così piccolo e , vorresti passare a una coda esponenziale. Non sono sicuro di cosa intendi per "forma chiusa", tuttavia: quando guardi con attenzione le implementazioni informatiche di esponenziali, gaussiani, funzioni ipergeometriche, ecc., Cioè tutte le funzioni non algebriche, scopri che nessuna di hanno una "forma chiusa" generale: sono calcolate attraverso approssimazioni successive come serie di Taylor, frazioni parziali o espansioni asintotiche. Non c'è molta differenza tra il calcolo di un esponenziale e il calcolo di un quantile gaussiano. βαβ
whuber

@whuber: (1) L'approccio che ho adottato qui per costruire buste non funzionerebbe perché le densità non sono concava. (2) (a) Intendevo certamente funzioni algebriche + log e potenze, trig. funzioni se mi fosse stato chiesto, e forse anche funzioni gamma - confesso di non avere un'idea precisa. (b) Punto preso in considerazione: le valutazioni rapide delle funzioni non si limitano a quelle con moduli chiusi.
Scortchi - Ripristina Monica

1
Un buon punto sul fallimento della concavità dei log. Ho il sospetto che una distribuzione della legge sul potere dovrebbe fare una buona busta per o . β < 1α<1β<1
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.