从自定义分发生成随机数

Sim*_*ann 2 random r distribution

我试图从自定义分布中生成随机数,我已经发现了这个问题: 从(任意)连续概率分布模拟, 但不幸的是它没有帮助我,因为方法建议需要分配函数的公式.我的分布是多个均匀分布的组合,基本上分布函数看起来像直方图.一个例子是:

f(x) = { 
    0     for  x < 1
    0.5   for  1 <= x < 2
    0.25  for  2 <= x < 4
    0     for  4 <= x
}
Run Code Online (Sandbox Code Playgroud)

李哲源*_*李哲源 5

你只需要逆CDF方法:

samplef <- function (n) {
  x <- runif(n)
  ifelse(x < 0.5, 2 * x + 1, 4 * x)
  }
Run Code Online (Sandbox Code Playgroud)

自己计算CDF以验证:

F(x) = 0                 x < 1
       0.5 * x - 0.5     1 < x < 2
       0.25 * x          2 < x < 4
       1                 x > 4
Run Code Online (Sandbox Code Playgroud)

所以它的逆是:

invF(x) = 2 * x + 1      0 < x < 0.5
          4 * x          0.5 < x < 1
Run Code Online (Sandbox Code Playgroud)