如何生成具有约束非对角元素的伪随机正定矩阵?

时间:2009-06-24 09:32:58

标签: math statistics matrix linear-algebra

  

可能重复:
  how to generate pseudo-random positive definite matrix with constraints on the off-diagonal elements?

用户想要对var / covar矩阵中每对变量之间的相关性施加一个独特的,非平凡的上/下界限。

例如:我想要一个方差矩阵,其中所有变量都有0.9 > |rho(x_i,x_j)| > 0.6rho(x_i,x_j)是变量x_ix_j之间的相关性。

感谢。

3 个答案:

答案 0 :(得分:4)

这里有很多问题。

首先,伪随机偏差假设是正态分布的吗?我会假设它们是,因为如果我们分歧到非正态分布,任何关于相关矩阵的讨论都会变得讨厌。

接下来,给定协方差矩阵,生成伪随机正态偏差相当简单。生成标准正态(独立)偏差,然后乘以协方差矩阵的Cholesky因子进行变换。如果平均值不为零,则在末尾添加均值。

并且,给定相关矩阵,协方差矩阵也很容易生成。只是前后相关矩阵乘以由标准偏差组成的对角矩阵。这将相关矩阵缩放为协方差矩阵。

我仍然不确定这个问题在哪里,因为生成“随机”相关矩阵似乎很容易,元素均匀分布在所需范围内。

所有上述内容在任何合理的标准中都是微不足道的,并且鉴于上述信息,有很多工具可以生成伪随机正态偏差。

也许问题是用户坚持认为所产生的偏差随机矩阵必须具有指定范围内的相关性。您必须认识到,一组随机数只能以渐近的方式获得所需的分布参数。因此,当样本大小变为无穷大时,您应该会看到指定的分布参数。但是,任何小样本集都不一定具有所需范围内的所需参数。

例如,(在MATLAB中)这里是一个简单的正定3x3矩阵。因此,它是一个非常好的协方差矩阵。

S = randn(3);
S = S'*S
S =
      0.78863      0.01123     -0.27879
      0.01123       4.9316       3.5732
     -0.27879       3.5732       2.7872

我会将S转换为相关矩阵。

s = sqrt(diag(S));

C = diag(1./s)*S*diag(1./s)
C =
            1    0.0056945     -0.18804
    0.0056945            1      0.96377
     -0.18804      0.96377            1

现在,我可以使用统计工具箱从正态分布中进行采样(mvnrnd应该这样做。)使用Cholesky因子很容易。

L = chol(S)
L =
      0.88805     0.012646     -0.31394
            0       2.2207       1.6108
            0            0      0.30643

现在,生成伪随机偏差,然后根据需要进行变换。

X = randn(20,3)*L;

cov(X)
ans =
      0.79069     -0.14297     -0.45032
     -0.14297       6.0607       4.5459
     -0.45032       4.5459       3.6549

corr(X)
ans =
            1     -0.06531      -0.2649
     -0.06531            1      0.96587
      -0.2649      0.96587            1

如果您希望相关性必须始终大于-0.188,则此采样技术失败,因为数字是伪随机的。事实上,除非你的样本量足够大,否则这个目标将很难实现。

您可以使用简单的拒绝方案,然后进行采样,然后重复重复采样,直到样本具有所需的属性,并且相关性在所需的范围内。这可能会很累人。

可能有效的方法(但我此时并未完全考虑过的方法)是使用上述标准方案生成随机样本。计算相关性。我们未能在适当的范围内,然后确定需要对数据的实际(测量的)协方差矩阵进行的扰动,以便相关性符合要求。现在,找到对您的采样数据进行零均值随机扰动,以便将样本协方差矩阵移动到所需方向。

这可能有用,但除非我知道这实际上是手头的问题,否则我不会再费心去深入了解它。 (编辑:我更多地考虑了这个问题,并且它似乎是一个二次规划问题,带有二次约束,找到矩阵X的最小扰动,这样得到的协方差(或相关)矩阵具有所需的属性。)

答案 1 :(得分:0)

这不是一个完整的答案,而是一个可能的建设性方法的建议:

观察正定矩阵(http://en.wikipedia.org/wiki/Positive-definite_matrix)的特征,我认为最经济的方法之一就是使用西尔维斯特准则。

你可以从一个带有正决定因素的普通1x1随机矩阵开始,然后逐步扩展到一行和一列,同时确保新矩阵也有一个正决定因素(如何实现这一点取决于你^ _ ^)

答案 2 :(得分:0)

Woodship,

“首先,假设伪随机偏差是正态分布的吗?”

“也许问题是用户坚持认为所产生的偏差随机矩阵必须具有指定范围内的相关性。”

是的,这就是整个难度

“你必须认识到一组随机数只能在渐近的意义上得到所需的分布参数。”

是的,但这不是问题:您的策略适用于p = 2,但无论样本大小如何,p> 2都会失败。

“如果你的愿望是相关性必须总是大于-0.188,那么这种抽样方法就失败了,因为这些数字是伪随机的。事实上,除非你的样本量大,否则这个目标将是难以实现的。足够大了。“

样本数量问题b / c,p> 2,你甚至没有观察到相关性的正确范围收敛,因为样本量增长:我试过你之前建议的技术在这里张贴,显然是有缺陷的。

“您可以使用简单的拒绝方案,然后进行采样,然后重复进行重复,直到样本具有所需的属性,并且相关性在所需的范围内。这可能会很累。”

不是一个选项,对于p大(比如说大于10),这个选项是难以处理的。

“计算相关性。我们未能在适当的范围内,然后确定需要对数据的实际(测量)协方差矩阵进行的扰动,以便相关性符合要求。”< / p>

同上

至于QP,我理解约束,但我不确定你定义目标函数的方式;通过使用一些初始矩阵的“最小扰动”,您将总是得到相同的(解)矩阵:所有非对角线条目将完全等于两个边界中的任何一个(例如,不是伪随机);再加上它有点矫枉过正了吗?

来吧,人们必须有更简单的事情