如何从康托分布中采样?

机器算法验证 分布 模拟 随机生成
2022-02-15 02:49:05

从康托尔分布中取样的最佳方法是什么?它只有 cdf,我们不能反转它。

1个回答

简单:制服样本(0,1)从二进制分发和重新编码到三进制,将每个“1”解释为“2”。(这是逆概率变换方法:它确实反转了 CDF!)

数字

这是一个R实现,其编写方式应该可以轻松移植到几乎任何计算环境。

binary.to.ternary <- function(x) {
  y <- 0
  x <- round(2^52 * x)
  for (i in 1:52) {
    y <- y + 2*(x %% 2)
    y <- y/3
    x <- floor(x/2)
  }
  y
}

n <- 1000
x <- runif(n)
y <- binary.to.ternary(x)
plot(ecdf(y), pch=".")