在 R 中创建一个保持数据原始形状的模拟数据集

Creating a simulated dataset which keeps the original shape of the data in R

我有一个包含 11 个变量的数据集。其中,其中六个是数字,另外五个是基于数字变量值的有序因子(即有人得到 62,然后他们得到 D,75 等于,C 等)。

现在我知道我可以使用 rnorm 创建一个数据集,并为它提供每个变量的均值和标准偏差;但是,我的问题是 rnorm 呈正态分布(因此得名),而我的数据呈负偏态。

因此,有人可以告诉我如何创建一个保持原始分布的模拟数据集吗?换句话说,如何创建具有预定义均值、最大值、最小值和标准差的偏态正态分布?

带有mtcars的小例子:

假设我们想要生成 cyl 的随机样本,它的值为 468,但我们想要匹配mtcars

分布

首先,我们需要计算数据中每个值的概率:

set.seed(2)
library(tidyverse)

cyl_pct <- mtcars %>% group_by(cyl) %>% 
  summarize(count = n()) %>% 
  mutate(pct = count/sum(count)) %>% 
  select(pct) %>%
  unlist()

然后我们使用实际数据中的概率来抽样:

mtcars2 <- data.frame(cyl = sample(c(4,6,8), 10000, replace = TRUE, prob = cyl_pct))

现在让我们检查一下:

mtcars2 %>% group_by(cyl) %>% 
      summarize(count = n()) %>% 
      mutate(pct = count/sum(count)) %>% 
      select(pct) %>%
      unlist()

  pct1   pct2   pct3 
0.3495 0.2193 0.4312

mtcars

中的概率相比
   pct1    pct2    pct3 
0.34375 0.21875 0.43750

对于 sample 中较大的 n,这些百分比将收敛到提供的值。