【问题标题】:How can I have a positive covariance between two variables in matlab?如何在 matlab 中的两个变量之间获得正协方差?
【发布时间】:2020-09-22 21:19:43
【问题描述】:

我想绘制一个两个变量函数的图,但是这个函数有一些我需要最初计算的参数。具体来说,这些参数是两个随机变量,它们遵循双变量正态分布并且它们是相关的。出于我的目的,我需要的是这两个变量之间的正协方差。有没有机会我可以制作一个循环或任何东西来获得一个积极的协方差?我的努力如下

X=normrnd(3,0.25,2);
Y=normrnd(9,0.4,2);
covar=cov(X,Y);

但是协方差是负的,我需要多次找出存在正的情况。当然我可以改变平均值和标准差,但我想要更稳定的东西,这将保持协方差的积极性并提供我的工作。我想到了命令exprnd(mu,sz),但它并没有解决我的问题。

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

    您可以使用内置的 matlab 函数 mvnrnd(多元正态随机数)来生成这些数据。这个功能非常有用。

    mu = [0, 0];               % means of the distributions samples are drawn from
    sigma = [1, 0.6; 0.6, 1];  % covariance of distributions (eye(2) for uncorrelated)
    n = 25
    
    [bivariate_data] = mvnrnd(mu, sigma, n);
    

    https://www.mathworks.com/help/stats/mvnrnd.html#d122e544190

    编辑:

    Sigma 是一个协方差矩阵,其中对角线是每个分布的方差,非对角线是两个分布之间的协方差(即 [var(variable1), covar(variable1, variable2), var(variable2); covar (变量 1,变量 2)。

    您可以在 matlab 中检查这一点,因为非对角线必须相同,但对角线不必相同。因此,2x2 单位矩阵(matlab 中的 eye(2))[1, 0; 0, 1] 指定具有相等方差和零协方差的两个分布。或者,ones(2) 将是最大协方差。如果您尝试指定 [1, 2; 会发生什么,这很有趣。 2, 1],一些进一步的讨论可以找到https://stats.stackexchange.com/questions/69114/why-does-correlation-matrix-need-to-be-positive-semi-definite-and-what-does-it-m/69117

    【讨论】:

    • 您所说的“分布的协方差(eye(2) 表示不相关)”是什么意思?
    • 非常感谢!我会看到的,如果我还有什么要问的,我会告诉你的!
    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多