给定分布 A 的平均值为和标准差为,我如何生成:
- 分布 B,平均值为,标准差为,与分布 A相关
- 分布 C,平均值为,标准差为,与分布 B 相关,与分布 A相关
有人可以告诉我这是否有意义吗?我天真的方法如下:
- 使用给定的参数生成 A
- 使用给定的参数生成 B,然后查看生成的值是否与 A 具有指定的相关性。如果没有,则重新生成 B,直到达到这种相关性。
- 使用步骤 2 中的方法生成 C。
但是,我不太确定这种方法是否会终止。有没有更好的方法来实现这一目标?我很想在 R 中看到一个例子。
给定分布 A 的平均值为和标准差为,我如何生成:
有人可以告诉我这是否有意义吗?我天真的方法如下:
但是,我不太确定这种方法是否会终止。有没有更好的方法来实现这一目标?我很想在 R 中看到一个例子。
和协方差矩阵的多元正态抽样将生成这样的数据。
这是一个使用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