Có một chút phức tạp nếu giải quyết trực tiếp bằng cách chấp nhận từ chối. Đầu tiên, một sự khác biệt đơn giản cho thấy pdf của phân phối là
Thứ hai, vì
chúng ta có giới hạn trên
Thứ ba, xem xét thuật ngữ thứ hai trong , hãy thay đổi biến , tức là . Sau đó
là Jacobian của sự thay đổi của biến. Nếuf(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
Xcó mật độ có dạng trong đó là hằng số chuẩn hóa, sau đó có mật độ
có nghĩa là (i) là được phân phối dưới dạng biến thiên theo hàm mũ và (ii) hằng số bằng một. Do đó, cuối cùng bằng với hỗn hợp có trọng số bằng nhau của phân bố lũy thừa và công suất của lũy thừaκ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))phân phối, modulo một hằng số nhân thiếu của để tính các trọng số:
Và rất đơn giản để mô phỏng như một hỗn hợp.2f(x)≤g(x)=2(12ae−ax+12bxpe−bxp+1/(p+1))
g
Do đó, kết xuất R của thuật toán chấp nhận từ chối
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)}
và cho một mẫu 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])}
Đây là một minh họa cho a = 1, b = 2, p = 3: