生成两个相关的随机向量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成两个相关的随机向量相关的知识,希望对你有一定的参考价值。
我想生成两个具有指定相关性的随机向量。第二矢量的每个元素必须与第一矢量的对应元素相关并且独立于其他元素。
我怎么能在MATLAB中做到这一点?
顺便说一下,第一个向量的元素不具有相同的分布,我的意思是第一个向量的每个元素应该具有不同的方差。 (向量由7个变量组成,具有不同的方差。
答案
如this Mathworks article中所述,您可以执行以下操作:
- 生成两个随机向量(即具有两列的随机矩阵)。假设您希望矩阵中每个元素的分布为高斯分布,零均值和单位方差:
N = 1000; %// Number of samples in each vector M = randn(N, 2);
您显然可以根据自己的喜好使用任何发行版。 - 现在的诀窍是:将矩阵与通过所需相关矩阵
R
的Cholesky分解得到的上三角矩阵相乘:R = [1 0.75; 0.75 1]; %// Our correlation matrix, taken from the article M = M * chol(R);
- 从修改后的矩阵
M
中提取随机向量:x = M(:, 1); y = M(:, 2);
另一答案
如果存在具有相同相关性的变量,则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),:);
以上是关于生成两个相关的随机向量的主要内容,如果未能解决你的问题,请参考以下文章