我有一个包含11个变量的数据集。在这些变量中,有六个是数字变量,另外五个是基于数字变量值的有序因子(即有人得到62,然后他们得到了D,75等于,C等)。
现在,我知道我可以使用rnorm
创建一个数据集,并为其提供每个变量的均值和标准差;但是,我的问题是rnorm
是正态分布的(因此得名),而我的数据却存在负偏斜。
因此,有人可以告诉我如何创建一个保持原始分布的模拟数据集吗?换句话说,如何创建具有预定义的均值,最大值,最小值和标准偏差的偏态正态分布?
答案 0 :(得分:1)
带有mtcars
的小例子:
假设我们要生成cyl
的随机样本,其值是4
,6
或8
,但我们要匹配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
,这些百分比将收敛到提供的值。