将均匀分布转换为肥尾分布

Converting a Uniform Distribution to a Fat-tailed Distribution

提问人:hotpaw2 提问时间:12/30/2018 最后编辑:hotpaw2 更新时间:12/31/2018 访问量:706

问:

前面的 SO 问题涉及将均匀分布转换为正态分布。

对于蒙特卡洛模拟,我不仅需要正态(高斯),还需要一些计算效率高的方法,使用给定的(64 位或双精度)均匀 RNG 作为输入,从“肥尾”或重尾分布中生成大量样本。这些分布的示例包括:对数正态分布、Pareto分布、Student-T 分布和 Cauchy分布。

使用逆 CDF 是可以接受的,因为根据需要计算逆 CDF 的计算效率很高。

该标签适用于与语言无关的算法,但所需的实现适用于基本过程编程语言(C、Basic、过程 Swift、Python et.al)。

算法 随机 统计 语言无关的 分布

评论

1赞 samgak 12/30/2018
如何生成柯西随机变量
0赞 rici 12/30/2018
这是几本书的主题,因此,我认为,这是“过于宽泛”的经典案例。这是斯德哥尔摩大学《实验主义者统计分布手册》的克里斯蒂安·沃尔克(Christian Walck)的一本书。
0赞 pjs 12/31/2018
我同意@rici。这里和这里是 Luc Devroye 在 1986 年写的(相当大的)文本的链接。它包含多种算法,可以从各种各样的分布中生成,任您选择。
0赞 hotpaw2 12/31/2018
优秀的来源。但是,我注意到,对于我询问的 4 个发行版,这些文本描述了合理的算法,这些算法很容易放入 stackoverflow 答案框。
1赞 rici 12/31/2018
@hotpaw2:如果你问过一个发行版,很好。但你说,“例子包括......等人“,这需要更广泛的回应。

答:

1赞 Peter O. 12/30/2018 #1

柯西随机数可以表示为:

scale * tan(pi * (RNDU01OneExc()-0.5)) + mu

其中 是 [0, 1) 中的随机数,和 分别是偏移量和小数位数。RNDU01OneExc()muscale

对数正态随机数可以表示为 ,其中 是具有均值和标准差的正态分布随机数。exp(Normal(mu, sigma))Normal(mu, sigma)musigma

这些和其他类型的分布在我关于随机数生成和采样的文章中提到过。