生成两个相关的随机向量

问题描述 投票:2回答:2

我想生成两个具有指定相关性的随机向量。第二矢量的每个元素必须与第一矢量的对应元素相关并且独立于其他元素。

我怎么能在MATLAB中做到这一点?

顺便说一下,第一个向量的元素不具有相同的分布,我的意思是第一个向量的每个元素应该具有不同的方差。 (向量由7个变量组成,具有不同的方差。

matlab correlation
2个回答
3
投票

this Mathworks article中所述,您可以执行以下操作:

  1. 生成两个随机向量(即具有两列的随机矩阵)。假设您希望矩阵中每个元素的分布为高斯分布,零均值和单位方差: N = 1000; %// Number of samples in each vector M = randn(N, 2); 您显然可以根据自己的喜好使用任何发行版。
  2. 现在的诀窍是:将矩阵与通过所需相关矩阵R的Cholesky分解得到的上三角矩阵相乘: R = [1 0.75; 0.75 1]; %// Our correlation matrix, taken from the article M = M * chol(R);
  3. 从修改后的矩阵M中提取随机向量: x = M(:, 1); y = M(:, 2);

0
投票

如果存在具有相同相关性的变量,则cholasky分解可能会失败。所以使用SVD。我是这样做的。 mu是具有正态分布的目标随机变量的均值的向量。 Sigma是所需的协方差矩阵。 n是所需随机变量的长度,d是随机变量的数量

mu=mu(:)';
[U S V]=svd(Sigma);
S=round(S*1e6)/1e6;
S=sqrt(S);   
s=randn(n, d) * S * U'+mu(ones(n,1),:);
© www.soinside.com 2019 - 2024. All rights reserved.