【问题标题】:How can I generate correlated data in MATLAB, with a prespecified SD and mean?如何在 MATLAB 中生成具有预先指定的 SD 和均值的相关数据?
【发布时间】:2014-03-24 19:16:09
【问题描述】:

我希望创建一个平均值为 50、标准差为 1 的数据点向量。然后,我希望再次创建第二个数据点向量,平均值为 50、标准差为 1,并且与第一个向量的相关性为 0.3。数据点的数量并不重要,但理想情况下我应该有 100 个。

Generating two correlated random vectors 中提到的方法没有回答我的问题,因为(由于随机抽样)SD 和意味着与所需数字的偏差太大。

【问题讨论】:

    标签: matlab


    【解决方案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。

    【讨论】:

      【解决方案2】:

      您可以同时创建两个向量...我不明白您分别定义它们的原因。这是多元分布的概念(只是为了确保我们有相同的行话)...... 无论如何,我想你几乎已经掌握了我所说的最简单的方法:

      方法一:

      使用matlab函数mvnrnd【记住mvnrnd使用的协方差矩阵可以从相关性和方差中计算出来)

      方法二:

      我不太确定,但我认为这与您正在做的事情非常接近(实际上我的怀疑与if (corr(x,y) &lt; 0.301 &amp; corr(x,y) &gt; 0.299) &amp; (std(x) &lt; 1.01 &amp; std(x) &gt; 0.99) &amp; (std(y) &lt; 1.01 &amp; std(y) &gt; 0.99) 有关)我不明白您必须这样做的原因。请参阅 wikipedia Multivariate normal distribution 中的主题“从分布中提取值”。

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 1970-01-01
        • 2013-05-08
        • 2020-01-16
        • 2017-03-09
        • 1970-01-01
        • 2015-09-14
        • 2014-07-01
        相关资源
        最近更新 更多