如何从均匀分布的数字中获得“V 形”分布的随机数?

机器算法验证 分布 数据转换 随机生成
2022-04-05 18:35:34

我有 1000 个均匀分布的随机数。如何操作它们以获得 V 形直方图?

4个回答

搜索“变换方法”或“逆变换方法”,这是一种生成具有任意分布的随机数的方法。你会发现很多讲义描述了这个想法。这是维基百科页面:逆变换采样它在底部有更详细资源的链接。

基本结果是这个配方:如果你需要一些分布D, 然后

  1. 找到它的 CDF 并将其反转。
  2. 生成 0 到 1 之间的均匀分布的随机数
  3. 用逆 CDF 变换这些数字以获得根据D

不能对每个分布进行分析计算。对于您的发行版,它可以。如果“V”的域是[1,1],那么 PDF 是|x|, CDF 是(1+sign(x)x2)/2, 逆 CDF 将是

sign(2x1)|12x|

例如,在 Mathematica

如果XY是独立的均匀分布的随机变量[0,1], 然后X+Y具有金字塔或“倒 V”形分布[0,2].

要将这个金字塔变成 V 形,我们需要做的就是交换分布的两半。

因此,给定独立X,YU(0,1), 让

Z={X+Yif X+Y<1X+Y2otherwise.

随机变量Z然后将具有您想要的 V 形分布[1,1].

这实际上应该是上述答案下方的评论。但由于我没有足够的声誉发表此评论,我将在此处发布。在您最初询问如何在“excel”中执行此操作的问题中。应该这样做,

=SIGN(2*RAND()-1)*(ABS(1-2*RAND()))^0.5

对上一个答案的一个有趣说明是,如果您使用一个均匀随机变量(两者相同)来生成 V 形分布或两个(对于符号函数和abs 函数)。

你确实想使用UUniform(0,1). 您正在寻找一种叫做概率积分变换 (PIT) 的东西。

如果XF然后,F(X)Uniform(0,1). 因此,首先您将找到您感兴趣的发行版的 CDF,然后您将进行转换。例如,如果你想f(x)=|x|,x(1,1), 积分得到F(x)=P(Xx)={x22+12x0x22+12x>0. 然后,F1(u)F