Существует несколько запутанная, если прямое решение путем принятия-отклонения. Во-первых, простое дифференцирование показывает, что pdf распределения - это
Во-вторых, так как
у нас есть верхняя граница
третьих, учитывая второе слагаемое в , возьмем замену переменной , т. е. . Тогда
является якобианом изменения переменной. Еслие( х ) = ( а + б хп) опыт{ - а х - бр + 1Икср + 1}
е( х ) = а е- хе- б хр + 1/ (р+1)≤ 1+ б хпе- б хр + 1/ (р+1)е- х≤ 1
е( х ) ≤ г( х ) = а е- х+ б хпе- б хр + 1/ (р+1)
граммξ= хр + 1х = ξ1 / ( р + 1 )д хд ξ= 1р + 1ξ1р + 1- 1= 1р + 1ξ- рр + 1
Иксимеет плотность вида где - нормализующая константа, тогда имеет плотность
что означает , что (я) является распределяется как экспоненциальная переменная и (ii) константа равна единице. Следовательно, оказывается равным взвешенной смеси экспоненциального распределения и -й степени экспоненциальногоκ b xпе- б хр + 1/ (р+1)κΞ = X1 / ( р + 1 )κ b ξпр + 1е- b ξ/ (р+1)1р + 1ξ- рр + 1= κ бр + 1е- b ξ/ (р+1)
ΞЕ(b/(p+1))κg(x)E( а )1 / ( р + 1 )Е( б/ ( р + 1 ) )распределение, по модулю отсутствующей мультипликативной константы для учета весов:
И легко смоделировать как смесь.2е(х ) ≤ г( х ) = 2 ( 12е- ах+ 12б хпе- бхр + 1/ (р+1))
грамм
Таким образом, 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: