Es gibt eine etwas verworrene, wenn direkte Auflösung durch Akzeptieren-Ablehnen. Zunächst zeigt eine einfache Unterscheidung, dass das PDF der Distribution
Zweitens, da
Wir haben die obere Schranke
drittes nehme man unter Berücksichtigung des zweiten Terms in die Änderung der Variablen , dh . Dann ist
ist der Jacobi der Variablenänderung. Wennf(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
Xhat eine Dichte der Form wobei die Normalisierungskonstante ist, dann ist hat die Dichte
was bedeutet, dass (i) ist verteilt als Exponential variate und (ii) die Konstante ist gleich eins. Daher ist gleich der gleichgewichteten Mischung einer Exponential -Verteilung und der -ten Potenz einer 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))Verteilung, modulo eine fehlende multiplikative Konstante von , um die Gewichte zu berücksichtigen:
Und ist einfach als Mischung zu simulieren.2f(x)≤g(x)=2(12ae−ax+12bxpe−bxp+1/(p+1))
g
Ein R-Rendering des Accept-Reject-Algorithmus liegt somit vor
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)}
und für eine n-Probe:
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])}
Hier ist eine Illustration für a = 1, b = 2, p = 3: