【问题标题】:how to generate pseudo-random positive definite matrix with constraints on the off-diagonal elements? [duplicate]如何生成对非对角元素有约束的伪随机正定矩阵? [复制]
【发布时间】:2010-11-05 11:00:42
【问题描述】:

可能重复:
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 之间的相关性。

谢谢。

【问题讨论】:

  • 你的意思是伪随机,这是 semi random 的正确术语
  • 好点,但我认为他的意思是半伪随机(在谈论计算机随机性时假定伪:-p)
  • 谢谢你们,我已经更新了问题; semi 指的是相关性的界限
  • “相关”是指“协方差”吗?
  • 不,我真的是说相关性。我想生成一个正定矩阵,使得所有相关性都比平凡的界限更紧密。

标签: math statistics matrix linear-algebra


【解决方案1】:

这里有很多问题。

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

接下来,在给定协方差矩阵的情况下,生成伪随机正态偏差相当简单。生成标准正态(独立)偏差,然后通过乘以协方差矩阵的 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 的最小扰动,使得得到的协方差(或相关)矩阵具有所需的属性。)

【讨论】:

    【解决方案2】:

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

    查看正定矩阵 (http://en.wikipedia.org/wiki/Positive-definite_matrix) 的表征,我认为最实惠的方法之一可能是使用 Sylvester 标准。

    您可以从一个具有正行列式的简单 1x1 随机矩阵开始,然后逐步将其扩展为一行和一列,同时确保新矩阵也具有正行列式(如何实现取决于您 ^_^) .

    【讨论】:

    • Fortran,那只会生成一个正定矩阵,不是吗?但是您如何确保所有相关性都在 .7 和 .9 之间?
    • Hmmmmmmmmmm...好点,我没有考虑第二个前提:-s如果我能想象一个解决方案,我会更新答案,如果不是我会删除它因为太没用了
    【解决方案3】:

    木工

    “首先,伪随机偏差是否假定为正态分布?”

    是的。

    “也许问题在于用户坚持生成的随机偏差矩阵必须在指定范围内具有相关性。”

    是的,这就是全部的困难

    “您必须认识到,一组随机数只会有渐近意义上的所需分布参数。”

    没错,但这不是这里的问题:无论样本大小如何,您的策略都适用于 p=2,但对于 p>2 无效。

    “如果您希望相关性必须始终大于 -0.188,那么这种抽样技术就失败了,因为数字是伪随机的。事实上,除非您的样本量,否则该目标将很难实现足够大。”

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

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

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

    “计算相关性。如果它们不在适当的范围内,则确定需要对数据的实际(测量的)协方差矩阵进行的扰动,以便相关性符合要求。”

    同上

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

    拜托,一定有更简单的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2023-04-01
      • 2019-02-09
      • 2015-01-12
      • 1970-01-01
      相关资源
      最近更新 更多