【问题标题】:Generating two correlated random vectors生成两个相关的随机向量
【发布时间】:2013-05-18 18:51:40
【问题描述】:

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

我如何在 MATLAB 中做到这一点?

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

【问题讨论】:

标签: matlab correlation


【解决方案1】:

如果存在具有相同相关性的变量,则 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),:);

【讨论】:

    【解决方案2】:

    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);
      

    【讨论】:

    • 你能把这个例子推广到非预定义的列数吗?
    • @Zizou23 最初的问题是关于两个相关向量,所以你问的是不同的。话虽如此,我很确定它可以解决。
    猜你喜欢
    • 2019-12-27
    • 2019-07-29
    • 1970-01-01
    • 2016-11-15
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    相关资源
    最近更新 更多