我想生成两个具有指定相关性的随机向量。第二个向量的每个元素必须与第一个向量的相应元素相关并且独立于其他元素。
我怎么能在MATLAB中做到这一点?
顺便说一下,第一个向量的元素不具有相同的分布,我的意思是第一个向量的每个元素应该有不同的方差。 (向量由7个变量组成,具有不同的方差。
答案 0 :(得分:3)
如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);
答案 1 :(得分: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),:);