如何生成对非对角线元素进行约束的伪随机正定矩阵? [复制]

2024-02-01

可能的重复:
如何生成对非对角线元素进行约束的伪随机正定矩阵? https://stackoverflow.com/questions/1040324/how-to-generate-pseudo-random-positive-definite-matrix-with-constraints-on-the-of

用户希望对 var/covar 矩阵中每对变量之间的相关性施加唯一的、重要的上/下界。

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

Thanks.


这里有很多问题。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成对非对角线元素进行约束的伪随机正定矩阵? [复制] 的相关文章

  • C# SqlDataReader 执行统计信息和信息

    我正在创建一个自动数据库查询执行队列 这本质上意味着我正在创建一个 SQL 查询队列 这些查询将被一一执行 使用类似于以下的代码执行查询 using SqlConnection cn new SqlConnection Configurat
  • Numpy 中矩阵乘以另一个矩阵的每一行

    我有一个大小为 4x4 的齐次变换矩阵和一个大小为 nx3 的轨迹 该轨迹的每一行都是一个向量 我想将齐次变换矩阵乘以轨迹的每一行 下面是代码 append zero column at last trajectory np hstack
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • R 中 if-else 中的逻辑运算符

    我有一个名为 mat 的下表 5 列和 3 行 AC CA RES 1 0 2 2 1 3 0 0 0 1 正在执行的操作是mat 1 mat 1 mat 2 我正在测试以下内容 1 如果一行的两列都为零 则结果应为 NA 2 如果一行中只
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i
  • 如何使用NSDecimalNumber?

    我正在构建一个需要对金钱进行计算的应用程序 我想知道如何正确使用 NSDecimalNumber 特别是如何从整数 浮点数和双精度数初始化它 我只发现它很容易使用 decimalNumberWithString 方法 这 initWith
  • 将 (-inf...+inf) 范围内的任何值标准化为 (0...1)。是否可以?

    如果我们有具体的 max min 值范围 那么很容易将其标准化为 0 1 浮点值 但如果我们没有具体的限制呢 是否可以构建输出介于 0 和 1 之间的通用函数 在我看来 我认为这是不可能的 但我不是数学专家 我正在寻找 JavaScript
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代
  • 如何将数学公式转换为Python代码?

    有没有简单的方法可以将数学公式转换为 Python 代码 也许是译者 网络参考 具体的书籍章节 任何东西 对于正则表达式 有诸如Kodos http kodos sourceforge net 和网站 例如pythonregex com h
  • 使用 BigQuery 结合 WHERE 子句查找标准差结果的异常值

    标准差分析是查找异常值的有效方法 有没有办法合并此查询的结果 找到远离平均值的第四个标准差的值 SELECT AVG weight pounds STDDEV weight pounds 4 as high FROM publicdata
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • CUDA 添加矩阵的行

    我试图将 4800x9600 矩阵的行加在一起 得到一个 1x9600 的矩阵 我所做的是将 4800x9600 分成 9 600 个矩阵 每个矩阵长度为 4800 然后我对 4800 个元素进行缩减 问题是 这真的很慢 有人有什么建议吗
  • 模行为背后的数学

    Preamble 这个问题与 P RNG 的行为无关rand 它是关于使用均匀分布的两个值的幂对模 介绍 我知道不应该使用模数 将一个值从一个范围转换为另一个范围 例如从 0 到 5 之间的值rand 功能 会有偏差 这里解释了https
  • 有条件地为 R 中置信带之外的数据点着色

    我需要对下图中置信带之外的数据点与带内的数据点进行不同的着色 我是否应该在数据集中添加一个单独的列来记录数据点是否在置信区间内 您能举个例子吗 示例数据集 Dataset from http www apsnet org education
  • 如何对“2-1”这样的字符串进行数学计算以产生“1”?

    我只是想知道 PHP 是否有一个函数可以接受像这样的字符串2 1并产生它的算术结果 或者我必须手动执行此操作explode 获取算术运算符左侧和右侧的值 我知道这个问题很老了 但我昨晚在寻找不太相关的东西时遇到了它 而且这里的每个答案都很糟

随机推荐