我正在尝试从自定义分布生成随机数,我已经发现了这个问题: Simulate from an (arbitrary) continuous probability distribution 但不幸的是,它对我没有帮助,因为那里建议的方法需要分布函数的公式。我的分布是多个均匀分布的组合,基本上分布函数看起来像直方图。一个例子是:
f(x) = {
0 for x < 1
0.5 for 1 <= x < 2
0.25 for 2 <= x < 4
0 for 4 <= x
}
最佳答案
你只需要逆 CDF 方法:
samplef <- function (n) {
x <- runif(n)
ifelse(x < 0.5, 2 * x + 1, 4 * x)
}
自己计算 CDF 以验证:
F(x) = 0 x < 1
0.5 * x - 0.5 1 < x < 2
0.25 * x 2 < x < 4
1 x > 4
所以它的逆是:
invF(x) = 2 * x + 1 0 < x < 0.5
4 * x 0.5 < x < 1
关于r - 从自定义分布生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325459/