r - mvrnorm(来自 MASS)与 rmvnorm(来自 mvtnorm)

标签 r random gaussian normal-distribution

我正在从多元正态分布生成大量数据用于模拟。我想知道是否有人知道哪个命令对此最有效。如果是 mvrnorm(来自“MASS”包)或 rmvnorm(来自“mvtnorm”包)。

最佳答案

这些问题可以通过选择不同的方法来轻松回答。让

library(microbenchmark)
library(MASS)
library(mvtnorm)

n <- 10000
k <- 50
mu <- rep(0, k)
rho <- 0.2
Sigma <- diag(k) * (1 - rho) + rho 

这样我们就有了 50 个单位方差和相关系数为 0.2 的变量。生成 10000 个观察值我们得到

microbenchmark(mvrnorm(n, mu = mu, Sigma = Sigma),
               rmvnorm(n, mean = mu, sigma = Sigma, method = "eigen"),
               rmvnorm(n, mean = mu, sigma = Sigma, method = "svd"),
               rmvnorm(n, mean = mu, sigma = Sigma, method = "chol"),
               times = 100)
# Unit: milliseconds
#                                                    expr      min       lq     mean   median        uq      max neval cld
#                      mvrnorm(n, mu = mu, Sigma = Sigma) 65.04667 73.02912 85.30384 81.70611  92.69137 148.6959   100  a 
#  rmvnorm(n, mean = mu, sigma = Sigma, method = "eigen") 71.14170 81.08311 95.12891 88.84669 100.62174 237.0012   100   b
#    rmvnorm(n, mean = mu, sigma = Sigma, method = "svd") 71.32999 81.30640 93.40939 88.54804 104.00281 208.3690   100   b
#   rmvnorm(n, mean = mu, sigma = Sigma, method = "chol") 71.22712 78.59898 94.13958 89.04653 108.27363 158.7890   100   b

因此,mvrnorm 的性能可能稍好一些。当您有一个特定的应用程序时,您应该将 nkSigma 设置为更适合该应用程序的值。

由于您似乎并不局限于这两种方法,因此您可以查看 Rcpp 替代方案;参见,例如 1 , 2 , 3 .

关于r - mvrnorm(来自 MASS)与 rmvnorm(来自 mvtnorm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318253/

相关文章:

image - RGB 图像的 Matlab 低通滤波器

Python:两个高斯与 np.convolve 卷积的结果函数的大小

javascript - 简单随机重定向代理有偏向

python - 将高斯与四边形集成时突然下降

r - R 包 gmnl 和 Rchoice 中可能存在错误?

r - 这种情节是什么以及如何改变它的颜色

r - 提取 bool 搜索字符串中的第一个值

r - R 描述文件中的 "Repository:"字段

python - 内置.ImportError : cannot import name 'choices'

c - 随机化数组中的结果