Існує дещо заплутане, якщо пряме вирішення шляхом прийняття-відхилення. По-перше, проста диференціація показує, що pdf розподілу
По-друге, оскільки
маємо верхню межу
Третій, розглядаючи другий член у , прийміть зміну змінної , тобто . Тоді
- якобіан зміни змінної. Якщоf(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
Xмає щільність форми де нормалізуюча константа, то має щільність
що означає, що (i) є розподілено у вигляді змінної Exponential і (ii) константа дорівнює одиниці. Отже, кінцевому підсумку дорівнює однаково зваженій суміші Експоненціального розподілу та -ої сили Експоненціальноїκ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))розподіл, по модулю відсутня мультиплікативна константа для обліку ваг:
І прямолінійно імітувати як суміш.2f(x)≤g(x)=2(12ae−ax+12bxpe−bxp+1/(p+1))
g
Таким чином, R відображення алгоритму прийняття-відхилення
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)}
і для 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])}
Ось ілюстрація для a = 1, b = 2, p = 3: