Você pode usar a função mvrnorm
do pacote MASS
para obter valores de amostra de uma distribuição normal multivariada.
Seus dados:
mu <- c (4,23, 3,01, 2,91) stddev <- c (1,23, 0,92, 1,32) corMat <- matrix (c (1, 0,78, 0,23, 0,78, 1, 0,27, 0,23, 0,27 , 1), ncol = 3) corMat # [, 1] [, 2] [, 3] # [1,] 1,00 0,78 0,23 # [2,] 0,78 1,00 0,27 # [3,] 0,23 0,27 1,00
Crie a matriz de covariância:
covMat <- stddev% *% t (stddev) * corMatcovMat # [, 1] [, 2] [, 3] # [ 1,] 1,512900 0,882648 0,373428 # [2,] 0,882648 0,846400 0,327888 # [3,] 0,373428 0,327888 1,742400
Valores de amostra. Se você usar empirical = FALSE
, os valores de média e covariância representam os valores da população. Portanto, o conjunto de dados amostrado provavelmente não corresponde a esses valores exatamente.
set.seed (1) library (MASS) dat1 <- mvrnorm (n = 212, mu = mu, Sigma = covMat, empírico = FALSO) colMeans (dat1) # [1] 4.163594 2.995814 2.835397cor (dat1) # [, 1] [, 2] [, 3] # [1,] 1.0000000 0.7348533 0.1514836 # [2,] 0.7348533 1.0000000 0.2654715 # [3,] 0.1514836 0.2654715 1.0000000
Se você amostrar com empirical = TRUE
, as propriedades do conjunto de dados amostrado correspondem às médias e covariâncias exatamente.
dat2 <- mvrnorm (n = 212, mu = mu, Sigma = covMat, empírico = TRUE) colMeans (dat2) # [1] 4,23 3,01 2,91cor (dat2) # [, 1] [, 2] [, 3] # [1,] 1,00 0,78 0,23 # [2,] 0,78 1,00 0,27 # [3,] 0,23 0,27 1,00