目标
我想从java中指定correlation coefficient的双变量均匀分布中进行抽样。
问题
或
到目前为止我得到了什么
R中的包mvtnorm允许从具有指定相关系数的多元正态分布中进行采样。我认为理解他们的方法可以通过做一些类似于均匀分布的事情或者通过重复他们的工作并使用copulas将多变量法线转换为多变量均匀来帮助我(就像我在R there中所做的那样)。
源代码是用Fortran编写的,我不会说Fortran!代码基于this paper by Genz and Bretz,但对我来说太重了。
答案 0 :(得分:0)
我有个主意。通常,您通过生成32个随机位并除以2 32 来生成U(0,1),然后返回一个浮点数。对于两个U(0,1),您生成两个32位值,除以两个浮点数。到现在为止还挺好。这种双变量发生器是不相关的,非常容易检查等等。
假设您按照以下方式构建双变量生成器。在里面,你得到两个随机的32位整数,然后生成两个带共享部分的U(0,1)。比如说,你从第一个整数获取24位,第二个整数取24位,但是对于这两个整数,上部(或更低,或中间,或......)8位是相同的(取自第一个整数并复制到第二个整数)。 p> 显然,那两个U(0,1)将是相关的。我们可以把它们写成
U(0,1) 0 = a 0 + b
U(0,1) 1 = a 1 + b
为了简单起见,我省略了一些系数等。每一个都是U(0,1),平均值为1/2,方差为1/12。现在你必须将Pearson相关性计算为r =(E [U(0,1) 0 U(0,1) 1 ] - 1/4)/ sqrt(1/12)< SUP> 2
使用上面的扩展应该很容易在一些代数之后计算r
并与你想要的比较。您可以改变相关部分b
的大小,以及它的位置(高位,低位,中间的某个位置)以适合所需的r
。
实际上,应该有无限的可能性来获得相同的r
但不同的采样代码和不同的双变量分布。您可能希望将来添加更多约束