R
找到一種方法來模擬這個分佈的隨機數
我正在嘗試在 R 中編寫一個程序,該程序模擬具有累積分佈函數的分佈中的偽隨機數:
F(x)=1−exp(−ax−bp+1xp+1),x≥0
在哪裡 a,b>0,p∈(0,1)
我嘗試了逆變換採樣,但逆變換似乎無法解析解。如果您能提出解決此問題的方法,我會很高興
這個練習有一個簡單的(如果我可以補充的話,優雅的)解決方案:因為 1−F(x) 看起來像兩個生存分佈的乘積: $$ (1-F(x))=\exp\left{-ax-\frac{b}{p+1}x^{p+1}\right}=\underbrace{\exp\left{-ax\right}}{1-F_1(x)}\underbrace{\exp\left{-\frac{b}{p+1}x^{p+1}\right}}{1-F_2(x)} 分佈$F$是分佈
X=\min{X_1,X_2}\qquad X_1\sim F_1,,X_2\sim F_2 $$ 在這種情況下 F1 是指數 E(a) 分佈和 F2 是個 1/(p+1) - 指數的冪 E(b/(p+1)) 分配。相關的 R 代碼非常簡單
x=pmin(rexp(n,a),rexp(n,b/(p+1))^(1/(p+1))) #simulating an n-sample
它絕對比反pdf和accept-reject分辨率快得多:
> n=1e6 > system.time(results <- Vectorize(simulate,"prob")(runif(n))) utilisateur système écoulé 89.060 0.072 89.124 > system.time(x <- simuF(n,1,2,3)) utilisateur système écoulé 1.080 0.020 1.103 > system.time(x <- pmin(rexp(n,a),rexp(n,b/(p+1))^(1/(p+1)))) utilisateur système écoulé 0.160 0.000 0.163
毫不奇怪的完美契合: