如何从 R 中的随机多变量样本创建多个模拟数据集

How to create multiple simulated datasets from a random multivariate sample in R

我创建了一个类似于以下内容的随机化多变量数据集:

library(JWileymisc)
librarY(MASS)
library(dplyr)

V <- matrix(c(1,0.2,0.7,
            0.2,1,0.5,
            0.7,0.5,1)
           ,3,3)
sigma <- c(60,30,45)
mu <- c(25,10,15)

Sigma <-cor2cov(V,sigma)
data <-data.frame(mvrnorm(n=5,mu,Sigma,3,3))

data <- rename(data,outcome=X1,time=X2,exposure=X3)
data$exposure <- if_else(data$exposure>15,2,1)

然后我想使用这个随机数据集来创建许多多个模拟数据集。有没有一种简单的方法可以使用循环来做到这一点?到目前为止,我已经尝试了以下内容:

NSIM <- 10  #Number of data sets to simulate
set.seed(3465)
simulated_data <- rep(0, NSIM)

for (m in 1:NSIM) {
  simulated_data[m] <- data.frame(mvrnorm(n=5,mu,Sigma,3,3))
}

但是,这并没有真正提供我正在寻找和努力执行上述 rename/if_else 组件的内容。任何帮助将不胜感激!

这里我使用purrr::map_dfr来绑定模拟产生的所有数据帧(它们仍然可以被SN识别和分割)。您可以对合并后的数据帧执行 renamemutate(exposure, ...) 等常见操作。最终,您可以使用例如拆分它们group_by(SN) 后跟 group_split()

library(purrr)
library(dplyr)
NSIM <- 10  #Number of data sets to simulate
set.seed(3465)

map_dfr(1:NSIM,
        ~data.frame(mvrnorm(n=5,mu,Sigma,3,3)),
        .id = "SN") |>
  rename(outcome=X1,time=X2,exposure=X3) |>
  mutate(exposure = if_else(exposure>15,2,1)) |>
  sample_n(10)

##> +    SN     outcome        time exposure
##> 1   2 -35.3326059   3.2585097        1
##> 2   9  25.7304365   7.7347147        2
##> 3   7  68.3215424  -1.9466048        1
##> 4   2  77.4440558  61.0617621        2
##> 5   6 -46.3029760 -11.2115067        1
##> 6   9  92.7289232  52.0273595        2
##> 7  10   0.3859393  53.2966179        2
##> 8  10 -17.2009480 -29.6117604        1
##> 9   5  91.5425904  48.2142412        2
##> 10  3  73.6991481   0.8617149        2