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+1x=ξ1/(p+1)dxdξ=1p+1ξ1p+1−1=1p+1ξ−pp+1
Xmemiliki 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.2f(x)≤g(x)=2(12ae−ax+12bxpe−bxp+1/(p+1))
g
R rendering dari algoritma accept-reject dengan demikian
simuF <- function(a,b,p){
reepeat=TRUE
while (reepeat){
if (runif(1)<.5) x=rexp(1,a) else
x=rexp(1,b/(p+1))^(1/(p+1))
reepeat=(runif(1)>(a+b*x^p)*exp(-a*x-b*x^(p+1)/(p+1))/
(a*exp(-a*x)+b*x^p*exp(-b*x^(p+1)/(p+1))))}
return(x)}
dan untuk sampel-n:
simuF <- function(n,a,b,p){
sampl=NULL
while (length(sampl)<n){
x=u=sample(0:1,n,rep=TRUE)
x[u==0]=rexp(sum(u==0),b/(p+1))^(1/(p+1))
x[u==1]=rexp(sum(u==1),a)
sampl=c(sampl,x[runif(n)<(a+b*x^p)*exp(-a*x-b*x^(p+1)/(p+1))/
(a*exp(-a*x)+b*x^p*exp(-b*x^(p+1)/(p+1)))])
}
return(sampl[1:n])}
Berikut ini adalah ilustrasi untuk a = 1, b = 2, p = 3: