在 R 中创建一个保持数据原始形状的模拟数据集
Creating a simulated dataset which keeps the original shape of the data in R
我有一个包含 11 个变量的数据集。其中,其中六个是数字,另外五个是基于数字变量值的有序因子(即有人得到 62,然后他们得到 D,75 等于,C 等)。
现在我知道我可以使用 rnorm
创建一个数据集,并为它提供每个变量的均值和标准偏差;但是,我的问题是 rnorm
呈正态分布(因此得名),而我的数据呈负偏态。
因此,有人可以告诉我如何创建一个保持原始分布的模拟数据集吗?换句话说,如何创建具有预定义均值、最大值、最小值和标准差的偏态正态分布?
带有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
对于 sample
中较大的 n
,这些百分比将收敛到提供的值。
我有一个包含 11 个变量的数据集。其中,其中六个是数字,另外五个是基于数字变量值的有序因子(即有人得到 62,然后他们得到 D,75 等于,C 等)。
现在我知道我可以使用 rnorm
创建一个数据集,并为它提供每个变量的均值和标准偏差;但是,我的问题是 rnorm
呈正态分布(因此得名),而我的数据呈负偏态。
因此,有人可以告诉我如何创建一个保持原始分布的模拟数据集吗?换句话说,如何创建具有预定义均值、最大值、最小值和标准差的偏态正态分布?
带有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
对于 sample
中较大的 n
,这些百分比将收敛到提供的值。