我想生成随机相关矩阵,其中R 为1000 * 1000,其中平均相关性(不包括对角线)为0.3。
我从库clusterGeneration查看genPositiveDefMat
,但我无法弄清楚如何指定给定的相关性。
答案 0 :(得分:0)
这种矩阵的一个无聊的例子是
C = (1-m)*I + m*U*U'
其中I是单位矩阵,U是所有1的向量,m = 0.3。 C是正定的,平均(实际上每个)非对角线元素是m。
因此我们可以尝试生成
形式的矩阵C = D + alpha*U*U'
其中D是对角线和正定,α是正定标器,U是'随机'矢量。这样的矩阵将是肯定的。为了得到关闭对角线元素的正确平均值,可以得到一个小代数
alpha = dim*(dim-1)*m / (S*S-T)
,其中
S = Sum{ i | U[i] }
T = Sum{ i | U[i]*U[i]}
只要U的所有元素都是正数,我们就会
S*S>T
因此alpha将是正面的。
对于C的对角元素为1.0,我们需要
D[i] = 1 - alpha*U[i]*U[i] (i=1..dim)
所有这些都必须是非负面的。
唉我从理论上找不到如何选择U的元素来保证这一点。然而,实验上,如果U的元素是1.0到5.0之间的均匀随机数,我没有看到任何D [i]都是负数的情况。
上述U,5.0元素的上限控制着各种相关性的差异。对于5.0,它们在大约0.03和0.8之间变化,whild的上限为2.0,它们在大约0.13和0.53之间变化。 选择上限太高会增加方法失败的可能性(D不是正数)。