如何创建多元均匀分布?

Rem*_*i.b 5 java random statistics distribution

目标

我想从java 中具有指定相关系数的双变量均匀分布中进行采样。

问题

  • 我可以用什么方法来实现这样的多元均匀分布?

或者

  • 是否有一个现有的包可以实现这样的事情,这样我就不必重新发明轮子?

到目前为止我所得到的

R 中的包mvtnorm允许从具有指定相关系数的多元正态分布中进行采样。我认为理解他们的方法可能会帮助我,或者通过做一些与均匀分布类似的事情,或者通过重复他们的工作并使用联结函数将多元正态转换为多元均匀(就像我在 R 中所做的那样)。

源代码是用 Fortran 编写的,但我不会说 Fortran!该代码基于Genz 和 Bretz 的这篇论文,但对我来说数学太重了。

Sev*_*eux 0

我有个主意。通常,您可以通过生成 32 个随机位并除以 2 32来生成 U(0,1) ,返回一个浮点数。对于两个 U(0,1),您生成两个 32 位值,除以两个浮点数。到目前为止,一切都很好。这种双变量生成器是不相关的,非常容易检查等

假设您按照以下方式构建双变量生成器。在里面,你得到两个随机的 32 位整数,然后产生两个具有共享部分的 U(0,1)。比如说,您从第一个整数中获取 24 位,从第二个整数中获取 24 位,但是它们的上(或下、中、或...)8 位将是相同的(从第一个整数中获取并复制到第二个整数)。

显然,这两个 U(0,1) 是相关的。我们可以把它们写成

U(0,1) 0 = a 0 + b

U(0,1) 1 = a 1 + b

为了简单起见,我省略了一些系数等。每一个都是 U(0,1),均值为 1/2,方差为 1/12。现在您必须将皮尔逊相关性计算为

r = ( E[U(0,1) 0 U(0,1) 1 ] - 1/4 ) / sqrt(1/12) 2

r使用上面的扩展,经过一些代数计算并与您想要的进行比较应该很容易。您可以改变相关部分的大小b及其位置(高位、低位、中间某处)以适应所需的要求r

实际上,具有相同r但不同的采样代码和不同的双变量分布应该有无限的可能性。您将来可能想添加更多约束