【发布时间】:2014-03-24 19:16:09
【问题描述】:
我希望创建一个平均值为 50、标准差为 1 的数据点向量。然后,我希望再次创建第二个数据点向量,平均值为 50、标准差为 1,并且与第一个向量的相关性为 0.3。数据点的数量并不重要,但理想情况下我应该有 100 个。
Generating two correlated random vectors 中提到的方法没有回答我的问题,因为(由于随机抽样)SD 和意味着与所需数字的偏差太大。
【问题讨论】:
标签: matlab
我希望创建一个平均值为 50、标准差为 1 的数据点向量。然后,我希望再次创建第二个数据点向量,平均值为 50、标准差为 1,并且与第一个向量的相关性为 0.3。数据点的数量并不重要,但理想情况下我应该有 100 个。
Generating two correlated random vectors 中提到的方法没有回答我的问题,因为(由于随机抽样)SD 和意味着与所需数字的偏差太大。
【问题讨论】:
标签: matlab
我想出了一个办法,虽然很丑。我仍然欢迎详细说明获得我想要的更优雅方法的答案。
z = 0;
while z < 1
mu = 50
sigma = 1
M = mu + sigma*randn(100,2);
R = [1 0.3; 0.3 1];
L = chol(R)
M = M*L;
x = M(:,1);
y = M(:,2);
if (corr(x,y) < 0.301 & corr(x,y) > 0.299) & (std(x) < 1.01 & std(x) > 0.99) & (std(y) < 1.01 & std(y) > 0.99);
z = 1;
end
end
然后我计算了向量 y 的平均值,并计算了它比 50 高多少。然后我从向量 y 中的每个元素中减去该数字,使平均值减少到 50。
【讨论】:
您可以同时创建两个向量...我不明白您分别定义它们的原因。这是多元分布的概念(只是为了确保我们有相同的行话)...... 无论如何,我想你几乎已经掌握了我所说的最简单的方法:
方法一:
使用matlab函数mvnrnd【记住mvnrnd使用的协方差矩阵可以从相关性和方差中计算出来)
方法二:
我不太确定,但我认为这与您正在做的事情非常接近(实际上我的怀疑与if (corr(x,y) < 0.301 & corr(x,y) > 0.299) & (std(x) < 1.01 & std(x) > 0.99) & (std(y) < 1.01 & std(y) > 0.99) 有关)我不明白您必须这样做的原因。请参阅 wikipedia Multivariate normal distribution 中的主题“从分布中提取值”。
【讨论】: