如何轻松地 generate/simulate 具有不同组的示例数据进行建模
How to easily generate/simulate example data with different groups for modelling
如何轻松地 generate/simulate 有意义的示例数据进行建模:例如告诉我给我 n 行数据,对于 2 组,他们的性别分布和平均年龄应该分别相差 X 和 Y 单位?有没有一种简单的方法可以自动完成?有包裹吗?
例如,生成此类数据的最简单方法是什么?
- 组数:两组:A、B
- 性别:不同性别分布:A 30%,B 70%
- 年龄:不同的平均年龄:A 50,B 70
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
如何轻松地 generate/simulate 有意义的示例数据进行建模:例如告诉我给我 n 行数据,对于 2 组,他们的性别分布和平均年龄应该分别相差 X 和 Y 单位?有没有一种简单的方法可以自动完成?有包裹吗?
例如,生成此类数据的最简单方法是什么?
- 组数:两组:A、B
- 性别:不同性别分布:A 30%,B 70%
- 年龄:不同的平均年龄:A 50,B 70
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