R-概率统计与模拟(四)拒绝抽样

本文介绍了拒绝抽样(Reject Sampling)。

前文《R-概率统计与模拟(三)变换均匀分布对特定分布进行抽样》介绍了通过“变换均匀分布”来对特定分布进行抽样的方法,但是该方法需要知道累积分布的解析表达式及其反函数,所以有一定的限制。

其实,我们最常接触的还是 p.d.f. \text{p.d.f.} p.d.f.,根据 p.d.f. \text{p.d.f.} p.d.f.抽样往往更直接。比如,均匀分布的 p.d.f. \text{p.d.f.} p.d.f.就很简单,对其抽样也很方便。但是,对于一些复杂的 p.d.f. \text{p.d.f.} p.d.f.,直接抽样是不可取的,需要用其它方法。拒绝抽样就是其中一种。

下文分为五个部分:

  1. 拒绝抽样简介
  2. 利用拒绝抽样方法对 Gamma \text{Gamma} Gamma分布抽样
  3. 如何利用rand7对rand10抽样
  4. 蓄水池抽样算法
  5. 对拒绝抽样的补充说明

拒绝抽样简介

所谓拒绝抽样,是针对一个已知 p.d.f. \text{p.d.f.} p.d.f.的概率分布进行抽样的方法。具体步骤如下:

  1. 假设我们要对一个分布进行随机抽样,已知其 p.d.f. \text{p.d.f.} p.d.f. p ( x ) p(x) p(x)
  2. p ( x ) p(x) p(x)可能比较复杂以至于直接抽样有困难,我们可以选择一个容易抽样的分布,假设该分布 p.d.f. \text{p.d.f.} p.d.f. q ( x ) q(x) q(x),再选择一个足够大的数 M M M,使得 M q ( x ) Mq(x) Mq(x)始终比 p ( x ) p(x) p(x)大。
  3. 根据 q ( x ) q(x) q(x)抽取一个值 x i x_i xi
  4. [ 0 , 1 ] [0,1] [0,1]均匀分布中抽取一个数 u i u_i ui,如果 u i < p ( x i ) M q ( x i ) , u_i < \frac{p(x_i)}{Mq(x_i)}, ui<Mq(xi)p(xi), 那么接受 x i x_i xi这个采样值,否则拒绝它。
  5. 重复第3步和第4步,知道采样的数量达到预定要求。

通过这些步骤获取到的采样值就是符合 p ( x ) p(x) p(x)分布的。需要注意的是 M M M的取值,如果 M M M过大,会导致抽样过程中被拒绝的点增多,降低采样点的接受率。事实上,我们可以证明采样点的接受率是 1 M \frac{1}{M} M1,所以 M M M的取值应该在保证 M q ( x ) > p ( x ) , ∀ x Mq(x) > p(x), \forall x Mq(x)>p(x),x的前提下尽可能得小。(相关的证明在文末。)
在这里插入图片描述
像上图一样, M M M的取值要保证 M q ( x ) > p ( x ) , ∀ x Mq(x) > p(x), \forall x Mq(x)>p(x),x

利用拒绝抽样方法对 Gamma \text{Gamma} Gamma分布抽样

上面的步骤比较抽象,我们举一个实际的例子来说明:我们怎么通过拒绝抽样的方法对 Gamma ( x , α , 1 ) \text{Gamma}(x, \alpha, 1) Gamma(x,α,1)进行抽样?
(选这个例子是因为它也用到了我们在前文提到的“变换均匀分布”的方法。)

我们对照上面的步骤一步一步来说:

  1. 我们知道,目标分布 Gamma ( x , α , 1 ) \text{Gamma}(x, \alpha, 1) Gamma(x,α,1) p.d.f. \text{p.d.f.} p.d.f.是:
    p ( x ) = e − x x α − 1 Γ ( α ) p(x) = \frac{e^{-x}x^{\alpha -1}}{\Gamma(\alpha)} p(x)=Γ(α)exxα1
  2. 显然 p ( x ) p(x) p(x)比较复杂,不易直接采样。我们选择一个较容易采样的分布,其 p.d.f. \text{p.d.f.} p.d.f.是:
    q ( x ) = λ α λ x λ − 1 ( α λ + x λ ) 2 , q(x) = \frac{\lambda \alpha^{\lambda} x^{\lambda-1}}{(\alpha^\lambda + x^\lambda)^2}, q(x)=(αλ+xλ)
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值