Mengambil sampel secara efisien distribusi Beta yang di-threshold

10

Bagaimana saya bisa mengambil sampel secara efisien dari distribusi berikut?

xB(α,β), x>k

Jika tidak terlalu besar maka penolakan sampel mungkin merupakan pendekatan terbaik, tetapi saya tidak yakin bagaimana untuk melanjutkan ketika besar. Mungkin ada beberapa perkiraan asimptotik yang bisa diterapkan?kkk

pengguna1502040
sumber
1
Tidak jelas apa yang Anda inginkan di sana dengan " ". Apakah Anda berarti dipotong distribusi beta (dipotong di sebelah kiri di )? kxB(α,β), x>kk
Glen_b -Reinstate Monica
@ Glen_b tepatnya.
user1502040
5
Untuk kedua parameter bentuk lebih besar dari 1 distribusi beta adalah log-cekung, sehingga amplop eksponensial dapat digunakan untuk sampel penolakan. Untuk menghasilkan varian beta yang tidak terpotong, Anda sudah mengambil sampel dari distribusi eksponensial terpotong (yang mudah dilakukan) harus langsung menyesuaikan metode ini.
Scortchi

Jawaban:

14

Cara paling sederhana, dan yang paling secara umum, yang berlaku untuk setiap distribusi terpotong (dapat juga digeneralisasi untuk pemotongan di kedua sisi), adalah dengan menggunakan invers transformasi sampel . Jika adalah distribusi bunga kumulatif, maka atur dan ambilp 0 = F ( k )Fp0=F(k)

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

di mana adalah sampel dari terpotong kiri pada . Fungsi kuantil akan memetakan probabilitas untuk sampel dari . Karena kami mengambil nilai hanya dari "area" yang cocok dengan nilai distribusi beta dari wilayah yang tidak terpotong, Anda hanya akan mengambil sampel nilai-nilai itu.F k F - 1 F UXFkF1FU

Metode ini diilustrasikan pada gambar di bawah ini di mana area terpotong ditandai oleh persegi panjang abu-abu, titik merah diambil dari distribusi dan kemudian ditransformasikan ke sampel.B ( 2 , 8 )U(p0,1)B(2,8)

Pengambilan sampel transformasi terbalik dari distribusi terpotong

Tim
sumber
5
(+1) Perlu dicatat bahwa fungsi kuantil tidak mudah dievaluasi.
Scortchi
1
@Scortchi Jika a atau b adalah 1 atau setidaknya bilangan bulat, ada bentuk yang tidak terlalu buruk (lihat wikipedia ). Dan dengan Python ada scipy.special.betaincuntuk kebalikannya dan di R ada pbeta.
Graipher
3
@Graipher: Saya seharusnya mengatakan "murah, secara umum" - akan lebih baik untuk menghindari Newton-Raphson atau solusi berulang lainnya jika memungkinkan. (BTW itu qbetauntuk fungsi kuantil dalam R.)
Scortchi - Reinstate Monica
1
@Scortchi Anda benar, tetapi dalam kebanyakan kasus, untuk komputer modern ini seharusnya tidak menjadi masalah besar. Saya juga merekomendasikan pendekatan ini karena langsung tersedia di perangkat lunak yang paling dan dapat digeneralisasi untuk setiap distribusi terpotong, hanya jika seseorang memiliki akses ke fungsi kuantil.
Tim
1
Tidak diragukan lagi itu baik untuk memiliki metode yang berlaku secara umum, mudah diimplementasikan untuk menangani yang run-time tidak tumbuh dengan ; & untuk distribusi dengan fungsi kuantil bentuk tertutup, misalnya Weibull, ia harus sebagus yang didapat. Namun demikian saya menduga harus diatur untuk memotong sebagian besar distribusi beta sebelum mengalahkan algoritma sampel-penolakan yang efisien yang juga tersedia di sebagian besar perangkat lunak & yang hanya mengandalkan pada perhitungan kepadatan probabilitas beta. kk
Scortchi
8

Jawaban @ Tim menunjukkan bagaimana inverse transform sampling dapat diadaptasi untuk distribusi terpotong, membebaskan run-time dependensi pada ambang batas . Efisiensi lebih lanjut dapat diperoleh dengan menghindari evaluasi numerik yang mahal dari fungsi beta quantile & menggunakan sampel inverse transform sebagai bagian dari sampel penolakan.k

Fungsi kepadatan distribusi beta dengan parameter bentuk & terpotong dua kali lipat pada (untuk sedikit lebih umum)αβk1<k2

f(x)=x(α1)(1x)(β1)B(k2,α,β)B(k1,α,β)

Ambil bagian kepadatan yang meningkat secara monoton antara & : untuk itu log-cekung, sehingga Anda dapat menyelimutinya dengan fungsi eksponensial yang digambar dengan garis singgung untuk titik di sepanjang itu:xLxUα,β>1

g(x)=cλeλ(xxL)

Temukan dengan mengatur gradien kepadatan log samaλ

λ=a1xb11x
& temukan dengan menghitung berapa kerapatan eksponensial yang perlu ditingkatkan untuk memenuhi kerapatan pada titik itu c
c=f(x)λeλ(xxL)

masukkan deskripsi gambar di sini

Amplop terbaik untuk sampel penolakan adalah yang memiliki area terkecil di bawahnya. Area ini adalah Mengganti ekspresi dalam untuk & , & dropping faktor konstan memberi

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))]

Menulis turunan dibiarkan sebagai latihan untuk pembaca atau komputer mereka. Algoritma pencari akar apa pun kemudian dapat digunakan untuk menemukan yang . xdQdQdxxdQdx=0

Hal yang sama berlaku, mutatis mutandis, untuk mengurangi kepadatan bagian secara monoton. Jadi distribusi beta terpotong dapat terselubung dengan rapi oleh dua fungsi eksponensial, katakanlah, satu dari ke mode & satu dari mode ke , siap untuk pengambilan sampel penolakan. (Untuk variabel acak seragam dipotong , memiliki terpotong eksponensial distribusi dengan parameter tingkat .)k 2 U - log ( 1 - U )k1k2U λlog(1U)λλ

masukkan deskripsi gambar di sini

Keindahan dari pendekatan ini adalah bahwa semua kerja keras sudah diatur. Setelah fungsi amplop ditetapkan, konstanta normalisasi untuk kepadatan beta terpotong dihitung, yang tersisa adalah menghasilkan varian acak yang seragam, & melakukan padanya beberapa operasi aritmetika sederhana, log & kekuatan, & perbandingan. Mengencangkan fungsi amplop — dengan garis horizontal atau kurva yang lebih eksponensial — tentu saja dapat mengurangi jumlah penolakan.

Scortchi - Reinstate Monica
sumber
1
+1 Ide bagus. Karena Beta kira-kira normal untuk nilai parameternya yang sedang hingga kecil, tergantung seberapa dekat satu sama lain, menggunakan amplop Gaussian mungkin sedikit lebih efisien.
whuber
@whuber: Saya ingin distribusi dengan distribusi kuantil bentuk tertutup untuk amplop, tapi saya kira Anda dapat menghasilkan varian Gaussian terpotong secara efisien menggunakan salah satu dari perkiraan yang baik untuk fungsi kuantil Gaussian. Saya masih tertarik dengan apa yang akan Anda lakukan ketika atau . β < 1α<1β<1
Scortchi
1
Untuk dan sekecil itu , Anda ingin beralih ke ekor eksponensial. Saya tidak yakin apa yang Anda maksud dengan "bentuk-tertutup," meskipun: ketika Anda melihat keras pada implementasi komputer eksponensial, Gaussians, fungsi hypergeometrik, dll - yaitu, semua fungsi non-aljabar - Anda menemukan bahwa tidak ada mereka memiliki "bentuk tertutup" umum: mereka dihitung melalui perkiraan berturut-turut seperti seri Taylor, fraksi parsial, atau ekspansi asimptotik. Tidak ada banyak perbedaan antara menghitung eksponensial dan menghitung kuantum Gaussian. βαβ
whuber
@whuber: (1) Pendekatan yang saya lakukan di sini untuk membuat amplop tidak akan berhasil karena kepadatannya tidak log-cekung. (2) (a) Maksud saya tentu saja fungsi aljabar + log & power, trig. fungsi jika saya telah diminta, & bahkan mungkin fungsi gamma - Saya akui saya tidak memiliki gagasan yang tepat. (B) Poin diambil - evaluasi fungsi cepat tidak terbatas pada orang-orang dengan bentuk tertutup.
Scortchi
1
Poin bagus tentang kegagalan log-concavity. Saya menduga distribusi kuasa hukum harus membuat amplop yang bagus untuk atau . β < 1α<1β<1
whuber