如何轻松地 generate/simulate 具有不同组的示例数据进行建模

How to easily generate/simulate example data with different groups for modelling

如何轻松地 generate/simulate 有意义的示例数据进行建模:例如告诉我给我 n 行数据,对于 2 组,他们的性别分布和平均年龄应该分别相差 X 和 Y 单位?有没有一种简单的方法可以自动完成?有包裹吗?

例如,生成此类数据的最简单方法是什么?

PS!特别欢迎 Tidyverse 解决方案。

到目前为止我最好的尝试仍然是很多代码:

n=100
d = bind_rows(
  #group A females
  tibble(group = rep("A"),
         sex = rep("Female"),
         age = rnorm(n*0.4, 50, 4)),
  #group B females
  tibble(group = rep("B"),
         sex = rep("Female"),
         age = rnorm(n*0.3, 45, 4)),
  #group A males
  tibble(group = rep("A"),
         sex = rep("Male"),
         age = rnorm(n*0.20, 60, 6)),
  #group B males
  tibble(group = rep("B"),
         sex = rep("Male"),
         age = rnorm(n*0.10, 55, 4)))

d %>% group_by(group, sex) %>% 
  summarise(n = n(),
            mean_age = mean(age))

在 R 中有很多方法可以从向量中抽样和从随机分布中抽取数据。例如,您请求的数据集可以这样创建:

set.seed(69) # Makes samples reproducible

df <- data.frame(groups = rep(c("A", "B"), each = 100),
                 sex = c(sample(c("M", "F"), 100, TRUE, prob = c(0.3, 0.7)),
                         sample(c("M", "F"), 100, TRUE, prob = c(0.5, 0.5))),
                 age = c(runif(100, 25, 75), runif(100, 50, 90)))

我们可以使用 tidyverse 来证明它做了预期的事情:

library(dplyr)

df %>% 
  group_by(groups) %>% 
  summarise(age = mean(age),
            percent_male = length(which(sex == "M")))
#> # A tibble: 2 x 3
#>   groups   age percent_male
#>   <chr>  <dbl>        <int>
#> 1 A       49.4           29
#> 2 B       71.0           50