【发布时间】:2019-10-12 13:38:18
【问题描述】:
我正在从多元正态分布生成大量数据以进行模拟。我想知道是否有人知道哪个命令对此最有效。如果是 mvnorm(来自“MASS”包)或 rmvnorm(来自“mvtnorm”包)。
【问题讨论】:
标签: r random gaussian normal-distribution
我正在从多元正态分布生成大量数据以进行模拟。我想知道是否有人知道哪个命令对此最有效。如果是 mvnorm(来自“MASS”包)或 rmvnorm(来自“mvtnorm”包)。
【问题讨论】:
标签: r random gaussian normal-distribution
这些问题可以通过定时不同的方法来轻松回答。让
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 的性能可能稍好一些。由于您有一个特定的应用程序,您应该将n、k 和Sigma 设置为更适合此应用程序的值。