繁体   English   中英

如何在 R 中生成多元正态数据?

[英]How to generate multivariate normal data in R?

我正在完成一项作业,其中我必须从双变量法线生成样本 X = (X1, X2),其中每个边际为 N(0,1),X1 和 X2 之间的相关性为 0.5。

我认为解决这个问题的方法是使用 mvrnorm 函数,但我不太确定之后如何进行。 有什么建议吗? 提前致谢!

事实上,MASS 包中的mvrnorm函数可能是你最好的选择。 该函数可以从多元正态分布生成伪随机数据。

检查此函数 ( ??mvrnorm ) 的帮助页面表明,您需要三个关键参数来模拟基于给定参数的数据,即:

  • n - 所需样本数(整数);
  • mu - 给出变量均值的向量 - 在这里,您的分布是标准正态分布,因此它将是一个零向量;
  • Sigma - 一个正定对称矩阵,指定变量的协方差矩阵 - 即,在您的情况下,一个矩阵的对角线上的方差和非对角线上的协方差为 0.5。

看看这个帮助页面中的例子,它应该可以帮助你把这些想法放在一起!

以下是一些选项:

  1. mvtnorm::rmvnormMASS::mvrnorm的工作方式相同,尽管mvtnorm::rmvnorm函数不需要您指定均值(即默认值为 0)。 mu向量命名将指定模拟变量的名称。
n <- 100
R <- matrix(c(1, 0.5,
              0.5, 1), 
            nrow = 2, ncol = 2, byrow = TRUE)
            
mu <- c(X = 0, Y = 0)
mvtnorm::rmvnorm(n, mean = mu, sigma = R)
MASS::mvrnorm(n, mu = mu, Sigma = R)
  1. simstandard::sim_standardized将只生成标准化数据,但输入更少:
simstandard::sim_standardized("X ~~ 0.5 * Y", n = 100)

使用基本 R(不需要包)和一些统计数据:

Sigma = matrix(c(1,0.5,0.5,1), ncol=2)
R = chol(Sigma) # Sigma == t(R)%*%  R
n = 1000
X = t(R) %*% matrix(rnorm(n*2), 2)

X %*% t(X)/n # test

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM