Saya mencoba untuk menulis sebuah program dalam R yang mensimulasikan angka acak semu dari distribusi dengan fungsi distribusi kumulatif:
di mana
Saya mencoba inverse transform sampling tetapi kebalikannya tampaknya tidak dapat dipecahkan secara analitis. Saya akan senang jika Anda bisa menyarankan solusi untuk masalah ini
r
random-generation
Sebastian
sumber
sumber
Jawaban:
Ada solusi langsung (dan jika saya dapat menambahkan, anggun) untuk latihan ini: karena muncul seperti produk dari dua distribusi survival: distribusi adalah distribusi Dalam hal ini adalah Exponential dan adalah -th kekuatan distribusi Exponential .1−F(x) (1−F(x))=exp{−ax−bp+1xp+1}=exp{−ax}1−F1(x)exp{−bp+1xp+1}1−F2(x) F X=min{X1,X2}X1∼F1,X2∼F2 F1 E(a) F2 1/(p+1) E(b/(p+1))
Kode R terkait sesederhana mungkin
dan itu pasti jauh lebih cepat daripada pdf terbalik dan resolusi accept-reject:
dengan kecocokan sempurna yang tidak mengejutkan:
sumber
Anda selalu dapat memecahkan transformasi invers secara numerik.
Di bawah, saya melakukan pencarian pembelahan yang sangat sederhana. Untuk probabilitas input yang diberikan (saya menggunakan karena Anda sudah memiliki dalam rumus Anda), saya mulai dengan dan . Lalu saya gandakan hingga . Akhirnya, saya membagi dua interval hingga panjangnya lebih pendek dari dan titik tengahnya memenuhi .q q p xL=0 xR=1 xR F(xR)>q [xL,xR] ϵ xM F(xM)≈q
ECDF sesuai dengan Anda dengan cukup baik untuk pilihan saya dan , dan itu cukup cepat. Anda mungkin dapat mempercepat ini dengan menggunakan beberapa pengoptimalan tipe Newton alih-alih pencarian pembelahan sederhana.F a b
sumber
Ada yang agak berbelit-belit jika resolusi langsung dengan accept-reject. Pertama, diferensiasi sederhana menunjukkan bahwa pdf dari distribusi adalah Kedua, karena kita memiliki batas atas Ketiga, dengan mempertimbangkan suku kedua dalam , ambil perubahan variabel , yaitu, . Kemudian adalah Jacobian dari perubahan variabel. Jikaf(x)=(a+bxp)exp{−ax−bp+1xp+1} f(x)=ae−axe−bxp+1/(p+1)≤1+bxpe−bxp+1/(p+1)e−ax≤1 f(x)≤g(x)=ae−ax+bxpe−bxp+1/(p+1) g ξ=xp+1 x=ξ1/(p+1) dxdξ=1p+1ξ1p+1−1=1p+1ξ−pp+1 X memiliki kerapatan bentuk mana adalah konstanta normalisasi, maka memiliki kepadatan
yang berarti bahwa (i) adalah didistribusikan sebagai variasi Eksponensial dan (ii) konstanta sama dengan satu. Oleh karena itu, akhirnya sama dengan campuran tertimbang yang sama dari distribusi Exponential dan kekuatan -th dari Exponentialκbxpe−bxp+1/(p+1) κ Ξ=X1/(p+1) κbξpp+1e−bξ/(p+1)1p+1ξ−pp+1=κbp+1e−bξ/(p+1) Ξ E(b/(p+1)) κ g(x) E(a) 1/(p+1) E(b/(p+1)) distribusi, modulo konstanta multiplikasiatif yang hilang dari untuk memperhitungkan bobot:
Dan mudah untuk disimulasikan sebagai campuran.2 f(x)≤g(x)=2(12ae−ax+12bxpe−bxp+1/(p+1)) g
R rendering dari algoritma accept-reject dengan demikian
dan untuk sampel-n:
Berikut ini adalah ilustrasi untuk a = 1, b = 2, p = 3:
sumber