Simulasi ilmu semi-komputer terkait masalah di sini.
Saya punya distribusi di mana
P (x) =
untuk beberapa konstanta b dan n, dan x adalah bilangan bulat sehingga .
Sekarang, saya perlu sampel dari distribusi ini. Ini memiliki CDF yang dapat dibalik, jadi dimungkinkan untuk melakukan ini secara langsung dalam teori. Masalahnya adalah bahwa angka-angka yang terlibat adalah BESAR. Begitu besar pada kenyataannya, bahwa mereka berdua meluap variabel diformat secara konvensional, dan mengambil setidaknya beberapa menit (pada titik tertentu saya menyerah ...) untuk menghitung menggunakan format presisi sewenang-wenang. Pada dasarnya, CDF terbalik masih melibatkan istilah , untuk . Meskipun demikian, angka-angka output masih akan berada dalam kisaran , jadi sepertinya harus ada cara untuk melakukan ini.
Apa yang saya cari adalah cara kira-kira pengambilan sampel dari distribusi ini yang dapat dihitung. Apakah ada metode pengambilan sampel alternatif? Apakah mereka?
sumber
Jawaban:
CDF siap dibalik. Formula untuk inversi mengarah pada apa yang harus menjadi salah satu solusi yang paling sederhana dan paling bijaksana.
Mulailah dengan mengamati bahwa kemungkinan hasilnyak , 0 ≤ k ≤ n , sebanding dengan e- b k . Jadi, jika kita menghasilkan nilai yang seragamq antara 0 dan qmaks=∑nk = 0e- b k = , kita hanya perlu menemukan terbesar yang( 1 -e- b ( n + 1 )) / ( 1 -e- b) k
Aljabar sederhana memberikan solusinya
Berikut ini adalahb n
R
implementasi yang dibangun seperti semua generator bilangan acak lainnya: argumen pertamanya menentukan berapa banyak nilai iid yang akan dihasilkan dan argumen lainnya menamai parameter ( as dan as ):b
n.max
Sebagai contoh penggunaannya, mari kita hasilkan satu juta variasi acak menurut distribusi ini:
( detik diperlukan.)0,10
( ditambahkan ke setiap nilai dalam rangka menciptakan histogram yang lebih baik: 's prosedur memiliki keistimewaan (= bug) di mana bar pertama adalah terlalu tinggi ketika endpoint kiri ditetapkan pada nol.) Kurva merah adalah distribusi referensi bahwa simulasi ini mencoba mereproduksi. Mari kita evaluasi kebaikan fit dengan uji chi-square:1
R
hist
Nilai p adalah : sangat pas.0,84
sumber
Anda sedang berhadapan dengan distribusi geometris terpotong dengan . Ada berbagai cara untuk mendekati ini.p = 1 -e- b
Saya akan menyarankan opsi yang berbeda dalam situasi yang berbeda; beberapa opsi akan melibatkan simulasi dari geometrik dan regenerasi ketika berada di luar rentang, mengambil bagian integer dari eksponensial terpotong yang sesuai ( seperti di sini ), atau menggunakan salah satu dari beberapa teknik cepat yang dirancang untuk distribusi diskrit pada rentang yang terbatas. Mengingat bahwa besar, mengambil dasar dari eksponensial terpotong cenderung relatif cepat, tetapi apakah itu pilihan terbaik juga tergantung pada .n b
Ini pertanyaan terkait tentang math.SE
Sebelum saya mencoba saran spesifik, apa kisaran nilai khas untuk ?b
sumber
Pertama, perhatikan bahwa yang, jika kontinu, akan terkait dengan distribusi eksponensial. Kemudian, apa yang dapat Anda lakukan adalah mensimulasikan dari distribusi eksponensial terpotong dan mengambil (bagian integer) pengamatan.P( x ) ∝e- b x x
floor()
Cdf dari eksponensial terpotong adalah
Kemudian, jika kita membuat , kita memperoleh . Jika besar, maka yang menyarankan untuk mendekati .F( x ; n , b ) = u x = -1bcatatan[ 1 - u ( 1 -e- b n) ] b n e−bn≈0 x≈−1blog[1−u]
sumber
rweirdp
ini diubah untuk diubahn
menjadin+1
. (Seperti yang diberikan di sini, itu tidak akan pernah mengembalikan nilai yang sama dengann
: yaitu efek perkiraan). Analisis yang sedikit lebih ketat diberikan dalam jawaban saya. Meskipun saya mendapatkan formula yang berbeda, itu setara dengan (lebih sederhana!) Yang diberikan di sini, setelahn
->n+1
modifikasi dibuat.Cara untuk mengambil sampel dari target distribusi adalah denganp(k)∝exp{−bk}
menjalankan eksperimen Metropolis-Hastings untuk menentukan (menarik) dukungan dari distribusi, yaitu di mana subset dari terkonsentrasi;{0,1,…,n}
Gunakan dukungan yang ditentukan, katakan, untuk menghitung probabilitas tepat sebagai untuk menghindari luberan.{k0,…,k1} p(k)∝exp{−bk+bk0}
Pembaruan: Ketika memikirkan lebih lanjut tentang itu, karena berkurang dalam k, dukungan distribusi yang efektif akan selalu dimulai pada . Jika cukup besar, dukungan ini akan berakhir dengan sangat cepat, dalam hal ini tidak menjadi masalah karena nilai tidak akan pernah dikunjungi. Jika sangat kecil, pdfnya hampir datar, yang berarti bahwa seseorang dapat menggunakan distribusi seragam pada sebagai proposal accept-reject. Dan gunakan log pada langkah penerimaan untuk menghindari luapan.p(⋅) k0=0 b n k b {0,1,…,n}
sumber