Questão:
Gerando um conjunto de dados simulado a partir de uma matriz de correlação com médias e desvios padrão
histelheim
2015-08-03 16:42:23 UTC
view on stackexchange narkive permalink

Eu tenho uma matriz de correlação padrão de um artigo acadêmico com médias e desvios padrão:

  média sd var1 var2 var3var1 4,23 1,23 1,00 var2 3,01 0,92 0,78 1,00var3 2,91 1,32 0,23 0,27 1,00  

Como posso gerar um conjunto de dados simulado com um N específico (por exemplo, 212) usando R ?

Veja a função `mvrnorm` em` MASS`.Em termos matemáticos mais gerais, esta pergunta foi respondida várias vezes no fórum (veja as Perguntas relacionadas no lado direito da página).Estou votando isso como uma duplicata [deste] (http://stats.stackexchange.com/a/30311/1036), embora tenha certeza de que há outros candidatos.
Dois respostas:
Sven Hohenstein
2015-08-03 17:11:34 UTC
view on stackexchange narkive permalink

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  
Tim
2015-08-03 17:02:29 UTC
view on stackexchange narkive permalink

Assumindo a normalidade, você poderia extrair amostras da distribuição normal multivariada. O que você precisa para isso é um vetor de meios $ \ boldsymbol {\ mu} = (\ mu_1, ..., \ mu_k) $ e uma matriz de covariância $ \ boldsymbol {\ Sigma} $. Se você se lembrar de que a matriz de covariância tem variâncias na diagonal e valores de covariância no resto das células, você pode recriá-la a partir de seus dados.

Correlação é

$$ \ mathrm {corr} (X, Y) = \ frac {\ mathrm {cov} (X, Y)} {\ sigma_X \ sigma_Y} $$

e você já tem os coeficientes de correlação e os desvios padrão de variáveis ​​individuais, portanto, pode usá-los para criar a matriz de covariância. Agora, você apenas tem que usar esses valores como parâmetros de alguma função do pacote estatístico que mostra a distribuição MVN, por exemplo, Pacote mvtnorm em R.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...