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

Asp*_*ire 12 r rstudio r-markdown

我正在完成一项任务,其中我必须从二元正态生成一个样本 X = (X1, X2),其中每个边际为 N(0,1),X1 和 X2 之间的相关性为 0.5。

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

Sph*_*cal 11

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

检查此函数 ( ??mvrnorm)的帮助页面显示,您需要根据给定参数模拟数据的三个关键参数,即:

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

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


Joe*_*der 8

以下是一些选项:

1)mvtnorm::rmvnormMASS::mvrnorm以相同的方式工作,尽管该mvtnorm::rmvnorm函数不要求您指定均值(即,默认值为 0)。为mu向量命名将指定模拟变量的名称。

n <- 100
R <- matrix(c(1, 0.5,
              0.5, 1), 
            nrow = 2, ncol = 2)

mu <- c(X = 0, Y = 0)
mvtnorm::rmvnorm(n, mean = mu, sigma = R)
MASS::mvrnorm(n, mu = mu, Sigma = R)
Run Code Online (Sandbox Code Playgroud)

2)simstandard::sim_standardized将只制作标准化数据,但会减少输入:

simstandard::sim_standardized("X ~~ 0.5 * Y", n = 100)
Run Code Online (Sandbox Code Playgroud)