我希望创建一个数据点向量,平均值为50,标准差为1.然后,我希望再次创建第二个数据点向量,平均值为50,标准差为1,与第一个向量的相关性为0.3。数据点的数量并不重要,但理想情况下我会有100个。
Generating two correlated random vectors中提到的方法没有回答我的问题,因为(由于随机抽样)SD和均值偏离了所需的数字太多。
答案 0 :(得分:1)
我找到了一个方法,虽然它很难看。我仍然会欢迎一个答案,详细说明了一种更优雅的方法来获得我想要的东西。
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。
答案 1 :(得分:0)
你可以一起创建两个向量...我不明白你单独定义它们的原因。这是多变量分布的概念(只是为了确保我们有相同的术语)...... 无论如何,我猜你几乎已经在我所谓的最简单的方法那样做了:
方法1:
使用matlab函数mvnrnd [请记住,mvnrnd使用可以根据相关性和方差计算的协方差矩阵)
方法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)
有关)我不明白你必须这样做的原因。请参阅主题&#34;从分布中绘制值&#34;在维基百科Multivariate normal distribution。