生成具有一定均值和标准差的相关分布?

机器算法验证 r 分布 相关性 正态分布
2022-04-02 13:44:01

给定分布 A 的平均值为和标准差为,我如何生成:μ1σ1

  • 分布 B,平均值为,标准差为与分布 A相关μ2σ2X1
  • 分布 C,平均值为,标准差为与分布 B 相关,与分布 A相关μ3σ3X2X3

有人可以告诉我这是否有意义吗?我天真的方法如下:

  1. 使用给定的参数生成 A
  2. 使用给定的参数生成 B,然后查看生成的值是否与 A 具有指定的相关性。如果没有,则重新生成 B,直到达到这种相关性。
  3. 使用步骤 2 中的方法生成 C。

但是,我不太确定这种方法是否会终止。有没有更好的方法来实现这一目标?我很想在 R 中看到一个例子。

1个回答

和协方差矩阵的多元正态抽样将生成这样的数据。μΣ

这是一个使用MASSmvrnorm()(R 附带)中的函数的 R 示例:

## means of individual distributions
mu1 <- 5
mu2 <- 10
mu3 <- 0
## variance
sigma1 <- 5
sigma2 <- 1
sigma3 <- 0.5
## Correlations
X1 <- 0.5
X2 <- 0.1
X3 <- 0.8

## load package
require("MASS")

我们需要提供n、来自每个分布的值的数量、mu均值向量和Sigma协方差矩阵。在下面的代码中,我从上面输入的标量中形成这些。

set.seed(1)
dat <- mvrnorm(100, mu = c(mu1, mu2, mu3),
               Sigma = matrix(c(sigma1, X1    ,     X3,
                                X1    , sigma2,     X2,
                                X3    , X2    , sigma3),
                              ncol = 3, byrow = TRUE),
               empirical = TRUE)

我曾经empirical = TRUE指定经验而非总体参数。这导致协方差矩阵具有我们指定的值:μΣdat

R> cov(dat)
     [,1] [,2] [,3]
[1,]  5.0  0.5  0.8
[2,]  0.5  1.0  0.1
[3,]  0.8  0.1  0.5

该列的含义是:

R> colMeans(dat)
[1]  5.000e+00  1.000e+01 -8.882e-18

如果您使用默认值 ,empirical = FALSE那么您会从总体中获得随机样本,这些样本将具有与指定样本不同的样本均值向量和样本协方差矩阵,因为您只看到n了来自较大总体的示例:

set.seed(1)
dat2 <- mvrnorm(100, mu = c(mu1, mu2, mu3),
                Sigma = matrix(c(sigma1, X1    ,     X3,
                                 X1    , sigma2,     X2,
                                 X3    , X2    , sigma3),
                               ncol = 3, byrow = TRUE))

R> cov(dat2)
       [,1]    [,2]    [,3]
[1,] 4.0441 0.39858 0.61120
[2,] 0.3986 0.91110 0.04842
[3,] 0.6112 0.04842 0.48782
R> colMeans(dat2)
[1]  5.24138 10.06668  0.02448