创建一个模拟数据集以保留数据的原始形状

时间:2018-10-01 04:42:50

标签: r simulation

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

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

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

1 个答案:

答案 0 :(得分:1)

带有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

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