改变或缩放两个正态分布以具有特定的相关系数

change or scale two normal distribution to have specific correlation coefficient

本文关键字:关系 正态分布 缩放 两个 改变      更新时间:2023-10-16

所以,我的问题是,如果我们有两个正态分布的随机变量,例如如果n1(8,1(和n2(5,1(的rho = 0.2 我想更改 n1 和 n2 以使 rho = 0.8 或任何其他值。

如何在 C++ 中做到这一点?
是否有任何库、包或算法要实现?

任何帮助或意见将不胜感激。

问候

编辑:我修复了方程式。

如果我们假设x_1x_2分别分布在n1(8,1(和n2(5,1(中,相关rho。 然后,使用两个独立的n(0,1(变量w_1w_2,我们可以编写如下x_1x_2

x_1 = w_1 + 8,
x_2 = sqrt(1 - rho^2) * w_2 + rho * w_1 + 5.

另一方面,如果我们假设y_1y_2分布在相关rho'内的n1(8, 1(和n2(5,1(中,我们也可以写

y_1 = w_1 + 8,
y_2 = sqrt(1 - rho'^2) * w_2 + rho'* w_1 + 5.

因此,我们可以通过以下算法获得具有不同相关rho'的新联合分布:

y_1 = x_1,
y_2 = sqrt((1 - rho'^2)/(1 - rho^2)) * (x_2 - rho * (x_1 - 8) - 5) + rho' * (x_1 - 8) + 5.

我们还可以在C++中使用独立的正态分布(w_1和w_2(生成器直接生成y_1y_2

它是具有协方差矩阵的二维正态分布:

1, 0.2

0.2, 1

您可以使用 MATLAB 函数 "mvnrnd">

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

我没有找到任何 c++ 库。也许你应该根据 mvnrnd 的方法实现它。