【问题标题】:How to generate multivariate normal data in R?如何在 R 中生成多元正态数据?
【发布时间】:2020-01-31 04:37:01
【问题描述】:

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

    这里有一些选项:

    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)
    

    【讨论】:

    • 对我来说,mvtnorm 返回“loadNamespace(name) 中的错误:没有名为‘mvrnorm’的包”,尽管 mvrnorm 有效。
    • R 矩阵中的缩进可能会产生误导:矩阵是按列而不是按行填充的。如果您的 cov 矩阵不是对称的并且您希望您的代码反映矩阵,请确保使用 byrow = TRUE。这里显然没问题!
    【解决方案2】:

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

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

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

    查看此帮助页面中的示例,它应该可以帮助您将这些想法结合在一起!

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2011-08-09
      • 2019-03-09
      • 2021-12-22
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多