我怎样才能在matlab中的两个变量之间有正协方差?

How can I have a positive covariance between two variables in matlab?

我想画一个二元函数的图,但是这个函数有一些参数需要我先计算。具体来说,这些参数是两个随机变量,它们服从双变量正态分布并且它们是相关的。为了我的目的,我需要的是这两个变量之间的积极协方差。有没有机会我可以做一个循环或任何东西来总是获得一个 pistive 协方差?我的努力如下

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

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

您可以使用 built-in matlab 函数 mvnrnd (mulivariate-normal-random numbers) 来生成这些数据。这个功能派上用场了。

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 是协方差矩阵,其中对角线是每个分布的方差,off-diagonals 是两个分布之间的协方差(即 [var(variable1), covar(variable1, variable2), var( variable2); covar(variable1, variable2).

您可以在 matlab 中进行检查,因为 off-diagonals 必须相同,但对角线不必相同。因此 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